Какие файлы я должен настроить для чистой конфигурации Apache
Я не новичок в 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 довольно хороши, и я часто к ним обращаюсь, но полного источника того, что я ищу, похоже, не существует (или я не нашел лучших поисковых терминов, чтобы найти его).
2 ответа
Мне нравится следующая настройка. Это хорошо работает для меня и моей ситуации и для большей части работы, которую я сделал. В настоящее время я не использую сайт включен / сайт доступен. Я также не люблю использовать файлы.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>
Очевидной ссылкой, конечно, будет руководство.
- Проще говоря: имя / расположение основного файла конфигурации apache - это опция времени компиляции, обычно это файл с именем
httpd.conf
, - Имя / расположение этого расположения по умолчанию для файла конфигурации может быть переопределено
-f
переключатель командной строки, если вы этого хотите. - Файл конфигурации содержит 1 директиву на строку.
Файл конфигурации 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.