nginx jenkins 502



Jenkins:如何配置Jenkins背後的Nginx反向代理,用於連接JNLP從服務器 (1)

JNLP端口似乎使用二進制協議,而不是基於文本的HTTP協議,所以不幸的是它不能像正常的Jenkins頁面那樣通過NGINX進行反向代理。

相反,你應該:

  1. 配置全局安全性>選中“啟用安全性”並設置固定的“JNLP從屬代理的TCP端口”。 這將導致所有Jenkins頁面發出指定此端口的額外HTTP標頭:X-Hudson-CLI-Port,X-Jenkins-CLI-Port,X-Jenkins-CLI2-Port。

  2. 允許固定TCP JNLP端口通過任何防火牆,以便CLI客戶端和JNLP代理可以直接到達後端的Jenkins服務器。

  3. 將系統屬性hudson.TcpSlaveAgentListener.hostName設置為您的後端Jenkins服務器的主機名或IP地址。 這將導致所有的頁面發出一個額外的HTTP頭(X-Jenkins-CLI-Host)包含這個指定的主機名。 這告訴CLI客戶端在哪裡連接,但據說不是JNLP代理。

  4. 對於jenkins.mydomain.com/computer/中使用啟動方法“通過Java Web Start啟動從屬代理”的節點列表中的每個構建從屬機器,單擊計算機,單擊配置,單擊高級...按鈕在Launch方法下的右側,並且適當地設置“隧道連接通過”字段。 閱讀問號幫助。 您可能只需要“HOST:”語法,其中HOST是您的後端Jenkins服務器的主機名或IP地址。

免責聲明:我還沒有測試過第4步,但在下面的第一個鏈接中提到。

參考文獻:

我試圖建立一個Jenkins master和一個Jenkins從節點,Jenkins Master在另一個帶SSL終止服務器的Nginx反向代理之後。 nginx配置如下:

upstream jenkins {
  server <server ip>:8080 fail_timeout=0;
}

server {
  listen 443 ssl;
  server_name jenkins.mydomain.com;
  ssl_certificate /etc/nginx/certs/mydomain.crt;
  ssl_certificate_key /etc/nginx/certs/mydomain.key;

  location / {
    proxy_set_header        Host $host:$server_port;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_redirect          http:// https://;
    proxy_pass              http://jenkins;
  }
}

server {
  listen 80;
  server_name jenkins.mydomain.com;
  return 301 https://$server_name$request_uri;
}

Jenkins主Global Security配置中的JNLP代理程序的TCP端口設置為50000。 端口50000被設置為可以從主機上的任何地方訪問。

JNLP從站通過以下命令啟動:

java -jar slave.jar -jnlpUrl https://jenkins.mydomain.com/computer/slave-1/slave-agent.jnlp -secret <secret>

JNLP從站無法連接到主站上配置的JNLP端口:

INFO: Connecting to jenkins.mydomain.com:50000 (retrying:4)
java.net.ConnectException: Connection timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at java.net.Socket.connect(Socket.java:538)
        at hudson.remoting.Engine.connect(Engine.java:400)
        at hudson.remoting.Engine.run(Engine.java:298)

JNLP從機連接到Jenkins主機需要什麼配置?