最近我安裝了 Jenkins 服務器,想把它隱藏在 Nginx 代理后面。我的 Nginx 代理作業正常,我閱讀以限制 Jenkins,127.0.0.1:8080因此,我編輯了組態檔/etc/default/jenkins并放入以下代碼行:
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=8080 --httpListenAddress=127.0.0.1"
重新啟動詹金斯后,我仍然可以在埠上訪問詹金斯8080
環境:
Ubuntu 20.04
開放JDK 11
詹金斯 2.332.1
網路統計輸出:
sudo netstat -plnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 2313/java
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 970/nginx: master p
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 708/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 946/sshd: /usr/sbin
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 757/cupsd
tcp6 0 0 :::80 :::* LISTEN 970/nginx: master p
tcp6 0 0 :::22 :::* LISTEN 946/sshd: /usr/sbin
tcp6 0 0 ::1:631 :::* LISTEN 757/cupsd
PS 我在 EC2/Amazom linux 2 上試過,同樣的問題
uj5u.com熱心網友回復:
從您表示正在運行的 Jenkins 版本 2.332.1 開始,Jenkins 從使用經典 SysV 初始化腳本作為服務運行切換到與支持它的 Linux 發行版上的 systemd 完全集成,其中包括 Ubuntu 20.04。我沒有看到任何跡象表明 Jenkins 的 systemd 單元檔案曾經決議過/etc/default/jenkins,這意味著這些設定僅由 SysV 初始化腳本決議,這可以解釋為什么您的配置在那里沒有效果。
如您所見,設定環境變數/lib/systemd/system/jenkins.service確實有效,但您的直覺是絕對正確的,直接編輯由打包系統管理的單元檔案不是最佳實踐。與 Linux 中的大多數東西一樣,該/etc目錄是管理員放置組態檔的地方,/lib并且/usr/lib是為包管理器保留的,所以幸運的是 systemd 也不例外,并為此類更改提供了一種機制。
Systemd 具有“插入”目錄的概念,您可以在其中放置具有部分 systemd 單元配置的“.conf”檔案,其指令將覆寫主單元檔案中的指令。從systemd.unit 手冊頁:
與單元檔案一起,可能存在
foo.service“插入”目錄。foo.service.d/此目錄中所有后綴為“.conf”的檔案將按字母數字順序合并,并在主單元檔案本身決議后進行決議。這對于更改或添加單元的配置設定很有用,而無需修改單元檔案。每個插入檔案必須包含適當的節標題。
以下是我在 Ubuntu 20.04 上設定 Jenkins 2.332.1 的方法,使用 systemd 插件覆寫將偵聽器系結到 127.0.0.1:
驗證 Jenkins 是否正在運行并監聽所有地址/介面:
$ sudo ss -tlnp | grep 8080
LISTEN 0 50 *:8080 *:* users:(("java",pid=2688,fd=116))
為 Jenkins 創建一個 systemd 插入目錄:
$ sudo mkdir /etc/systemd/system/jenkins.service.d
使用您喜歡的編輯器創建覆寫檔案。只要它有.conf擴展名,你就可以隨意命名它。就個人而言,我更喜歡描述性的東西并以數字開頭,以便我可以控制檔案決議的字典順序,如果我最終得到多個覆寫檔案。鑒于此,我創建了一個/etc/systemd/system/jenkins.service.d/50-listen-address-override.conf包含以下內容的檔案:
[Service]
Environment="JENKINS_LISTEN_ADDRESS=127.0.0.1"
現在,我們所要做的就是告訴 systemd 我們做了一些更改,希望它重新決議:
$ sudo systemctl daemon-reload
我們可以重啟 Jenkins 給它新的配置:
$ sudo systemctl restart jenkins
如果我們驗證我們的作業,我們現在可以看到 Jenkins 只系結到 127.0.0.1:
$ sudo ss -tlnp | grep 8080
LISTEN 0 50 [::ffff:127.0.0.1]:8080 *:* users:(("java",pid=31636,fd=116))
值得一提的是,您也可以使用命令systemctl edit jenkins創建覆寫,systemd 會自動為您創建插入目錄和覆寫檔案,并將您放入默認編輯器以撰寫檔案內容,但它不會給您為覆寫檔案選擇您自己的名稱的自由,取而代之的是通用名稱override.conf.
uj5u.com熱心網友回復:
雖然在 AWS 環境中限制埠 8080 并沒有什么壞處,但確實沒有理由擔心它。您需要為您的服務器設定一個安全組,以便阻止除埠 22 (ssh)、埠 80 (http) 和埠 443 (https) 之外的所有內容。您可以通過 AWS 控制臺執行此操作。
為此,請轉到 AWS 控制臺并選擇 EC2,然后選擇您的實體。頁面中間是“安全”選項卡。從那里您可以創建一個安全組來確定您允許進出的流量。
通過這種方式,任何人都無法連接到您不允許進入的任何埠。您當前沒有使用 https,它看起來像這樣,因此您可能希望在準備好之前省略埠 443。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/446833.html
標籤:詹金斯 nginx-反向代理
上一篇:/etc/default/jenkins中的Jenkins更改不起作用
下一篇:SSRF服務器請求偽造
