使用子網域透過 NGINX 將 HTTP(或 TCP)請求轉送到特定連接埠

使用子網域透過 NGINX 將 HTTP(或 TCP)請求轉送到特定連接埠

我想透過遠端網路伺服器公開本地網路伺服器。遠端主機已經有一個 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 中的本機網路伺服器拒絕了請求。然而,我不知道如何解決它。

有什麼幫助嗎?

答案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

相關內容