Nginx + Apache trailing redirect di barra [chiuso]


8

Ho un Nginxserver in esecuzione sulla 80porta che funziona come proxy a Apache 2.2cui è in ascolto127.0.0.1:8080

Quando accedo http://hostname/subfolder/funziona alla grande.
Quando http://hostname/subfolderaccedo, mi reindirizza a http://hostname:8080/subfolder/quale è sbagliato.

Per quanto vedo il reindirizzamento sbagliata viene restituito da Apache, ma UseCanonicalNamee UseCanonicalPhysicalProxysono entrambi impostatiOff

Qualche idea su come risolverlo?


Il problema sembra riguardare la configurazione di nginx, considerando che l'accesso alla porta 80 senza una barra finale comporta un reindirizzamento alla porta 8080. A MENO CHE nginx stia eseguendo il proxy su Apache e Apache stia ordinando un reindirizzamento.
PP.

Uso nginx come proxy
quark il

Risposte:


5

Mi sono imbattuto anche in questo e sono stato in grado di risolverlo con una direttiva proxy_redirect subito dopo la mia direttiva proxy_pass nella mia configurazione nginx:

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

Questa è la mia configurazione completa di nginx (Nel mio caso, Apache si trova sulla porta 81 e ospita due siti. Ho aggiunto due righe proxy_redirect specifiche del sito perché non sono sicuro di come aggiungerne uno generico.)

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;

    }
}

Nota: questo era per una versione pre-1.0 di nginx 5+ anni fa. Ecco i documenti per proxy_redirect per la versione corrente: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect


l'aggiunta di proxy_redirect genera l'errore di sintassi
TomSawyer il

Questo era su una versione abbastanza vecchia di nginx. Non sto più usando nginx (solo contenuto statico su pagine github per il mio sito personale), ma ho aggiornato la risposta con un collegamento ai documenti proxy_redirect correnti.
Nathan Friedly,

In questo modo, lo fai ancora più lentamente a causa del reindirizzamento
TomSawyer,

2

Se la direttiva ServerName su Apache è impostata su "nomehost: 8080", rimuovere ": 8080" o modificarlo in "nome host: 80". Puoi anche aggiungere "proxy_set_header $ host host: 80"


1

Ho avuto questo problema molto tempo fa .. Come ricordo che aveva a che fare con il protocollo RFC HTTP, la barra alla fine indica una directory (/ test /), nessuna barra alla fine è un file (/ test)

Per farla breve, aggiungi una regola di riscrittura che aggiungerà una barra finale alla richiesta, se non ce ne sono.

guarda Risolto: problema finale della barra con il server Nginx

HTP



0

Forse nginx non sta impostando le intestazioni del proxy per dire ad Apache come appariva la richiesta originale.

In 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;

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.