Nginx mengalihkan ke port 8080 ketika mengakses url tanpa garis miring [ditutup]


19

saat mengakses: http://example.com/somefolder -> http://example.com:8080/somefolder

Saya sudah mencoba ini:

 http {
    port_in_redirect off;

Ada ide?


Bisakah Anda memberikan konfigurasi Anda? Apakah Anda melakukan proxy ke layanan lain di belakang nginx?
— Shane Madden

Saya yakin kita sedang proksi ke apache. File konfigurasi mana yang Anda inginkan?
— Chris Muench

3
File konfigurasi nginx yang mendefinisikan serverblok yang berisi proxy_passarahan. Apa yang mungkin Anda perlukan akan menjadi proxy_redirectarahan - melihat konfigurasi Anda harus mengonfirmasi.
— Shane Madden

Perhatikan bahwa beberapa cache cache dialihkan sehingga ketika berubah port_in_redirectdari onke offAnda mungkin perlu me-restart itu.
— emersion

@emersion port_in_redirecttidak bekerja sama sekali
— TomSawyer

Jawaban:


21

Saya baru saja mengalami masalah yang sama dan port_in_redirect off;benar - benar bekerja untuk saya, pastikan Anda menggunakannya di dalam server {}blok.

server {
  listen 8080;
  server_name example.com;

  port_in_redirect off;
  autoindex on;

  location / {
    root /var/www/example.com;
    index index.html;
  }
}

Atau bahkan digunakan port_in_redirectdi dalam location.
— wqw

bekerja dengan sempurna untuk hosting nginx di 8080 di belakang load balancer. terima kasih
— xxstevenxo

juga bekerja untuk saya, terima kasih banyak atas bantuan Anda
— h3nr1ke

4

Ini harus memperbaiki masalah. Tambahkan proxy_redirectarahan tepat setelah proxy_passarahan

proxy_redirect http://example.com:8080/ http://example.com/;


3

Jika seseorang masih mengalami masalah ini ketika memiliki apache di balik pengaturan proxy reverse nginx, Anda dapat mencoba ff:

  lokasi / {
    proxy_redirect mati;
    proxy_set_header Host $ host: $ server_port; # <- yang ini menyelesaikan milikku
    proxy_set_header X-Forwarded-Host $ http_host;
    proxy_set_header X-Real-IP $ remote_addr;
    proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8083 ;
  }
  

Setup saya adalah saya membiarkan Apache mendengarkan 127.0.0.1:8083 dan membiarkan nginx proxy memintanya.


2

Saya memiliki masalah yang sama dengan pengaturan nginx + Apache saya. Apache tampaknya mengarahkan ke port itu sendiri (berjalan pada 8080), sementara nginx ada di port 80.

Dalam pengaturan saya, ini membuat loop pengalihan tak terbatas untuk url normal :

proxy_set_header Host $host:80; # Force port 80

Sebaliknya mengikat data yang dikembalikan ke port 80, seperti ini:

proxy_bind $host:80; # Bind to port 80

Inilah blok server nginx saya:

server {
    listen 80;
    listen [::]:80 ipv6only=on;

    server_name _; # Wildcard server

    location / {
        proxy_bind $host:80; # Bind to port 80 << THIS IS THE MAGIC
        proxy_pass http://localhost:8080;
        proxy_set_header Host            $host; # Pass host header
        proxy_set_header X-Real-IP       $remote_addr; # Preserve client IP
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Dengan pengaturan wildcard ini, semua permintaan nginx tidak memiliki blok server untuk diteruskan ke Apache.


Tidak bekerja sama sekali
— TomSawyer

1

Jika ada orang lain yang mengalami masalah ini - artikel di sini: http://www.linuxquestions.org/questions/linux-server-73/strange-nginx-redirects-without-trailing-slash-930876/ menyelesaikan masalah untuk saya .

Saya harus menambahkan header tambahan di proxy.

Pastikan Anda memiliki Host set untuk $http_hostdan juga bahwa Anda telah mengatur X-Forwarded-Hostuntuk $http_hostseperti di bawah ini:

proxy_redirect off;
proxy_set_header Host $http_host;             # <-- make sure this is $http_host
proxy_set_header X-Forwarded-Host $http_host; # <-- make sure you set this
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 8k;
proxy_busy_buffers_size 64k;

Tidak berfungsi sama sekali
— TomSawyer

1

Saya pikir contoh sederhana ini sudah cukup:

location = /somefolder {
    return 302 http://$host:8080/somefolder;
}


0

Saya punya masalah serupa.

Mungkin Anda harus menggunakan arahan proxy_set_headeruntuk mengatur host dan lokasi header. Dalam konfigurasi saya, saya menambahkan proxy_set_header Location $host:80; dan semua permintaan mengembalikan port 80 sekarang.


Saya percaya ini akan memecah pengalihan di luar "/" - setiap pengalihan akan mengarah ke $ host: 80
— perrierism

0

Masalah ini disebabkan oleh Nginx otomatis menerjemahkan jalur relatif ke jalur absolut, bukan?
Ada cara untuk memberi tahu Nginx untuk tidak menerjemahkan, Anda menambahkan spasi sebelum slash: ngx.redirect(" /foo")


Harap dicatat bahwa ini adalah pertanyaan dari 3 tahun yang lalu.
— Pemburu Rusa

-1

Saya akan merekomendasikan sebagai gantinya menambahkan ini ke blok server Anda:

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

Ini adalah ketika Anda pergi ke example.com/wp-admin itu akan pergi ke example.com/wp-admin daripada pergi ke example.com:8080/wp-admin/ dan jika Anda menggunakan CloudFlare DNS misalnya ia akan mengatakan situs sedang down.

Saya menggunakan Ubuntu, Nginx dan Varnish dan ini berfungsi dengan baik sekarang daripada menonaktifkan port_in_redirect.

Untuk menambahkan, pastikan untuk me-restart nginx setelah:

sudo service nginx restart

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.