🪶 Apache HTTP Server
Конфигурация: виртуальные хосты, модули, .htaccess, mod_rewrite, прокси и HTTPS.
Шпаргалки · Администрирование · #apache #httpd #webserver
Команды
sudo apachectl configtest # проверка
sudo systemctl reload|restart apache2 # Debian, Ubuntu (httpd на RHEL)
sudo a2ensite site; sudo a2dissite site # включить / выключить сайт
sudo a2enmod rewrite proxy ssl headers # модули
sudo a2enconf name
tail -f /var/log/apache2/error.log
Файлы: /etc/apache2/apache2.conf, sites-available/, mods-enabled/; RHEL: /etc/httpd/conf/httpd.conf, conf.d/.
Виртуальный хост
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example
<Directory /var/www/example>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example_error.log
CustomLog ${APACHE_LOG_DIR}/example_access.log combined
</VirtualHost>
HTTPS
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLProtocol -all +TLSv1.2 +TLSv1.3
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
Сертификат: sudo certbot --apache -d example.com.
.htaccess
Включается AllowOverride All. Лежит в каталоге сайта.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# SPA / фронт-контроллер
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
ErrorDocument 404 /404.html
Header set X-Content-Type-Options "nosniff"
AuthType Basic
AuthName "Закрыто"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Пароль: htpasswd -c /etc/apache2/.htpasswd anna.
Реверс-прокси
ProxyPreserveHost On
ProxyPass /api http://127.0.0.1:3000/
ProxyPassReverse /api http://127.0.0.1:3000/
Нужны proxy, proxy_http (для WebSocket proxy_wstunnel).
PHP
libapache2-mod-php (prefork) или php-fpm через proxy_fcgi (быстрее, рекомендуется с MPM event).
MPM (модели обработки)
| MPM | Особенность |
|---|---|
prefork |
процесс на запрос, для устаревших модулей |
worker |
потоки в процессах |
event |
потоки и асинхронная работа с keep-alive (современный выбор) |
Контроль доступа
Require ip 10.0.0.0/8, Require all denied, Require user anna, <FilesMatch "\.env$">Require all denied</FilesMatch>.
Apache или Nginx
Apache: гибкие модули, .htaccess без перезапуска. Nginx: легче при большом числе соединений, часто стоит перед Apache как прокси.