昨天,我在 VPS 上首次使用 docker 并安装了 Redmine。设置完成后,我决定通过子域而不是端口访问它。
在我的 Apache 主机设置中,我使用 ProxyPass 来实现这一点,并且它可以正常工作:
ProxyPass / http://127.0.0.1:22679/
ProxyPassReverse / http://127.0.0.1:22679/
这是我的虚拟主机配置:
<VirtualHost *:443>
ProxyPass / http://127.0.0.1:22679/
ProxyPassReverse / http://127.0.0.1:22679/
ServerName redmine.example.com
</VirtualHost>
这可以通过 https 实现 (https://redmine.example.org),但我有点担心安全性和 ProxyPass 的正确使用。我会通过 iptables 阻止端口,这样它就无法从外部访问,只能从我的本地主机访问。
所以我想问的是:这完全没问题还是我做错了?另外,我从 localhost 获取https://
域http://
流量对我来说似乎有点“奇怪”。我在互联网上搜索了如何使 docker 应用程序可通过子域访问,但我唯一找到的就是这个解决方案ProxyPass
。
答案1
对在本地端口上运行的应用程序执行 ProxyPass 是一种非常常见的方法。您的配置包括那里所需的一切,并且完全没问题。
由于一次只能有一个进程绑定到端口 443 (HTTPS),因此有使用 Apache 之类的 Web 服务器作为反向代理。
至于安全性,如果您不能直接将应用程序配置为仅在本地主机上监听,那么最佳做法是将 iptables 配置为仅允许从本地主机到该端口的连接。
使用纯 http 进行反向代理 (Apache) 和后端 (Redmine) 之间的通信在这里没有问题,因为它们之间的通信永远不会离开主机。这样,您还可以在一个地方 (Apache) 配置 TLS 证书,而不必担心您的应用程序本身是否在安全配置中支持 TLS。
对于安全的 Apache TLS 配置,您可以使用例如https://mozilla.github.io/server-side-tls/ssl-config-generator/。