Nginx reindirizza alla porta 8080 quando si accede all'URL senza barra [chiuso]


19

quando si accede: http://example.com/somefolder -> http://example.com:8080/somefolder

Ho provato questo:

 http {
    port_in_redirect off;

Qualche idea?


Puoi fornire la tua configurazione? Stai inviando un altro servizio dietro a nginx?
Shane Madden

Credo che stiamo procurando l'apache. Quali file di configurazione vuoi?
Chris Muench, il

3
Il file di configurazione nginx che definisce il serverblocco che contiene la proxy_passdirettiva. Ciò di cui probabilmente avrai bisogno sarà una proxy_redirectdirettiva: vedere la tua configurazione dovrebbe confermare.
Shane Madden

Si noti che alcuni browser memorizzano i reindirizzamenti nella cache, pertanto quando si passa port_in_redirectda ona l' offutente potrebbe essere necessario riavviarlo.
emersione

@emersion port_in_redirectnon funziona affatto
TomSawyer il

Risposte:


21

Ho appena incontrato lo stesso problema e in port_in_redirect off;realtà ha funzionato per me, assicurati solo di usarlo all'interno del server {}blocco.

server {
  listen 8080;
  server_name example.com;

  port_in_redirect off;
  autoindex on;

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

O anche usare port_in_redirectdentro location.
wqw,

ha funzionato perfettamente per l'hosting di nginx su 8080 dietro un bilanciamento del carico. grazie
xxstevenxo il

ha funzionato anche per me, grazie mille per il tuo aiuto
h3nr1ke,

4

Questo dovrebbe risolvere il problema. Aggiungi proxy_redirectdirettiva subito dopo proxy_passdirettiva

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


3

Se qualcuno continua a riscontrare questo problema pur avendo apache dietro l'installazione del proxy inverso nginx, puoi provare il file ff:

  Posizione / {
    proxy_redirect disattivato;
    proxy_set_header Host $ host: $ server_port; # <- questo ha risolto il mio
    proxy_set_header X-Forwarded-Host $ http_host;
    proxy_set_header X-Real-IP $ remote_addr;
    proxy_set_header X-Forwarded-Per $ proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8083 ;
  }
  

La mia configurazione è che lascio che Apache ascolti 127.0.0.1:8083 e consenta alle richieste del proxy nginx.


2

Ho avuto lo stesso problema con la mia configurazione di nginx + Apache. Apache sembra reindirizzare alla propria porta (in esecuzione su 8080), mentre nginx si trova sulla porta 80.

Nella mia configurazione, questo ha reso il ciclo di reindirizzamento infinito per gli URL normali :

proxy_set_header Host $host:80; # Force port 80

Associare invece i dati di ritorno alla porta 80, in questo modo:

proxy_bind $host:80; # Bind to port 80

Ecco il mio blocco server nginx:

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

Con questa configurazione jolly, tutte le richieste per cui nginx non ha un blocco server viene trasmesso ad Apache.


Non funziona affatto
TomSawyer il

1

Nel caso in cui qualcun altro avesse avuto questo problema - l'articolo qui: http://www.linuxquestions.org/questions/linux-server-73/strange-nginx-redirects-without-trailing-slash-930876/ ha risolto il problema per me .

Ho dovuto aggiungere un'intestazione aggiuntiva nel proxy.

Assicurarsi di avere il set Host $http_hoste anche che si è impostato il X-Forwarded-Hostper $http_hostcome di seguito:

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;

Non funziona affatto
TomSawyer il

1

Penso che questo semplice esempio sia sufficiente:

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


0

Ho avuto un problema simile.

Forse dovresti usare la direttiva proxy_set_headerper impostare l'host e la posizione delle intestazioni. Nella mia configurazione ho aggiunto proxy_set_header Location $host:80; e tutte le richieste restituiscono ora la porta 80.


Credo che questo spezzerà i reindirizzamenti oltre "/" - ogni reindirizzamento punterebbe a $ host: 80
perrierismo

0

Questo problema è causato dalla traduzione automatica di Nginx dal percorso relativo al percorso assoluto, giusto?
C'è un modo per dire a Nginx di non tradurre, aggiungi uno spazio prima della barra: ngx.redirect(" /foo")


Questa è una domanda di 3 anni fa.
Deer Hunter

-1

Consiglierei invece di aggiungere questo al tuo blocco server:

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

Questo è stato quando vai su example.com/wp-admin andrà su example.com/wp-admin invece che su example.com:8080/wp-admin/ e se sei su CloudFlare DNS per esempio dirà il sito è inattivo.

Sto usando Ubuntu, Nginx e Varnish e ora funziona perfettamente piuttosto che disabilitare port_in_redirect.

Per aggiungere, assicurarsi di riavviare nginx dopo:

sudo service nginx restart

-1

L'aggiunta absolute_redirect off; nel blocco posizione funziona per me.

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.