通過 nginx 代理將 hudson 映射到子域
我現在正在嘗試將 nginx 設置為 Hudson 的反向代理,以便可以訪問
<http://build.example.com>
直接地。我已經在 Tomcat 上安裝了 Hudson 並驗證我可以訪問 Hudson
<http://127.0.0.1:8080/hudson>
在http://build.example.com/hudson上訪問可以訪問 hudson 的位置非常簡單。但是當我試圖設置代理來重新映射 /hudson 目錄時,事情開始出錯了。沒有載入任何 css 或圖像文件。
快速查看 nginx 訪問日誌告訴我,正在向 /hudson 或 /hudson/static 的資源發出大量請求。這些請求未正確轉發(或重寫)到 Tomcat。但是在探勘了幾個小時之後,我不知道如何解決這個簡單的問題。
我正在使用的 nginx 設置看起來像
server { listen 80; server_name build.example.com; location / { proxy_pass http://127.0.0.1:8080/hudson; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
有人可以對此有所了解嗎?設置必須非常簡單,但我似乎無法在網上的任何地方找到解決方案。
更新
我真誠地感謝所有花時間回答這個問題的人。在嘗試了各種解決方案之後,我認為處理這個特定問題的最直接的方法是……
**A)**別管它正如@VonC建議的那樣,讓它留在一個子目錄中。這是直截了當的,我們將確定沒有任何問題。或者…
**B)將應用程序部署到 tomcat webapp 目錄的根目錄如果您想使用 tomcat 安裝託管多個 webapps,這可能不是最好的方法。**但是管理員可能想要設置一個單獨的 tomcat 安裝只是為了執行 Hudson/Jenkins。Tomcat 無法以不同使用者的身份執行不同的託管應用程序,任何為 CI 設置 Hudson/Jenkins 的人都可能希望以特定使用者身份執行它(例如“建構”)。在這種情況下,在 ROOT 中部署最有意義,可以非常簡單地映射到 build.example.com。
這是我的 nginx 配置文件,即使我通過 https(埠 443)訪問 Hudson:
反向代理(Apache 或 Nginx)的技巧是始終保持相同的路徑:
如果要重定向到
a_long_and_complex_address/hudson
,請保留 /hudson 部分:myserver/hudson
。不要嘗試重定向
myserver
到a_long_and_complex_address/hudson
:各種帶有絕對路徑(’/
’)的腳本和圖片會損壞。重定向
myserver/hudson
到a_long_and_complex_address/hudson
.另外,您也可以重定向
myserver/other_services
到a_long_and_complex_address/other_services
;)worker_processes 1; error_log logs/error.log debug; pid logs/nginx.pid; events { worker_connections 250; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 150; #gzip on; port_in_redirect on; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; server { listen 443; server_name (some alias); # default max client body size was 1m! => Error code is 413 # here: max 10Go client_max_body_size 10000m; ssl on; ssl_certificate /home/xxx/.ssl/my.crt; ssl_certificate_key /home/xxx/.ssl/my.key; ssl_session_timeout 5m; #ssl_protocols SSLv2 SSLv3 TLSv1; # NO: SSLv2 prohibited ssl_protocols SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; rewrite ^/hudson$ https://myserver/hudson/ redirect; location /hudson/ { proxy_pass https://complex_address:8xx3/hudson/; } } }