Настройка виртуальных хостов Apache/Nginx

Материал из ARK-HOSTER.RU | Документация хостинга
Версия от 19:51, 14 октября 2025; Admin (обсуждение | вклад) (Новая страница: «= Настройка виртуальных хостов Apache/Nginx = == 1. Подготовка системы == * Войдите в систему под…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Содержание

Настройка виртуальных хостов 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;
   }
   
   # Обработка PHP
   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";
   }
   
   # Скрытие версии Nginx
   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 сертификаты
   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 настройки
   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;
   }
   
   # Обработка PHP
   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;

}

  1. Перенаправление с HTTP на HTTPS

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. Добавьте содержимое:

  1. !/bin/bash

echo "=== Virtual Hosts Monitoring ===" echo "Date: $(date)" echo ""

  1. Проверка Apache

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

  1. Проверка Nginx

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

  1. Проверка PHP-FPM

if systemctl is-active --quiet php8.1-fpm; then

   echo "PHP-FPM is running"

else

   echo "PHP-FPM is not running"

fi

  1. Проверка SSL сертификатов

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 добавьте в конфигурацию:

  1. Кэширование

<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 добавьте в конфигурацию:

  1. Кэширование

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 добавьте в конфигурацию:

  1. Сжатие

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):

Наши специалисты помогут с настройкой виртуальных хостов и оптимизацией производительности ваших сайтов!