关于如何简化我的 httpd.conf 文件有什么建议吗?我删除了除相关部分之外的所有内容:
Listen <ip-addr-1>:80
Listen <ip-addr-1>:443
<VirtualHost <ip-addr-1>:80>
ServerName myservername.com
<Proxy balancer://mycluster>
BalancerMember http://172.22.22.20
BalancerMember http://172.22.22.21
</Proxy>
ProxyPass /app1 balancer://mycluster/app1
ProxyPassReverse /app1 balancer://mycluster/app1
</VirtualHost>
# Repeat for 443
<VirtualHost <ip-addr-1>:443>
ServerName myservername.com
SSLEngine On
SSLCertificateFile conf/ssl/mycert.crt
SSLCertificateKeyFile conf/ssl/mycert.key
SSLCACertificateFile conf/ssl/intermediate.crt
<Proxy balancer://mycluster>
BalancerMember http://172.22.22.20
BalancerMember http://172.22.22.21
</Proxy>
ProxyPass /app1 balancer://mycluster/app1
ProxyPassReverse /app1 balancer://mycluster/app1
</VirtualHost>
有没有办法不重复端口 80 和 443 的所有内容,而是为 443 启用 ssl?
答案1
如果您担心可编辑性,则可以使用包含 - 只需将重复的部分移动到单独的文件,balancer.cfg
然后Include balancer.cfg
。
如果您的目标是拥有一个虚拟主机定义,我认为在这种情况下这是不可能的。如果您有多个使用 HTTP 的端口,您可以直接使用VirtualHost 10.1.2.3:*
,它会匹配每个端口,或者使用类似等的列表VirtualHost 10.1.2.3:80 10.1.2.3:81
。但在这种情况下,我没有看到使用相同定义同时提供 HTTP 和 HTTPS 的方法 - 似乎只有一个可以匹配,因此匹配的那个应该包含完整的配置。
Apache 仅根据 IP 地址(或通配符)和端口号选择最佳匹配。如果有多个相同的最佳匹配,则将选择配置文件中出现的第一个 VirtualHost。
答案2
我认为我可以做得更好:
Listen 80
Listen 443
ServerName myservername.com
ProxyPass /app1 balancer://mycluster/app1
ProxyPassReverse /app1 balancer://mycluster/app1
SSLCertificateFile conf/ssl/mycert.crt
SSLCertificateKeyFile conf/ssl/mycert.key
SSLCACertificateFile conf/ssl/intermediate.crt
<Proxy balancer://mycluster>
BalancerMember http://172.22.22.20
BalancerMember http://172.22.22.21
</Proxy>
<VirtualHost *:80>
</VirtualHost>
# Repeat for 443
<VirtualHost *:443>
SSLEngine On
</VirtualHost>
我承认我不知道 *:80 的 VirtualHost 指令是否可以完全省略,但基于 Apache 文档,这应该可以工作。