Назад | Перейти на главную страницу

Упростите файл httpd.conf

Есть предложения, как упростить мой файл 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, отображаемый в файле конфигурации.

http://httpd.apache.org/docs/current/vhosts/details.html

Думаю, у меня получится прикоснуться:

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, это должно работать.