簡(jiǎn)介
默認(rèn)情況下,Jenkins 自帶內(nèi)置的 Web 服務(wù)器,監(jiān)聽在 8080 端口上。這對(duì)于運(yùn)行私有 Jenkins 實(shí)例或者只是需要快速啟動(dòng)而不關(guān)心安全性的用戶來說很方便。但是一旦您的主機(jī)上有真實(shí)的生產(chǎn)數(shù)據(jù),使用更安全的 Web 服務(wù)器(如 Nginx)來處理流量是個(gè)不錯(cuò)的主意。
本文將詳細(xì)介紹如何使用 Nginx Web 服務(wù)器作為 Jenkins 實(shí)例的反向代理,為您的站點(diǎn)添加 SSL。本教程假設(shè)您對(duì) Linux 命令、已安裝的 Jenkins 和 Ubuntu 20.04 安裝有一定的了解。
如果您尚未安裝 Jenkins,您可以在本教程中安裝它。
先決條件
本指南假設(shè)您正在使用 Ubuntu 20.04。在開始之前,您應(yīng)該在系統(tǒng)上設(shè)置一個(gè)具有 sudo
權(quán)限的非root用戶帳戶。您可以按照 Ubuntu 20.04 初始服務(wù)器設(shè)置教程來學(xué)習(xí)如何做到這一點(diǎn)。您還需要安裝 Nginx 服務(wù)器并托管您的域。您可以按照《在 Ubuntu 20.04 上安裝 Nginx》教程來學(xué)習(xí)如何做到這一點(diǎn)。
另外,通過 SSL 保護(hù)您的 Jenkins 實(shí)例非常重要。如果它在互聯(lián)網(wǎng)上可見,您可以使用 Let’s Encrypt 來保護(hù)它。您可以按照《如何在 Ubuntu 22.04 上使用 Let’s Encrypt 保護(hù) Nginx》教程來學(xué)習(xí)如何做到這一點(diǎn)。
正如前面所述,本教程假設(shè) Jenkins 已經(jīng)安裝。本教程將向您展示如何安裝 Jenkins(如果需要)。您可能需要切換到 root 用戶來完成該文章。
步驟 1 — 配置 Nginx
近年來,Nginx 憑借其速度和靈活性成為了一個(gè)受歡迎的 Web 服務(wù)器,這使得它成為我們應(yīng)用的理想選擇。
編輯配置
接下來,您需要編輯默認(rèn)的 Nginx 配置文件。以下示例使用 nano
。
sudo nano etc/nginx/sites-enabled/default
以下是最終配置的樣例;下面簡(jiǎn)要解釋了各個(gè)部分。您可以更新或替換現(xiàn)有的配置文件,不過您可能需要先備份一份。
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name jenkins.domain.com;
access_log /var/log/nginx/jenkins.access.log;
location / {
proxy_set_header Host $host;
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_pass http://localhost:8080;
proxy_read_timeout 90;
proxy_redirect http://localhost:8080 https://jenkins.domain.com;
}
...
}
您需要使用您自己的域名更新 server_name
和 proxy_redirect
行。還有一些額外的 Nginx 魔法,告訴請(qǐng)求在 Nginx 上被讀取并在響應(yīng)端被重寫,以確保反向代理正常工作。
保存并關(guān)閉文件。如果您使用的是 nano
,您可以按 Ctrl + X
,然后按 Y
,最后按 Enter
來完成。
第一部分告訴 Nginx 服務(wù)器監(jiān)聽在 80 端口(默認(rèn) HTTP)上的任何請(qǐng)求,并將它們重定向到 HTTPS。
...
server {
listen 80;
return 301 https://$host$request_uri;
}
...
之后,代理開始工作。它基本上接收任何傳入的請(qǐng)求,并將它們代理到綁定/監(jiān)聽在本地網(wǎng)絡(luò)接口的 8080 端口上的 Jenkins 實(shí)例。
...
location / {
proxy_set_header Host $host;
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_pass http://localhost:8080;
proxy_read_timeout 90;
proxy_redirect http://localhost:8080 https://jenkins.domain.com;
}
...
這里有幾個(gè)要點(diǎn)需要指出。如果您沒有一個(gè)解析到您的 Jenkins 服務(wù)器的域名,那么上面的 proxy_redirect
語句在沒有修改的情況下將無法正確運(yùn)行,所以請(qǐng)記住這一點(diǎn)。另外,如果您錯(cuò)誤配置了 proxy_pass
(例如添加了尾隨斜杠),您將在 Jenkins 配置頁面中看到類似以下內(nèi)容的錯(cuò)誤。
!Jenkins error: Reverse proxy set up is broken
因此,如果您看到此錯(cuò)誤,請(qǐng)?jiān)俅螜z查 Nginx 配置中的 proxy_pass
和 proxy_redirect
設(shè)置!
步驟 2 — 配置 Jenkins
為了讓 Jenkins 與 Nginx 協(xié)同工作,我們需要更新 Jenkins 配置,使其僅監(jiān)聽本地地址而不是所有地址(0.0.0.0),以確保流量得到正確處理。這是一個(gè)重要的安全步驟,因?yàn)槿绻?Jenkins 仍然在所有地址上監(jiān)聽,那么它仍然可能通過其原始端口(8080)訪問。我們將修改 /etc/default/jenkins 配置文件以進(jìn)行這些調(diào)整。
sudo nano /etc/default/jenkins
找到 JENKINS\_ARGS
行并將其更新如下:
JENKINS_ARGS="--webroot=/var/cache/jenkins/war --httpListenAddress=127.0.0.1 --httpPort=$HTTP_PORT -ajp13Port=$AJP_PORT"
請(qǐng)注意,–httpListenAddress=127.0.0.1 設(shè)置必須要么添加,要么修改。
然后繼續(xù)重啟 Jenkins 和 Nginx。
sudo service jenkins restart
sudo service nginx restart
現(xiàn)在您應(yīng)該能夠通過 HTTPS 訪問您的域名,并且 Jenkins 站點(diǎn)將被安全地提供。
可選 — 更新 OAuth URL
如果您正在使用 GitHub 或其他 OAuth 插件進(jìn)行身份驗(yàn)證,此時(shí)它可能已經(jīng)失效。例如,當(dāng)嘗試訪問 URL 時(shí),您將收到一個(gè)類似 http://jenkins.domain.com:8080/securityRealm/finishLogin?code=random-string
的“無法打開頁面”的錯(cuò)誤。
為了解決這個(gè)問題,您需要更新 Jenkins 中的一些設(shè)置,包括 OAuth 插件設(shè)置。首先在 Jenkins GUI 中更新 Jenkins URL;它可以在 Jenkins -> 管理 Jenkins -> 配置系統(tǒng) -> Jenkins 位置 菜單中找到。
將 Jenkins URL 更新為使用 HTTPS - https://jenkins.domain.com/
!Jenkins URL
接下來,更新您的 OAuth 設(shè)置與外部提供者。以下示例是針對(duì) GitHub 的。在 GitHub 上,這可以在 設(shè)置 -> 應(yīng)用程序 -> 開發(fā)人員應(yīng)用程序 下找到。
應(yīng)該有一個(gè)條目為 Jenkins。將 主頁 URL 和 授權(quán)回調(diào) URL 更新以反映 HTTPS 設(shè)置。它可能類似于以下內(nèi)容:
!GitHub 上的 Jenkins 設(shè)置;兩個(gè) URL 都使用了 https://文章來源:http://www.zghlxwxcb.cn/news/detail-855310.html
結(jié)論
唯一剩下的事情就是驗(yàn)證一切是否正確工作。如上所述,您現(xiàn)在應(yīng)該能夠通過新配置的 URL - jenkins.domain.com - 使用 HTTP 或 HTTPS 瀏覽。您應(yīng)該被重定向到安全站點(diǎn),并且應(yīng)該看到一些站點(diǎn)信息,包括您新更新的 SSL 設(shè)置。如前所述,如果您沒有通過 DNS 使用主機(jī)名,則您的重定向可能無法按預(yù)期工作。在這種情況下,您需要修改 Nginx 配置文件中的 proxy_pass 部分。文章來源地址http://www.zghlxwxcb.cn/news/detail-855310.html
到了這里,關(guān)于如何配置 Nginx 作為 Jenkins 的反向代理并啟用 SSL 加密的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!