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.