Reenviar solicitud HTTP (o TCP) a través de NGINX usando un subdominio a un puerto específico

Reenviar solicitud HTTP (o TCP) a través de NGINX usando un subdominio a un puerto específico

Quiero exponer un servidor web local a través de un servidor web remoto. El host remoto ya tiene un Nginx y una aplicación web (webmail). El servidor remoto funciona como puerta de enlace para el servidor web local que reenvía el puerto 80 al 8080 remoto. Esto está funcionando.

Ahora quiero reenviar las solicitudes del subdominio (por ejemplo, bridge.mydomain.co) al puerto reenviado. Intenté usar esto:

server {
    listen 80;
    listen [::]:80;
    server_name bridge.mydomain.co;

    location / {
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

El servidor web local está ejecutando una aplicación PHP compleja, por lo que se queja:

40 errores como:

Se negó a cargar la hoja de estilo '' porque viola la siguiente directiva de la Política de seguridad de contenido: "default-src https: data: 'unsafe-inline' 'unsafe-eval'". Tenga en cuenta que 'style-src-elem' no se configuró explícitamente, por lo que 'default-src' se utiliza como alternativa.

y 56 de:

Se negó a cargar el script '' porque viola la siguiente directiva de la Política de seguridad de contenido: "default-src https: data: 'unsafe-inline' 'unsafe-eval'". Tenga en cuenta que 'script-src-elem' no se configuró explícitamente, por lo que 'default-src' se utiliza como alternativa.

Sé que podría exponer el puerto reenviado directamente, esto funciona perfectamente. Pero quiero usar (eventualmente) nginx para la terminación de TLS y luego el reenvío.

Al leer sobre este problema, parece que el servidor web local en PHP rechaza las solicitudes. Aún así, no sé cómo solucionarlo.

¿Alguna ayuda?

Respuesta1

Descúbrelo al final. Necesitaba pasar/agregar los siguientes encabezados:

server {
    listen 80;
    listen [::]:80;
    server_name bridge.mydomain.co;

    proxy_pass_header server;

    location / {
        proxy_set_header Host $host;
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' http://bridge.mydomain.co http://bridge.mydomain.co:8080  http://bridge.mydomain.co/core/img/favicon-touch.png; img-src 'self' http://bridge.mydomain.co http://bridge.mydomain.co:8080;";
        proxy_pass http://bridge.mydomain.co:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

Creo que la versión del puerto no es necesaria y faltan algunos encabezados que están cubiertos por el valor "predeterminado". Así que hay margen de mejora.

Si quieres leer una explicación aquí hay material de personas con más conocimientos que yo:https://stackoverflow.com/questions/33300111/how-to-override-content-security-policy-of-site-a- while-using-nginx-proxy-pass-o

información relacionada