Настройка виртуальных хостов Apache/Nginx — различия между версиями
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) |
||
Строка 6: | Строка 6: | ||
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль. | * Убедитесь, что у вас есть доступ к серверу через SSH или консоль. | ||
− | == 2. Настройка виртуальных хостов Apache | + | == 2. Настройка виртуальных хостов Apache == |
=== Создание структуры директорий === | === Создание структуры директорий === | ||
1. Создайте директории для сайтов: | 1. Создайте директории для сайтов: | ||
− | < | + | <pre>sudo mkdir -p /var/www/example.com/public_html</pre> |
− | < | + | <pre>sudo mkdir -p /var/www/example.com/logs</pre> |
− | < | + | <pre>sudo mkdir -p /var/www/test.com/public_html</pre> |
− | < | + | <pre>sudo mkdir -p /var/www/test.com/logs</pre> |
2. Установите права доступа: | 2. Установите права доступа: | ||
− | < | + | <pre>sudo chown -R www-data:www-data /var/www/</pre> |
− | < | + | <pre>sudo chmod -R 755 /var/www/</pre> |
=== Создание виртуального хоста === | === Создание виртуального хоста === | ||
1. Создайте файл конфигурации: | 1. Создайте файл конфигурации: | ||
− | < | + | <pre>sudo nano /etc/apache2/sites-available/example.com.conf</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre><VirtualHost *:80> |
ServerName example.com | ServerName example.com | ||
ServerAlias www.example.com | ServerAlias www.example.com | ||
Строка 43: | Строка 43: | ||
ServerTokens Prod | ServerTokens Prod | ||
ServerSignature Off | ServerSignature Off | ||
− | </VirtualHost></ | + | </VirtualHost></pre> |
=== Создание SSL виртуального хоста === | === Создание SSL виртуального хоста === | ||
1. Создайте SSL конфигурацию: | 1. Создайте SSL конфигурацию: | ||
− | < | + | <pre>sudo nano /etc/apache2/sites-available/example.com-ssl.conf</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre><VirtualHost *:443> |
ServerName example.com | ServerName example.com | ||
ServerAlias www.example.com | ServerAlias www.example.com | ||
Строка 74: | Строка 74: | ||
Header always set X-Frame-Options DENY | Header always set X-Frame-Options DENY | ||
Header always set X-Content-Type-Options nosniff | Header always set X-Content-Type-Options nosniff | ||
− | </VirtualHost></ | + | </VirtualHost></pre> |
=== Активация виртуальных хостов === | === Активация виртуальных хостов === | ||
1. Включите виртуальный хост: | 1. Включите виртуальный хост: | ||
− | < | + | <pre>sudo a2ensite example.com.conf</pre> |
2. Включите SSL модуль: | 2. Включите SSL модуль: | ||
− | < | + | <pre>sudo a2enmod ssl</pre> |
3. Включите модуль headers: | 3. Включите модуль headers: | ||
− | < | + | <pre>sudo a2enmod headers</pre> |
4. Перезапустите Apache: | 4. Перезапустите Apache: | ||
− | < | + | <pre>sudo systemctl restart apache2</pre> |
− | == 3. Настройка виртуальных хостов Nginx | + | == 3. Настройка виртуальных хостов Nginx == |
=== Создание структуры директорий === | === Создание структуры директорий === | ||
1. Создайте директории для сайтов: | 1. Создайте директории для сайтов: | ||
− | < | + | <pre>sudo mkdir -p /var/www/example.com/html</pre> |
− | < | + | <pre>sudo mkdir -p /var/www/example.com/logs</pre> |
− | < | + | <pre>sudo mkdir -p /var/www/test.com/html</pre> |
− | < | + | <pre>sudo mkdir -p /var/www/test.com/logs</pre> |
2. Установите права доступа: | 2. Установите права доступа: | ||
− | < | + | <pre>sudo chown -R www-data:www-data /var/www/</pre> |
− | < | + | <pre>sudo chmod -R 755 /var/www/</pre> |
=== Создание виртуального хоста === | === Создание виртуального хоста === | ||
1. Создайте файл конфигурации: | 1. Создайте файл конфигурации: | ||
− | < | + | <pre>sudo nano /etc/nginx/sites-available/example.com</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>server {</pre> |
− | < | + | <pre>listen 80;</pre> |
− | < | + | <pre>server_name example.com www.example.com;</pre> |
− | < | + | <pre>root /var/www/example.com/html;</pre> |
− | < | + | <pre>index index.html index.php;</pre> |
− | < | + | <pre>access_log /var/www/example.com/logs/access.log;</pre> |
− | < | + | <pre>error_log /var/www/example.com/logs/error.log;</pre> |
− | < | + | <pre>location / {</pre> |
− | < | + | <pre>try_files $uri $uri/ =404;</pre> |
− | < | + | <pre>}</pre> |
− | < | + | <pre>location ~ \.php$ {</pre> |
− | < | + | <pre>include snippets/fastcgi-php.conf;</pre> |
− | < | + | <pre>fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;</pre> |
− | < | + | <pre>fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;</pre> |
− | < | + | <pre>include fastcgi_params;</pre> |
− | < | + | <pre>}</pre> |
− | < | + | <pre>location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {</pre> |
− | < | + | <pre>expires 1y;</pre> |
− | < | + | <pre>add_header Cache-Control "public, immutable";</pre> |
− | < | + | <pre>}</pre> |
− | < | + | <pre>server_tokens off;</pre> |
− | < | + | <pre>add_header X-Frame-Options "SAMEORIGIN" always;</pre> |
− | < | + | <pre>add_header X-XSS-Protection "1; mode=block" always;</pre> |
− | < | + | <pre>add_header X-Content-Type-Options "nosniff" always;</pre> |
− | < | + | <pre>}</pre> |
=== Создание SSL виртуального хоста === | === Создание SSL виртуального хоста === | ||
1. Создайте SSL конфигурацию: | 1. Создайте SSL конфигурацию: | ||
− | < | + | <pre>sudo nano /etc/nginx/sites-available/example.com-ssl</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>server {</pre> |
− | < | + | <pre>listen 443 ssl http2;</pre> |
− | < | + | <pre>server_name example.com www.example.com;</pre> |
− | < | + | <pre>root /var/www/example.com/html;</pre> |
− | < | + | <pre>index index.html index.php;</pre> |
− | < | + | <pre>ssl_certificate /etc/ssl/certs/example.com.crt;</pre> |
− | < | + | <pre>ssl_certificate_key /etc/ssl/private/example.com.key;</pre> |
− | < | + | <pre>ssl_trusted_certificate /etc/ssl/certs/example.com.chain.crt;</pre> |
− | < | + | <pre>ssl_protocols TLSv1.2 TLSv1.3;</pre> |
− | < | + | <pre>ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;</pre> |
− | < | + | <pre>ssl_prefer_server_ciphers off;</pre> |
− | < | + | <pre>ssl_session_cache shared:SSL:10m;</pre> |
− | < | + | <pre>ssl_session_timeout 10m;</pre> |
− | < | + | <pre>ssl_stapling on;</pre> |
− | < | + | <pre>ssl_stapling_verify on;</pre> |
− | < | + | <pre>access_log /var/www/example.com/logs/ssl_access.log;</pre> |
− | < | + | <pre>error_log /var/www/example.com/logs/ssl_error.log;</pre> |
− | < | + | <pre>location / {</pre> |
− | < | + | <pre>try_files $uri $uri/ =404;</pre> |
− | < | + | <pre>}</pre> |
− | < | + | <pre>location ~ \.php$ {</pre> |
− | < | + | <pre>include snippets/fastcgi-php.conf;</pre> |
− | < | + | <pre>fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;</pre> |
− | < | + | <pre>fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;</pre> |
− | < | + | <pre>include fastcgi_params;</pre> |
− | < | + | <pre>}</pre> |
− | < | + | <pre>location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {</pre> |
− | < | + | <pre>expires 1y;</pre> |
− | < | + | <pre>add_header Cache-Control "public, immutable";</pre> |
− | < | + | <pre>}</pre> |
− | < | + | <pre>add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;</pre> |
− | < | + | <pre>add_header X-Frame-Options "SAMEORIGIN" always;</pre> |
− | < | + | <pre>add_header X-XSS-Protection "1; mode=block" always;</pre> |
− | < | + | <pre>add_header X-Content-Type-Options "nosniff" always;</pre> |
− | < | + | <pre>}</pre> |
− | < | + | <pre>server {</pre> |
− | < | + | <pre>listen 80;</pre> |
− | < | + | <pre>server_name example.com www.example.com;</pre> |
− | < | + | <pre>return 301 https://$server_name$request_uri;</pre> |
− | < | + | <pre>}</pre> |
=== Активация виртуальных хостов === | === Активация виртуальных хостов === | ||
1. Создайте символическую ссылку: | 1. Создайте символическую ссылку: | ||
− | < | + | <pre>sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/</pre> |
2. Проверьте конфигурацию: | 2. Проверьте конфигурацию: | ||
− | < | + | <pre>sudo nginx -t</pre> |
3. Перезапустите Nginx: | 3. Перезапустите Nginx: | ||
− | < | + | <pre>sudo systemctl restart nginx</pre> |
− | == 4. Настройка PHP-FPM | + | == 4. Настройка PHP-FPM == |
=== Установка PHP-FPM === | === Установка PHP-FPM === | ||
1. Установите PHP-FPM: | 1. Установите PHP-FPM: | ||
− | < | + | <pre>sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip</pre> |
2. Запустите PHP-FPM: | 2. Запустите PHP-FPM: | ||
− | < | + | <pre>sudo systemctl start php8.1-fpm</pre> |
− | < | + | <pre>sudo systemctl enable php8.1-fpm</pre> |
=== Настройка пулов PHP-FPM === | === Настройка пулов PHP-FPM === | ||
1. Создайте пул для сайта: | 1. Создайте пул для сайта: | ||
− | < | + | <pre>sudo nano /etc/php/8.1/fpm/pool.d/example.com.conf</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>[example.com]</pre> |
− | < | + | <pre>user = www-data</pre> |
− | < | + | <pre>group = www-data</pre> |
− | < | + | <pre>listen = /var/run/php/php8.1-fpm-example.com.sock</pre> |
− | < | + | <pre>listen.owner = www-data</pre> |
− | < | + | <pre>listen.group = www-data</pre> |
− | < | + | <pre>listen.mode = 0660</pre> |
− | < | + | <pre>pm = dynamic</pre> |
− | < | + | <pre>pm.max_children = 10</pre> |
− | < | + | <pre>pm.start_servers = 2</pre> |
− | < | + | <pre>pm.min_spare_servers = 1</pre> |
− | < | + | <pre>pm.max_spare_servers = 3</pre> |
− | < | + | <pre>pm.max_requests = 1000</pre> |
3. Перезапустите PHP-FPM: | 3. Перезапустите PHP-FPM: | ||
− | < | + | <pre>sudo systemctl restart php8.1-fpm</pre> |
− | == 5. Настройка SSL сертификатов | + | == 5. Настройка SSL сертификатов == |
=== Генерация самоподписанного сертификата === | === Генерация самоподписанного сертификата === | ||
1. Создайте приватный ключ: | 1. Создайте приватный ключ: | ||
− | < | + | <pre>sudo openssl genrsa -out /etc/ssl/private/example.com.key 2048</pre> |
2. Создайте запрос на сертификат: | 2. Создайте запрос на сертификат: | ||
− | < | + | <pre>sudo openssl req -new -key /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.csr</pre> |
3. Создайте самоподписанный сертификат: | 3. Создайте самоподписанный сертификат: | ||
− | < | + | <pre>sudo openssl x509 -req -days 365 -in /etc/ssl/certs/example.com.csr -signkey /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.crt</pre> |
=== Использование Let's Encrypt === | === Использование Let's Encrypt === | ||
1. Установите Certbot: | 1. Установите Certbot: | ||
− | < | + | <pre>sudo apt install certbot python3-certbot-apache python3-certbot-nginx</pre> |
2. Получите сертификат для Apache: | 2. Получите сертификат для Apache: | ||
− | < | + | <pre>sudo certbot --apache -d example.com -d www.example.com</pre> |
3. Получите сертификат для Nginx: | 3. Получите сертификат для Nginx: | ||
− | < | + | <pre>sudo certbot --nginx -d example.com -d www.example.com</pre> |
− | == 6. Настройка файрвола | + | == 6. Настройка файрвола == |
=== Настройка UFW === | === Настройка UFW === | ||
1. Разрешите HTTP и HTTPS трафик: | 1. Разрешите HTTP и HTTPS трафик: | ||
− | < | + | <pre>sudo ufw allow 'Apache Full'</pre> |
− | < | + | <pre>sudo ufw allow 'Nginx Full'</pre> |
2. Проверьте статус: | 2. Проверьте статус: | ||
− | < | + | <pre>sudo ufw status</pre> |
=== Настройка iptables === | === Настройка iptables === | ||
1. Разрешите HTTP и HTTPS порты: | 1. Разрешите HTTP и HTTPS порты: | ||
− | < | + | <pre>sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT</pre> |
− | < | + | <pre>sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT</pre> |
2. Сохраните правила: | 2. Сохраните правила: | ||
− | < | + | <pre>sudo iptables-save > /etc/iptables/rules.v4</pre> |
− | == 7. Управление виртуальными хостами | + | == 7. Управление виртуальными хостами == |
=== Управление Apache === | === Управление Apache === | ||
1. '''Включение сайта''': | 1. '''Включение сайта''': | ||
− | < | + | <pre>sudo a2ensite example.com.conf</pre> |
2. '''Отключение сайта''': | 2. '''Отключение сайта''': | ||
− | < | + | <pre>sudo a2dissite example.com.conf</pre> |
3. '''Перезапуск Apache''': | 3. '''Перезапуск Apache''': | ||
− | < | + | <pre>sudo systemctl restart apache2</pre> |
4. '''Проверка конфигурации''': | 4. '''Проверка конфигурации''': | ||
− | < | + | <pre>sudo apache2ctl configtest</pre> |
=== Управление Nginx === | === Управление Nginx === | ||
1. '''Включение сайта''': | 1. '''Включение сайта''': | ||
− | < | + | <pre>sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/</pre> |
2. '''Отключение сайта''': | 2. '''Отключение сайта''': | ||
− | < | + | <pre>sudo rm /etc/nginx/sites-enabled/example.com</pre> |
3. '''Перезапуск Nginx''': | 3. '''Перезапуск Nginx''': | ||
− | < | + | <pre>sudo systemctl restart nginx</pre> |
4. '''Проверка конфигурации''': | 4. '''Проверка конфигурации''': | ||
− | < | + | <pre>sudo nginx -t</pre> |
− | == 8. Мониторинг виртуальных хостов | + | == 8. Мониторинг виртуальных хостов == |
=== Просмотр логов === | === Просмотр логов === | ||
1. Просмотрите логи Apache: | 1. Просмотрите логи Apache: | ||
− | < | + | <pre>sudo tail -f /var/log/apache2/error.log</pre> |
− | < | + | <pre>sudo tail -f /var/www/example.com/logs/access.log</pre> |
2. Просмотрите логи Nginx: | 2. Просмотрите логи Nginx: | ||
− | < | + | <pre>sudo tail -f /var/log/nginx/error.log</pre> |
− | < | + | <pre>sudo tail -f /var/www/example.com/logs/access.log</pre> |
3. Просмотрите логи PHP-FPM: | 3. Просмотрите логи PHP-FPM: | ||
− | < | + | <pre>sudo tail -f /var/log/php8.1-fpm.log</pre> |
=== Создание скрипта мониторинга === | === Создание скрипта мониторинга === | ||
1. Создайте скрипт мониторинга: | 1. Создайте скрипт мониторинга: | ||
− | < | + | <pre>sudo nano /usr/local/bin/vhost-monitor.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>echo "=== Virtual Hosts Monitoring ==="</pre> |
− | < | + | <pre>echo "Date: $(date)"</pre> |
− | < | + | <pre>echo ""</pre> |
− | < | + | <pre>if systemctl is-active --quiet apache2; then</pre> |
− | < | + | <pre>echo "Apache is running"</pre> |
− | < | + | <pre>echo "Apache sites:"</pre> |
− | < | + | <pre>sudo apache2ctl -S | grep "namevhost"</pre> |
− | < | + | <pre>else</pre> |
− | < | + | <pre>echo "Apache is not running"</pre> |
− | < | + | <pre>fi</pre> |
− | < | + | <pre>if systemctl is-active --quiet nginx; then</pre> |
− | < | + | <pre>echo "Nginx is running"</pre> |
− | < | + | <pre>echo "Nginx sites:"</pre> |
− | < | + | <pre>sudo nginx -T | grep "server_name"</pre> |
− | < | + | <pre>else</pre> |
− | < | + | <pre>echo "Nginx is not running"</pre> |
− | < | + | <pre>fi</pre> |
− | < | + | <pre>if systemctl is-active --quiet php8.1-fpm; then</pre> |
− | < | + | <pre>echo "PHP-FPM is running"</pre> |
− | < | + | <pre>else</pre> |
− | < | + | <pre>echo "PHP-FPM is not running"</pre> |
− | < | + | <pre>fi</pre> |
− | < | + | <pre>echo "SSL Certificates:"</pre> |
− | < | + | <pre>for cert in /etc/ssl/certs/*.crt; do</pre> |
− | < | + | <pre>if [ -f "$cert" ]; then</pre> |
− | < | + | <pre>echo "$(basename $cert): $(openssl x509 -enddate -noout -in $cert | cut -d= -f2)"</pre> |
− | < | + | <pre>fi</pre> |
− | < | + | <pre>done</pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/vhost-monitor.sh</pre> |
− | == 9. Устранение неполадок | + | == 9. Устранение неполадок == |
=== Частые проблемы === | === Частые проблемы === | ||
1. '''Сайт не загружается''': | 1. '''Сайт не загружается''': | ||
− | * Проверьте конфигурацию: < | + | * Проверьте конфигурацию: <pre>sudo apache2ctl configtest</pre> или <pre>sudo nginx -t</pre> |
− | * Проверьте права доступа: < | + | * Проверьте права доступа: <pre>ls -la /var/www/</pre> |
− | * Проверьте файрвол: < | + | * Проверьте файрвол: <pre>sudo ufw status</pre> |
2. '''SSL не работает''': | 2. '''SSL не работает''': | ||
− | * Проверьте сертификаты: < | + | * Проверьте сертификаты: <pre>openssl x509 -in /path/to/cert.crt -text -noout</pre> |
* Проверьте конфигурацию SSL | * Проверьте конфигурацию SSL | ||
− | * Проверьте порты: < | + | * Проверьте порты: <pre>sudo netstat -tlnp | grep :443</pre> |
3. '''PHP не работает''': | 3. '''PHP не работает''': | ||
− | * Проверьте PHP-FPM: < | + | * Проверьте PHP-FPM: <pre>sudo systemctl status php8.1-fpm</pre> |
* Проверьте конфигурацию PHP | * Проверьте конфигурацию PHP | ||
* Проверьте права доступа к файлам | * Проверьте права доступа к файлам | ||
Строка 377: | Строка 377: | ||
1. Проверьте статус служб: | 1. Проверьте статус служб: | ||
− | < | + | <pre>sudo systemctl status apache2</pre> |
− | < | + | <pre>sudo systemctl status nginx</pre> |
− | < | + | <pre>sudo systemctl status php8.1-fpm</pre> |
2. Проверьте конфигурацию: | 2. Проверьте конфигурацию: | ||
− | < | + | <pre>sudo apache2ctl configtest</pre> |
− | < | + | <pre>sudo nginx -t</pre> |
3. Проверьте подключения: | 3. Проверьте подключения: | ||
− | < | + | <pre>sudo netstat -tlnp | grep -E ':(80|443)'</pre> |
4. Проверьте права доступа: | 4. Проверьте права доступа: | ||
− | < | + | <pre>ls -la /var/www/</pre> |
− | < | + | <pre>ls -la /etc/apache2/sites-enabled/</pre> |
− | < | + | <pre>ls -la /etc/nginx/sites-enabled/</pre> |
− | == 10. Дополнительные настройки | + | == 10. Дополнительные настройки == |
=== Настройка кэширования === | === Настройка кэширования === | ||
1. Для Apache добавьте в конфигурацию: | 1. Для Apache добавьте в конфигурацию: | ||
− | < | + | <pre>\# Кэширование |
<IfModule mod_expires.c> | <IfModule mod_expires.c> | ||
ExpiresActive On | ExpiresActive On | ||
Строка 408: | Строка 408: | ||
ExpiresByType image/gif "access plus 1 month" | ExpiresByType image/gif "access plus 1 month" | ||
ExpiresByType image/ico "access plus 1 month" | ExpiresByType image/ico "access plus 1 month" | ||
− | </IfModule></ | + | </IfModule></pre> |
2. Для Nginx добавьте в конфигурацию: | 2. Для Nginx добавьте в конфигурацию: | ||
− | < | + | <pre>location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {</pre> |
− | < | + | <pre>expires 1y;</pre> |
− | < | + | <pre>add_header Cache-Control "public, immutable";</pre> |
− | < | + | <pre>}</pre> |
=== Настройка сжатия === | === Настройка сжатия === | ||
1. Для Apache включите модуль сжатия: | 1. Для Apache включите модуль сжатия: | ||
− | < | + | <pre>sudo a2enmod deflate</pre> |
2. Добавьте в конфигурацию: | 2. Добавьте в конфигурацию: | ||
− | < | + | <pre><IfModule mod_deflate.c> |
AddOutputFilterByType DEFLATE text/plain | AddOutputFilterByType DEFLATE text/plain | ||
AddOutputFilterByType DEFLATE text/html | AddOutputFilterByType DEFLATE text/html | ||
Строка 432: | Строка 432: | ||
AddOutputFilterByType DEFLATE application/javascript | AddOutputFilterByType DEFLATE application/javascript | ||
AddOutputFilterByType DEFLATE application/x-javascript | AddOutputFilterByType DEFLATE application/x-javascript | ||
− | </IfModule></ | + | </IfModule></pre> |
3. Для Nginx добавьте в конфигурацию: | 3. Для Nginx добавьте в конфигурацию: | ||
− | < | + | <pre>gzip on;</pre> |
− | < | + | <pre>gzip_vary on;</pre> |
− | < | + | <pre>gzip_min_length 1024;</pre> |
− | < | + | <pre>gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;</pre> |
== Заключение == | == Заключение == |
Текущая версия на 10:36, 15 октября 2025
Содержание
- 1 Настройка виртуальных хостов Apache/Nginx
- 1.1 1. Подготовка системы
- 1.2 2. Настройка виртуальных хостов Apache
- 1.3 3. Настройка виртуальных хостов Nginx
- 1.4 4. Настройка PHP-FPM
- 1.5 5. Настройка SSL сертификатов
- 1.6 6. Настройка файрвола
- 1.7 7. Управление виртуальными хостами
- 1.8 8. Мониторинг виртуальных хостов
- 1.9 9. Устранение неполадок
- 1.10 10. Дополнительные настройки
- 1.11 Заключение
Настройка виртуальных хостов Apache/Nginx
1. Подготовка системы
- Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
- Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
2. Настройка виртуальных хостов Apache
Создание структуры директорий
1. Создайте директории для сайтов:
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/example.com/logs
sudo mkdir -p /var/www/test.com/public_html
sudo mkdir -p /var/www/test.com/logs
2. Установите права доступа:
sudo chown -R www-data:www-data /var/www/
sudo chmod -R 755 /var/www/
Создание виртуального хоста
1. Создайте файл конфигурации:
sudo nano /etc/apache2/sites-available/example.com.conf
2. Добавьте содержимое:
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com/public_html <Directory /var/www/example.com/public_html> AllowOverride All Require all granted Options Indexes FollowSymLinks </Directory> ErrorLog /var/www/example.com/logs/error.log CustomLog /var/www/example.com/logs/access.log combined # Настройки безопасности ServerTokens Prod ServerSignature Off </VirtualHost>
Создание SSL виртуального хоста
1. Создайте SSL конфигурацию:
sudo nano /etc/apache2/sites-available/example.com-ssl.conf
2. Добавьте содержимое:
<VirtualHost *:443> ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com/public_html SSLEngine on SSLCertificateFile /etc/ssl/certs/example.com.crt SSLCertificateKeyFile /etc/ssl/private/example.com.key SSLCertificateChainFile /etc/ssl/certs/example.com.chain.crt <Directory /var/www/example.com/public_html> AllowOverride All Require all granted Options Indexes FollowSymLinks </Directory> ErrorLog /var/www/example.com/logs/ssl_error.log CustomLog /var/www/example.com/logs/ssl_access.log combined # Настройки безопасности Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff </VirtualHost>
Активация виртуальных хостов
1. Включите виртуальный хост:
sudo a2ensite example.com.conf
2. Включите SSL модуль:
sudo a2enmod ssl
3. Включите модуль headers:
sudo a2enmod headers
4. Перезапустите Apache:
sudo systemctl restart apache2
3. Настройка виртуальных хостов Nginx
Создание структуры директорий
1. Создайте директории для сайтов:
sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/example.com/logs
sudo mkdir -p /var/www/test.com/html
sudo mkdir -p /var/www/test.com/logs
2. Установите права доступа:
sudo chown -R www-data:www-data /var/www/
sudo chmod -R 755 /var/www/
Создание виртуального хоста
1. Создайте файл конфигурации:
sudo nano /etc/nginx/sites-available/example.com
2. Добавьте содержимое:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.php;
access_log /var/www/example.com/logs/access.log;
error_log /var/www/example.com/logs/error.log;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
server_tokens off;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
}
Создание SSL виртуального хоста
1. Создайте SSL конфигурацию:
sudo nano /etc/nginx/sites-available/example.com-ssl
2. Добавьте содержимое:
server {
listen 443 ssl http2;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.php;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
ssl_trusted_certificate /etc/ssl/certs/example.com.chain.crt;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_stapling on;
ssl_stapling_verify on;
access_log /var/www/example.com/logs/ssl_access.log;
error_log /var/www/example.com/logs/ssl_error.log;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
}
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
Активация виртуальных хостов
1. Создайте символическую ссылку:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
2. Проверьте конфигурацию:
sudo nginx -t
3. Перезапустите Nginx:
sudo systemctl restart nginx
4. Настройка PHP-FPM
Установка PHP-FPM
1. Установите PHP-FPM:
sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
2. Запустите PHP-FPM:
sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm
Настройка пулов PHP-FPM
1. Создайте пул для сайта:
sudo nano /etc/php/8.1/fpm/pool.d/example.com.conf
2. Добавьте содержимое:
[example.com]
user = www-data
group = www-data
listen = /var/run/php/php8.1-fpm-example.com.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 1000
3. Перезапустите PHP-FPM:
sudo systemctl restart php8.1-fpm
5. Настройка SSL сертификатов
Генерация самоподписанного сертификата
1. Создайте приватный ключ:
sudo openssl genrsa -out /etc/ssl/private/example.com.key 2048
2. Создайте запрос на сертификат:
sudo openssl req -new -key /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.csr
3. Создайте самоподписанный сертификат:
sudo openssl x509 -req -days 365 -in /etc/ssl/certs/example.com.csr -signkey /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.crt
Использование Let's Encrypt
1. Установите Certbot:
sudo apt install certbot python3-certbot-apache python3-certbot-nginx
2. Получите сертификат для Apache:
sudo certbot --apache -d example.com -d www.example.com
3. Получите сертификат для Nginx:
sudo certbot --nginx -d example.com -d www.example.com
6. Настройка файрвола
Настройка UFW
1. Разрешите HTTP и HTTPS трафик:
sudo ufw allow 'Apache Full'
sudo ufw allow 'Nginx Full'
2. Проверьте статус:
sudo ufw status
Настройка iptables
1. Разрешите HTTP и HTTPS порты:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
2. Сохраните правила:
sudo iptables-save > /etc/iptables/rules.v4
7. Управление виртуальными хостами
Управление Apache
1. Включение сайта:
sudo a2ensite example.com.conf
2. Отключение сайта:
sudo a2dissite example.com.conf
3. Перезапуск Apache:
sudo systemctl restart apache2
4. Проверка конфигурации:
sudo apache2ctl configtest
Управление Nginx
1. Включение сайта:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
2. Отключение сайта:
sudo rm /etc/nginx/sites-enabled/example.com
3. Перезапуск Nginx:
sudo systemctl restart nginx
4. Проверка конфигурации:
sudo nginx -t
8. Мониторинг виртуальных хостов
Просмотр логов
1. Просмотрите логи Apache:
sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/www/example.com/logs/access.log
2. Просмотрите логи Nginx:
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/www/example.com/logs/access.log
3. Просмотрите логи PHP-FPM:
sudo tail -f /var/log/php8.1-fpm.log
Создание скрипта мониторинга
1. Создайте скрипт мониторинга:
sudo nano /usr/local/bin/vhost-monitor.sh
2. Добавьте содержимое:
echo "=== Virtual Hosts Monitoring ==="
echo "Date: $(date)"
echo ""
if systemctl is-active --quiet apache2; then
echo "Apache is running"
echo "Apache sites:"
sudo apache2ctl -S | grep "namevhost"
else
echo "Apache is not running"
fi
if systemctl is-active --quiet nginx; then
echo "Nginx is running"
echo "Nginx sites:"
sudo nginx -T | grep "server_name"
else
echo "Nginx is not running"
fi
if systemctl is-active --quiet php8.1-fpm; then
echo "PHP-FPM is running"
else
echo "PHP-FPM is not running"
fi
echo "SSL Certificates:"
for cert in /etc/ssl/certs/*.crt; do
if [ -f "$cert" ]; then
echo "$(basename $cert): $(openssl x509 -enddate -noout -in $cert | cut -d= -f2)"
fi
done
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/vhost-monitor.sh
9. Устранение неполадок
Частые проблемы
1. Сайт не загружается:
- Проверьте конфигурацию:
sudo apache2ctl configtest
илиsudo nginx -t
- Проверьте права доступа:
ls -la /var/www/
- Проверьте файрвол:
sudo ufw status
2. SSL не работает:
- Проверьте сертификаты:
openssl x509 -in /path/to/cert.crt -text -noout
- Проверьте конфигурацию SSL
- Проверьте порты:
sudo netstat -tlnp | grep :443
3. PHP не работает:
- Проверьте PHP-FPM:
sudo systemctl status php8.1-fpm
- Проверьте конфигурацию PHP
- Проверьте права доступа к файлам
Диагностика
1. Проверьте статус служб:
sudo systemctl status apache2
sudo systemctl status nginx
sudo systemctl status php8.1-fpm
2. Проверьте конфигурацию:
sudo apache2ctl configtest
sudo nginx -t
3. Проверьте подключения:
sudo netstat -tlnp | grep -E ':(80|443)'
4. Проверьте права доступа:
ls -la /var/www/
ls -la /etc/apache2/sites-enabled/
ls -la /etc/nginx/sites-enabled/
10. Дополнительные настройки
Настройка кэширования
1. Для Apache добавьте в конфигурацию:
\# Кэширование <IfModule mod_expires.c> ExpiresActive On ExpiresByType text/css "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/gif "access plus 1 month" ExpiresByType image/ico "access plus 1 month" </IfModule>
2. Для Nginx добавьте в конфигурацию:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
Настройка сжатия
1. Для Apache включите модуль сжатия:
sudo a2enmod deflate
2. Добавьте в конфигурацию:
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript </IfModule>
3. Для Nginx добавьте в конфигурацию:
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
Заключение
Виртуальные хосты Apache и Nginx успешно настроены! Теперь вы можете размещать множественные сайты на одном сервере.
Для размещения ваших сайтов на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для высоконагруженных сайтов
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних проектов
Наши специалисты помогут с настройкой виртуальных хостов и оптимизацией производительности ваших сайтов!