Redirección de barra final de Nginx + Apache [cerrado]

8

Tengo un Nginxservidor que se ejecuta en el 80puerto y funciona como un proxy Apache 2.2que está escuchando127.0.0.1:8080

Cuando accedo http://hostname/subfolder/funciona muy bien.
Cuando http://hostname/subfolderaccedo me redirige a lo http://hostname:8080/subfolder/que está mal.

Por lo que yo veo la redirección incorrecta se devuelve por Apache, pero UseCanonicalNamey UseCanonicalPhysicalProxyse establecen enOff

¿Algunas ideas de como reparar esto?

cuarc
fuente
El problema parece estar en su configuración de nginx teniendo en cuenta que su acceso al puerto 80 sin una barra inclinada final da como resultado una redirección al puerto 8080. A MENOS QUE su nginx esté proxy a Apache y Apache esté ordenando una redirección.
PP.
Uso nginx como proxy
quark, el

Respuestas:

5

También me encontré con esto, y pude arreglarlo con una directiva proxy_redirect justo después de mi directiva proxy_pass en mi configuración nginx:

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

Esta es mi configuración nginx completa (en mi caso, Apache está en el puerto 81 y aloja dos sitios. Agregué dos líneas proxy_redirect específicas del sitio porque no estoy seguro de cómo agregar una sola genérica).

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: Esto fue para una versión anterior a la 1.0 de nginx hace más de 5 años. Aquí están los documentos para proxy_redirect para la versión actual: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

Nathan Friedly
fuente
agregar proxy_redirect da el error de sintaxis
TomSawyer
Esto estaba en una versión bastante antigua de nginx. Ya no uso nginx (solo contenido estático en las páginas de github para mi sitio personal), pero actualicé la respuesta con un enlace a los documentos proxy_redirect actuales.
Nathan Friedly
De esta manera, todavía lo haces más lento debido a la redirección
TomSawyer
2

Si su directiva ServerName en Apache está configurada en "hostname: 8080", elimine ": 8080" o cámbiela a "hostname: 80". También puede agregar "proxy_set_header Host $ host: 80"

usuario71577
fuente
1

Tuve este problema hace mucho tiempo. Como recuerdo, tenía que ver con el RFC de HTTP, la barra al final denota un directorio (/ test /), sin barra al final es un archivo (/ test)

En pocas palabras, agregue una regla de reescritura que agregará una barra diagonal a la solicitud, si no hay ninguna.

mira Resuelto: problema de barra diagonal con el servidor Nginx

HTP

Mihai
fuente
1

Me encontré con este problema exacto recientemente. Si bien las soluciones sugeridas funcionarán, Nginx ofrece una solución integrada:

proxy_redirect default;

Documentación en http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

Aquí hay un ejemplo completo de cómo usarlo:

server {
  listen 80;
  location / {
    proxy_pass http://localhost:8080
    proxy_redirect default
  }
}
Dylan Wood
fuente
0

Quizás nginx no está configurando los encabezados proxy para decirle a Apache cómo se veía la solicitud original.

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

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

frijoles
fuente