Есть предложения, как упростить мой файл 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, а включить ssl для 443?
Вы можете использовать include, если вас беспокоит возможность редактирования - просто переместите повторяющуюся часть в отдельный файл, например 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, отображаемый в файле конфигурации.
Думаю, у меня получится прикоснуться:
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>
Признаюсь, я не знаю, можно ли полностью опустить директиву VirtualHost для *: 80, но, судя по документации Apache, это должно работать.