Какие файлы я должен настроить для чистой конфигурации 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.

Другие вопросы по тегам