Nginx

通過 nginx 代理將 hudson 映射到子域

  • September 1, 2011

我現在正在嘗試將 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

不要嘗試重定向myservera_long_and_complex_address/hudson:各種帶有絕對路徑(’ /’)的腳本和圖片會損壞。

重定向myserver/hudsona_long_and_complex_address/hudson.

另外,您也可以重定向myserver/other_servicesa_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! =&gt; 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/;
       }
   }
}

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