使用子域通过 NGINX 将 HTTP(或 TCP)请求转发到特定端口

使用子域通过 NGINX 将 HTTP(或 TCP)请求转发到特定端口

我想通过远程 Web 服务器公开本地 Web 服务器。远程主机已经有一个 Nginx 和一个 Web 应用程序(Webmail)。远程服务器充当本地 Web 服务器的网关,将端口 80 转发到远程 8080。这很有效。

现在我想将子域(例如 bridge.mydomain.co)请求转发到转发端口。我尝试使用这个:

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

本地网络服务器正在运行一个复杂的 PHP 应用程序,因此它抱怨:

40 个错误,例如:

拒绝加载样式表'',因为它违反了以下内容安全策略指令:“default-src https:data:'unsafe-inline''unsafe-eval'”。请注意,'style-src-elem'未明确设置,因此'default-src'用作后备。

以及 56 个:

拒绝加载脚本“”,因为它违反了以下内容安全策略指令:“default-src https:data:'unsafe-inline''unsafe-eval'”。请注意,“script-src-elem”未明确设置,因此“default-src”用作后备。

我知道我可以直接公开转发端口,这可以完美地工作。但我想(最终)使用 nginx 进行 TLS 终止,然后进行转发。

读到这个问题,似乎 PHP 中的本地 Web 服务器拒绝了请求。然而,我不知道如何修复它。

有什么帮助吗?

答案1

最后弄清楚。我需要传递/添加以下标题:

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

}

我认为不需要端口版本,并且缺少一些标头,这些标头已由“默认”版本覆盖。因此还有改进的空间。

如果你想阅读这里的解释,这里有一些比我更了解的人提供的材料:https://stackoverflow.com/questions/33300111/how-to-override-content-security-policy-of-site-a-while-using-nginx-proxy-pass-o

相关内容