Nginx + Apache trailing slash redirect [ditutup]


8

Saya memiliki Nginxserver yang berjalan pada 80port yang berfungsi sebagai proxy Apache 2.2yang sedang didengarkan127.0.0.1:8080

Ketika saya mengaksesnya http://hostname/subfolder/berfungsi dengan baik.
Ketika saya mengaksesnya http://hostname/subfoldermengarahkan saya ke http://hostname:8080/subfolder/yang salah.

Sejauh yang saya lihat redirect yang salah dikembalikan oleh Apache tetapi UseCanonicalNamedan UseCanonicalPhysicalProxykeduanya diatur keOff

Adakah Ide tentang cara memperbaikinya?


Masalahnya muncul dengan konfigurasi nginx Anda mengingat akses Anda ke port 80 tanpa garis miring menghasilkan pengalihan ke port 8080. KECUALI nginx Anda adalah proxy-proxy ke Apache dan Apache memesan redirect.
PP.

Saya menggunakan nginx sebagai proxy
quark

Jawaban:


5

Saya juga mengalami hal ini, dan saya dapat memperbaikinya dengan direktif proxy_redirect tepat setelah direktif proxy_pass saya dalam konfigurasi nginx saya:

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

Ini adalah konfigurasi nginx lengkap saya (Dalam kasus saya, Apache ada di port 81 dan hosting dua situs. Saya menambahkan dua baris proxy_redirect khusus-situs karena saya tidak yakin bagaimana cara menambahkan satu generik tunggal.)

server {
    listen 80;

    access_log /var/log/nginx/apache-proxy.access.log;

    location / {
        proxy_pass http://localhost:81;

        #fix for apache redirects that include the port number
        proxy_redirect http://nfriedly.com:81/ http://nfriedly.com/;
        proxy_redirect http://misticflame.com:81/ http://misticflame.com/;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 6000;
        proxy_send_timeout 6000;
        proxy_read_timeout 6000;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
        send_timeout 6000;
        proxy_buffering off;
        proxy_next_upstream error;

    }
}

Catatan: Ini untuk versi nginx 5+ tahun pra-1.0. Inilah dokumen untuk proxy_redirect untuk versi saat ini: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect


menambahkan proxy_redirect memberikan kesalahan sintaksis
TomSawyer

Ini pada versi nginx yang cukup lama. Saya tidak lagi menggunakan nginx (hanya konten statis pada halaman github untuk situs pribadi saya), tetapi saya memperbarui jawabannya dengan tautan ke dokumen proxy_redirect saat ini.
Nathan Friedly

Dengan cara ini, Anda masih mendapatkannya lebih lambat karena pengarahan ulang
TomSawyer

2

Jika direktif ServerName Anda di Apache diatur ke "hostname: 8080", hapus ": 8080" atau ubah menjadi "hostname: 80". Anda juga dapat menambahkan "proxy_set_header Host $ host: 80"


1

Saya memiliki masalah ini sejak lama .. Seperti yang saya ingat ada hubungannya dengan HTTP RFC, slash pada akhirnya menunjukkan direktori (/ test /), tidak ada slash pada akhirnya file (/ test)

Singkatnya, tambahkan aturan penulisan ulang yang akan menambahkan garis miring pada permintaan, jika tidak ada.

lihat Solved: masalah trailing slash dengan server Nginx

HTP



0

Mungkin nginx tidak mengatur header proxy untuk memberi tahu apache seperti apa bentuk permintaan aslinya.

Dalam nginx:

proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Lihat http://wiki.nginx.org/LikeApache

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.