所以,我在我的VPS上运行多个网页,并利用Apache的虚拟主机确保前往我网站的任何人都被发送到正确的网站。不幸的是,我在设置Jenkins实例后注意到的一点是,我可以去任何指向我的VPS的域中的任何域,并在不同的vhosts上添加:8080到他们去Jenkins服务器。我想找到一种方法来防止这种情况,并允许我只通过ip:port访问Jenkins服务器。任何帮助深表感谢!
作为一个额外的问题,有没有什么方法可以放弃连接到ip:80的尝试?谢谢。
所以,我在我的VPS上运行多个网页,并利用Apache的虚拟主机确保前往我网站的任何人都被发送到正确的网站。不幸的是,我在设置Jenkins实例后注意到的一点是,我可以去任何指向我的VPS的域中的任何域,并在不同的vhosts上添加:8080到他们去Jenkins服务器。我想找到一种方法来防止这种情况,并允许我只通过ip:port访问Jenkins服务器。任何帮助深表感谢!
作为一个额外的问题,有没有什么方法可以放弃连接到ip:80的尝试?谢谢。
Answers:
我可以去任何这些域[...]并附
:8080
加到他们去Jenkins服务器。我想找到一种方法来防止这种情况,并允许我只通过访问Jenkins服务器ip:port
。
正如评论中所提到的,第一步是阻止公共访问your_ip:8080
(Jenkins仍然可以在此端口上运行)。你如何做到这一点可能取决于你的VPS(虽然你的iptables或防火墙接口可能是一个很好的起点)。
第二步是使端口的“默认”Apache虚拟主机:XX
成为反向代理(使用Apache mod_proxy模块),并将代理目标设置为对端口上运行的Jenkins的(本地)引用:8080
。这个反向代理是允许访问Jenkins的,即使它会被公开阻止。你可能会对关于在Apache背后运行Jenkins的官方Jenkins wiki笔记特别感兴趣。
笔记
您希望反向代理成为给定端口的“默认”主机的原因是,对于Apache和基于名称的虚拟主机,:XX
当IP为IP时,将返回此“默认”主机(通常是第一个带端口的虚拟主机)请求。
反向代理的端口由虚拟主机条目定义。但是,如果Apache和Jenkins在同一台服务器上运行,则此端口不能与Jenkins运行的端口相同(例如:8080
)。
不要忘记在Apache配置中添加适当Listen
的port指令:XX
。
如果使用端口:443
(SSL),则该端口的证书应包含您的IP作为有效名称。否则您可能会收到证书警告。
需要说明的是,port :XX
只是一个示例/占位符,表示您选择的任何端口。
有什么方法可以放弃尝试连接
ip:80
吗?
只Listen
在除了以外的端口上安装Apache :80
。但是,这将破坏:80
对您站点的所有正常端口HTTP访问(即,如果用户未明确键入https://
其浏览器或使用显式https://
链接访问,则它们将无法连接)。
作为折衷方案,您可以使用上述相同的技术(在端口上使用“默认”主机:80
)将请求重定向(而非代理)到您的主站点或其他地方(例如https://www.google.com
)。
https://jenkin.example.com
获取反向代理https://example.com:8080
并在其前面放置某种auth,或者只允许特定的IP在Apache中访问它。