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