Nginx redirige al puerto 8080 cuando accede a url sin barra inclinada [cerrado]


19

al acceder: http://example.com/somefolder -> http://example.com:8080/somefolder

He intentado esto:

 http {
    port_in_redirect off;

¿Algunas ideas?


¿Puedes proporcionar tu configuración? ¿Estás representando a otro servicio detrás de nginx?
Shane Madden

Creo que estamos representando al apache. ¿Qué archivos de configuración quieres?
Chris Muench

3
El archivo de configuración nginx que define el serverbloque que contiene la proxy_passdirectiva. Lo que probablemente necesitará será una proxy_redirectdirectiva: ver su configuración debería confirmar.
Shane Madden

Tenga en cuenta que algunos navegadores redirigen la memoria caché, por lo que al cambiar port_in_redirectde ona, offes posible que deba reiniciarlo.
Emersion

@emersion port_in_redirectno funciona en absoluto
TomSawyer

Respuestas:


21

Me encontré con el mismo problema y port_in_redirect off;realmente funcionó para mí, solo asegúrese de usarlo dentro del server {}bloque.

server {
  listen 8080;
  server_name example.com;

  port_in_redirect off;
  autoindex on;

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

O incluso usar en el port_in_redirectinterior location.
wqw

funcionó perfectamente para alojar nginx en 8080 detrás de un equilibrador de carga. gracias
xxstevenxo

también funcionó para mí, muchas gracias por su ayuda
h3nr1ke

4

Esto debería solucionar el problema. Agregar proxy_redirectdirectiva justo después de la proxy_passdirectiva

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


3

Si alguien sigue experimentando este problema mientras tiene apache detrás de la configuración del proxy inverso nginx, puede probar el ff:

  ubicación / {
    proxy_redirect desactivado;
    proxy_set_header Host $ host: $ server_port; # <- este resolvió el mío
    proxy_set_header X-Fordered-Host $ http_host;
    proxy_set_header X-Real-IP $ remote_addr;
    proxy_set_header X-Fordered-For $ proxy_add_x_forwards_for;
    proxy_pass http://127.0.0.1:8083 ;
  }
  

Mi configuración es que dejo que Apache escuche 127.0.0.1:8083 y dejo las solicitudes de proxy nginx.


2

Tuve el mismo problema con mi configuración nginx + Apache. Apache parece estar redirigiendo a su propio puerto (ejecutándose en 8080), mientras que nginx está en el puerto 80.

En mi configuración, esto hizo un bucle de redireccionamiento infinito para las URL normales :

proxy_set_header Host $host:80; # Force port 80

En su lugar, vincule los datos que regresan al puerto 80, así:

proxy_bind $host:80; # Bind to port 80

Aquí está mi bloque de servidor 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 esta configuración de comodín, todas las solicitudes que nginx no tiene bloque de servidor se pasan a Apache.


No funciona en absoluto
TomSawyer

1

En caso de que alguien más tuviera este problema, el artículo aquí: http://www.linuxquestions.org/questions/linux-server-73/strange-nginx-redirects-without-trailing-slash-930876/ me resolvió el problema .

Tuve que agregar un encabezado adicional en el proxy.

Asegúrese de tener el Host configurado $http_hosty también de haber configurado el X-Forwarded-Hostque se $http_hostmuestra a continuación:

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;

No funciona en absoluto
TomSawyer

1

Creo que este simple ejemplo es suficiente:

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


0

Tuve un problema similar.

Tal vez debería usar la directiva proxy_set_headerpara establecer el host y la ubicación de los encabezados. En mi configuración agregué proxy_set_header Location $host:80; y todas las solicitudes devuelven el puerto 80 ahora.


Creo que esto romperá las redirecciones más allá de "/": cada redirección apuntaría a $ host: 80
perrierism

0

Este problema es causado por Nginx auto traduce la ruta relativa a la ruta absoluta, ¿verdad?
Hay una manera de decirle a Nginx que no traduzca, agregue un espacio antes de la barra inclinada: ngx.redirect(" /foo")


Tenga en cuenta que esta es una pregunta de hace 3 años.
Deer Hunter

-1

En su lugar, recomendaría agregar esto a su bloque de servidor:

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

Esto fue cuando va a example.com/wp-admin irá a example.com/wp-admin en lugar de ir a example.com:8080/wp-admin/ y si está en CloudFlare DNS, por ejemplo, dirá El sitio está caído.

Estoy usando Ubuntu, Nginx y Varnish y esto funciona perfectamente ahora en lugar de deshabilitar port_in_redirect.

Para agregar, asegúrese de reiniciar nginx después de:

sudo service nginx restart

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.