Nginx

使用子域通過 NGINX 將 HTTP(或 TCP)請求轉發到特定埠

  • April 21, 2022

我想通過遠端 Web 伺服器公開本地 Web 伺服器。遠端主機已經有一個 Nginx 和一個 web 應用程序(webmail)。遠端伺服器充當將埠 80 轉發到遠端 8080 的本地 Web 伺服器的網關。這是有效的。

現在我想將子域(例如,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 中的本地網路伺服器拒絕了請求。然而,我不知道如何解決它。

有什麼幫助嗎?

最後想清楚。我需要傳遞/添加以下標題:

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 -使用-nginx-proxy-pass-o

引用自:https://serverfault.com/questions/1098418