Tengo problemas para que mi proxy inverso funcione cuando uso una ruta en nginx. Lo que intento hacer es tener una dirección para una aplicación y dictar el entorno con la ruta. Dependiendo de la ruta, apuntaría a un servidor diferente. Puedo hacer que el proxy inverso funcione cuando uso un enlace directo, pero al usar una ruta aparece un error 404.
app.foo.bar/dev = error 404 devapp.foo.bar = éxito
¿Qué he hecho mal en app.foo.bar/dev?
Aquí está la configuración del proxy inverso que funciona, pero prefiero no usarla:
server {
listen 80; # DEV Application Proxy
server_name devapp.foo.bar;
location / {
proxy_pass http://appserver.foo.bar:7010;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
port_in_redirect off;
proxy_redirect http://appserver.foo.bar:7010/ /;
proxy_connect_timeout 300;
}
}
Aquí hay una parte de lo que quiero hacer usando la ruta, pero obtengo el error 404.
# APP Environment Proxy
server {
listen 80;
server_name app.foo.bar;
location /dev {
proxy_pass http://appserver.foo.bar:7010;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
port_in_redirect off;
proxy_redirect http://appserver.foo.bar:7010 /;
proxy_connect_timeout 300;
}
}
Busqué en Google este tipo de configuración, pero no puedo encontrar una solución. Gracias de antemano por cualquier ayuda.
Respuesta1
Cuando lo haya hecho proxy_pass http://appserver.foo.bar:7010;
, nginx agrega el URI normalizado a la URL de solicitud pasada al backend.
Entonces, cuando realiza una solicitud http://app.foo.bar/dev
, la solicitud va a http://appserver.foo.bar:7010/dev
. Si su servidor de desarrollo no tiene esta ruta, devolverá 404, que nginx devuelve al cliente.
Si desea que todas las solicitudes que comiencen con http://app.foo.bar/dev
vayan a http://appserver.foo.bar:7010
tal que el resto del URI se agregue al URI del servidor backend, puede usar esta configuración:
location ~ ^/dev(.+)$ {
proxy_pass http://appserver.foo.bar:7010$1$is_args$args;
...
}
Entonces, capturamos la parte posterior /dev
con expresiones regulares en una variable y luego agregamos esa variable al final de la proxy_pass
ruta.