我需要为多个服务器设置Apache代理,为一个服务器设置一个代理。 我可以用两种方法做到这一点:
设置一个虚拟主机和多个代理。 每台服务器都作为虚拟主机的子目录:aaa.bbb.ccc / test1和aaa.bbb.ccc / test2
<VirtualHost *:443> ServerName aaa.bbb.ccc RewriteEngine on RewriteRule ^/test1$ /test1/ [R] RewriteRule ^/test1(.*) http://localhost:8080$1 [P] RewriteRule ^/test2$ /test2/ [R] RewriteRule ^/test2(.*) http://localhost:8081$1 [P] <Location "/test1"> ... </Location> <Location "/test2"> ... </Location> .... </VirtualHost>
设置N个虚拟主机和N个代理服务于N个服务器。 每台服务器将由一台虚拟主机提供服务。
NameVirtualHost *:443 <VirtualHost *.443> ServerName aaa.bbb.ccc RewriteEngine on RewriteRule ^(.*) http://localhost:8080$1 [P] <Location "/"> ... </Location> </VirtualHost> <VirtualHost *.443> ServerName ddd.bbb.ccc RewriteEngine on RewriteRule ^(.*) http://localhost:8081$1 [P] <Location "/"> ... </Location> </VirtualHost>
两者都有效。 但是我不知道哪一个更好。 有人可以比较两种方法的优缺点吗?
通常这两种方式都没有错。 但是两者之间真正的巨大差异将是证书pipe理。 选项1只需要1个SSL证书。 选项2取决于你正在做的主机名称。 如果唯一发生变化的是子域,则可以使用通配符证书,否则每个虚拟主机都需要一个证书。 两者都可能变得昂贵。
一般来说,这两种select之间最大的真正的驱动力是“商业”型决策。 在内部服务器之间进行更清晰的分离。
实际上如何将内部服务器暴露在外,并不是最有效的方法。 从技术上讲,这是工作,但你可以进入很多问题。 页面上的链接可能会导致错误。 在外部网站上,您实际上会暴露内部链接,并使网站破裂。 图像和Javascript也不能正常工作或做一些时髦的东西。 你应该真的使用代理和ReverseProxy
ProxyRequests off ProxyPass /test1/ http://127.0.0.1:8080/ ProxyPass /test2/ http://127.0.0.1:8081/ ProxyHTMLURLMap http://127.0.0.1:8080 /app1 ProxyHTMLURLMap http://127.0.0.1:8081 /app2 <Location /test1/> ProxyPassReverse / ProxyHTMLEnable On ProxyHTMLURLMap / /test1/ </Location> <Location /test2/> ProxyPassReverse / ProxyHTMLEnable On ProxyHTMLURLMap / /test2/ </Location>