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

Какие файлы следует настроить для чистой конфигурации 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 довольно хороши, и я часто к ним захожу, но исчерпывающий источник того, что я ищу, похоже, не существует (или я не нашел лучших условий поиска, чтобы его найти).

Очевидная ссылка, конечно, будет руководство.

  • Проще говоря: имя / расположение основного файла конфигурации 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>