Я не новичок в Apache, но и не эксперт (во всяком случае). Я запускал несколько версий настроек серверов WAMP и XAMP. Большинство моих конфигураций Apache просты. Обычно я запускаю основной файл конфигурации по умолчанию (httpd.conf
или apache.conf
) и один или два включает (например, с другим портом) и некоторые файлы виртуального хоста для конкретного сайта.
Недавно я настроил сервер для использования HTTPS. Купил сертификат и настроил. Это было не так уж плохо, но заставило меня задуматься. Кажется, что каждая настроенная мной конфигурация Apache немного отличается. Я не применяю лучших практик; просто кусочки и кусочки, созданные из установки по умолчанию, с использованием только тех изменений, которые заставляют мое приложение работать.
Меня это сейчас беспокоит. В настоящее время я запускаю Apache 2.2, и я хотел бы принять для себя соглашение, с которым я мог бы оставаться последовательным, такое, которое я мог бы легко развернуть на большем количестве серверов и быстрее.
Итак, мой вопрос: какие файлы я должен использовать и как они должны взаимодействовать? Например, я думаю, что большинство людей согласны с тем, что загрузка вашей основной конфигурации Apache с настройками - плохая идея. Так следует ли сократить его до минимума и реализовать несколько включений? Как правильно настроить sites-available
каталог (sites-enabled
заполнены символическими ссылками)? Поскольку есть много способов сделать что-то, и поскольку Apache позволяет использовать директивы в нескольких местах с одним и тем же воздействием, я обнаружил, что части и части распределяются по всем этим файлам, в том числе с использованием чего-то вроде mod_rewrite
в .htaccess
файл (который я начинаю верить, это плохая идея, если только вы не находитесь на виртуальном хостинге, где это единственный способ).
Для SSL вы настраиваете default-ssl
файл или project-ssl
. Сколько виртуальных хостов я могу запустить на одном сервере?
Я понимаю, что мой вопрос несколько субъективен. Наверное, нет объективного ответа. Но моя цель - как можно ближе подойти к объективному ответу.
Тогда есть WSGI. Если вы развертываете сайты Django, это еще больше усложняет ситуацию. Должен ли я использовать /home/user/project/project/wsgi.py
или /var/www/project/index.wsgi
? Как эти файлы взаимодействуют с конфигурацией Apache?
Вот список файлов, которые меня беспокоят:
/etc/apache2/apache.conf
/etc/apache2/httpd.conf
/etc/apache2/ports.conf
/etc/apache2/envvars (mostly self explanatory)
/etc/apache2/conf.d/project.conf
/etc/apache2/conf.d/security
/etc/apache2/sites-available/default
/etc/apache2/sites-available/default-ssl
/etc/apache2/sites-available/project
/etc/apache2/sites-available/project-ssl
Почему некоторые установки Apache имеют основную конфигурацию Apache с включенными модулями, а другие - mods-available
и mods-enabled
?
Как я уже сказал выше, похоже, есть много совпадений, поэтому я не удивлен, что это сложная тема для освоения.
В качестве альтернативы, если кто-то знает хороший справочник, который проходит через это, мне было бы интересно его увидеть. У меня есть пара старых книг по Apache, и они просто не разбирают ее. Они предполагают, что вы полный новичок и что вы не используете значение по умолчанию. Документы Apache довольно хороши, и я часто к ним захожу, но исчерпывающий источник того, что я ищу, похоже, не существует (или я не нашел лучших условий поиска, чтобы его найти).
Очевидная ссылка, конечно, будет руководство.
httpd.conf
. -f
переключатель командной строки, если хотите. Файл конфигурации apache анализируется сверху вниз
Вы жестяная банка поместите все директивы, используемые для настройки apache, в этот единственный файл.
Вы может использовать Include
или IncludeOptional
директивы в главном httpd.conf для включения директив из других файлов.
Включенный файл анализируется в том месте, где находится директива Include, и разбирается в порядке сверху вниз. В конце включения apache вернется к основной конфигурации httpd.conf, и следующая директива будет проанализирована.
В случае если Include
Директива содержит подстановочный знак, включенные файлы будут проанализированы в лексикографическом порядке.
Как единый файл конфигурации, так и вложение с использованием включений позволяют достичь одного и того же конечного состояния. Все, что лучше всего подходит для вас.
Сравните единственный файл конфигурации:
#httpd.conf
Directive 1
Directive 2
Directive 3
Directive 4
к основному http.conf
#httpd.conf
Directive 1
Include other.conf
Directive 4
и включенный файл:
#other.conf
Directive 2
Directive 3
Оба результата дают точно такую же конфигурацию, в этом отношении нет «лучшего».
Если вы поддерживаете единственную конфигурацию вручную, то лучше всего подойдет один файл. Вы можете легко прочитать его сверху вниз, и поэтому маловероятно, что вы удивитесь упорядоченности директив, усложняющих вашу жизнь.
Если у вас есть система управления конфигурацией, которая позволяет легко удалять или развертывать файлы целиком, но испытывает трудности с изменением частей файла конфигурации, то используйте Include dir/*.conf
может иметь гораздо больше смысла.
Одиночный файл, явное включение или подстановочный знак включает, в основном это вопрос личных предпочтений и / или наилучшего использования ваших инструментов.
Доступность сайтов с поддержкой сайтов кажется соглашением Debian / Ubuntu.
Последний раздел - это AllowOverride
директива, которая позволяет локально отменять настройки, сделанные в конфигурационном файле (файлах) Apache выше, с помощью .htaccess
файл. Это обеспечивает гибкость, поскольку вам не нужно перезапускать apache, чтобы изменения в конфигурации вступили в силу, но вызовет дополнительные накладные расходы, поскольку для каждого веб-запроса все каталоги между DocumentRoot и запрошенным файлом необходимо будет сканировать на предмет наличия потенциального .htaccess файл.
Мне нравится следующая установка. Это хорошо работает для меня и моей ситуации, а также для большей части работы, которую я проделал. В настоящее время я не использую site-enabled / site-available. Я также не люблю использовать файлы .htaccess, если это возможно. Моя основная цель - сохранить всю конфигурацию сайта как можно ближе к остальной конфигурации этого сайта. Таким образом, если я настрою другой сервер таким же образом, я могу просто вставить файл vhost и все готово.
httpd.conf: я держу его аккуратно, только загружаю модули и включаю.
httpd-ssl.conf: я просто добавляю то, что должно быть там для работы любого ssl.
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:/var/run/ssl_scache(512000)"
SSLSessionCacheTimeout 300
SSLMutex "file:/var/run/ssl_mutex"
httpd-vhosts: я стараюсь сохранить все, что мне нужно для каждого сайта, полностью в тегах VirtualHost.
Listen 443
NameVirtualHost *:443
<VirtualHost *:443>
ServerAdmin christopher.donald.jones@gmail.com
ServerName test.org
SSLEngine on
SSLCertificateFile /etc/ssh/test.org.crt
SSLCertificateKeyFile /etc/ssh/test.key
SSLCertificateChainFile /etc/ssh/test.crt
ErrorLog "/var/log/test.org-error_log
ProxyPreserveHost on
ProxyPass / http://127.0.0.1:2368/ retry=0
</VirtualHost>
<VirtualHost *:443>
ServerAdmin christopher.donald.jones@gmail.com
DocumentRoot /usr/local/www/tinyrss/data
ServerName test2.domaintest.org
SSLEngine on
SSLCertificateFile /etc/ssh/test2.crt
SSLCertificateKeyFile /etc/ssh/test2.key
ErrorLog "/var/log/test2.domaintest.org-error_log"
</VirtualHost>