
因此,我在我的 VPS 上運行多個網頁,並利用 Apache 的虛擬主機來確保訪問我網站的任何人都被發送到正確的網站。不幸的是,在設定 Jenkins 實例後我注意到,我可以轉到指向不同虛擬主機上的 VPS 的任何網域,並向它們附加 :8080 以存取 Jenkins 伺服器。我想找到一種方法來防止這種情況,並允許我只能透過 ip:port 存取 Jenkins 伺服器。任何幫助深表感謝!
作為一個附加問題,有什麼方法可以讓我也放棄連接 ip:80 的嘗試嗎?謝謝。
答案1
我可以存取這些網域中的任何一個 [...] 並附加到
:8080
它們以存取 Jenkins 伺服器。我想找到一種方法來防止這種情況發生,並允許我只能通過ip:port
.
正如評論中提到的,第一步是阻止公共存取your_ip:8080
(Jenkins 仍然可以在此連接埠上內部運行)。如何執行此操作可能取決於您的 VPS(儘管您的 iptables 或防火牆介面可能是一個不錯的起點)。
第二步是為連接埠:XX
a設定「預設」Apache虛擬主機反向代理(使用阿帕契模組代理模組)並將代理目標設定為對連接埠 上執行的 Jenkins 的(本機)參考:8080
。這個反向代理將允許存取 Jenkins,即使否則它會被公開阻止。您可能會對以下內容特別感興趣官方 Jenkins wiki 關於在 Apache 背後運行 Jenkins 的說明。
筆記
您希望反向代理成為給定連接埠的「預設」主機的原因是,對於 Apache 和基於名稱的虛擬主機,
:XX
當 IP 為要求。反向代理的連接埠由您的虛擬主機條目定義。但是,如果 Apache 和 Jenkins 在同一台伺服器上運行,則該連接埠不能與 Jenkins 運行的連接埠相同(例如
:8080
)。不要忘記在 Apache 設定中新增正確的
Listen
連接埠指令。:XX
如果您使用連接埠
:443
(SSL),則該連接埠的憑證應包含您的 IP 作為有效名稱。否則您可能會收到證書警告。
需要明確的是,連接埠:XX
只是一個範例/佔位符,表示您選擇的任何連接埠。
ip:80
有什麼方法可以讓我也放棄連線嘗試嗎?
僅Listen
在:80
.但是,這將破壞:80
對您網站的所有正常連接埠 HTTP 訪問(即,如果用戶沒有https://
在瀏覽器中明確鍵入或使用明確https://
連結進行訪問,他們將無法連接)。
作為折衷方案,您可以使用上面相同的技術(在連接埠上使用「預設」主機:80
)將請求重定向(而不是代理)到您的主網站或其他地方(例如https://www.google.com
)。