Proxy de un sitio con NGINX a otro sitio

Proxy de un sitio con NGINX a otro sitio

Tengo un sitio con algunas URL en (http://ubicación:puerto/) y desea utilizar NGINX como proxy.

Tengo otro sitio, en (http://ubicación2:puerto2) y también quiero representarlo de tal manera que.

  1. Se accede al sitio 1 a través de http://main.comy
  2. Se accede al sitio 2 a través http://main.com/site2de todos sus subenlaces.

Mi intento está fallando.

server {
    listen  80;

    index index.html;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://landing-page:5000;
        proxy_redirect off;
    }

    location /insights {
        return 302 $uri/;
    }

    location /insights/ {
        # proxy_set_header X-Real-IP $remote_addr;
        # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # proxy_set_header Host $http_host;
        # proxy_set_header X-NginX-Proxy true;

        rewrite ^/insights/?(.*) /$1 break;

        proxy_pass http://ghost:2368/;
        # proxy_redirect off;
    }
}

Información adicional

Estoy ejecutando NGINX en Docker y debo asignar el puerto 80 al 8080 en mi Mac.

Encontré esto:

  1. http://localhost:8080/insightsestablece la URL http://localhost/insights/en el navegador
  2. http://localhost:8080/insights/ghostestablece la URL enhttp://localhost:8080/ghost/
  3. http://localhost:8080/insights/establece la URL enhttp://localhost:8080/insights/
  4. http://localhost:8080/insights/ghost/establece la URL enhttp://localhost:8080/insights/ghost/

CUALQUIER URL con la barra diagonal final parece funcionar bien. ¿Por qué?

Respuesta1

Su location /bloque debe estar al final del archivo. Los bloques de ubicación se procesan en orden y se ejecutará el primer bloque coincidente. Dado que location /coincide con cada solicitud, siempre se ejecutará.

En general, debe tener primero los bloques más específicos, seguidos de los menos específicos y finalmente terminar con location /todas las demás solicitudes.

Su archivo debe estar dispuesto así:

server {
    listen  80;

    index index.html;

    location /insights/ {
        # proxy_set_header X-Real-IP $remote_addr;
        # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # proxy_set_header Host $http_host;
        # proxy_set_header X-NginX-Proxy true;

        rewrite ^/insights/?(.*) /$1 break;

        proxy_pass http://ghost:2368/;
        # proxy_redirect off;
    }

    location /insights {
        return 302 $uri/;
    }

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://landing-page:5000;
        proxy_redirect off;
    }
}

información relacionada