Encaminhar solicitação HTTP (ou TCP) por meio do NGINX usando subdomínio para uma porta específica

Encaminhar solicitação HTTP (ou TCP) por meio do NGINX usando subdomínio para uma porta específica

Quero expor um servidor web local por meio de um servidor web remoto. O host remoto já possui um Nginx e uma aplicação web (webmail). O servidor remoto funciona como um gateway para o servidor local que está encaminhando a porta 80 para o 8080 remoto. Isso está funcionando.

Agora quero encaminhar as solicitações de subdomínio (por exemplo, bridge.mydomain.co) para a porta encaminhada. Eu tentei usar isso:

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

O servidor local está executando um aplicativo PHP complexo, por isso está reclamando:

40 erros como:

Recusou-se a carregar a folha de estilo '' porque ela viola a seguinte diretiva da Política de Segurança de Conteúdo: "default-src https: data: 'unsafe-inline' 'unsafe-eval'". Observe que 'style-src-elem' não foi definido explicitamente, então 'default-src' é usado como substituto.

e 56 de:

Recusou-se a carregar o script '' porque ele viola a seguinte diretiva da Política de Segurança de Conteúdo: "default-src https: data: 'unsafe-inline' 'unsafe-eval'". Observe que 'script-src-elem' não foi definido explicitamente, então 'default-src' é usado como substituto.

Eu sei que poderia expor a porta encaminhada diretamente, isso funciona perfeitamente. Mas quero usar (eventualmente) o nginx para terminação de TLS e depois encaminhamento.

Lendo sobre esse problema parece que o servidor local em PHP está recusando as solicitações. No entanto, não sei como consertar isso.

Qualquer ajuda?

Responder1

Descubra no final. Eu precisava passar/adicionar os seguintes cabeçalhos:

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

}

Acredito que a versão da porta não é necessária e faltam alguns cabeçalhos que são cobertos pelo "padrão". Portanto, há espaço para melhorias.

Se você quiser ler uma explicação aqui, há algum material de pessoas com mais conhecimento do que eu:https://stackoverflow.com/questions/33300111/how-to-override-content-security-policy-of-site-a-while-using-nginx-proxy-pass-o

informação relacionada