Настройка виртуальных хостов Apache/Nginx — различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск
(Новая страница: «= Настройка виртуальных хостов Apache/Nginx = == 1. Подготовка системы == * Войдите в систему под…»)
 
Строка 11: Строка 11:
  
 
1. Создайте директории для сайтов:
 
1. Создайте директории для сайтов:
<code>
+
<code>sudo mkdir -p /var/www/example.com/public_html</code>
sudo mkdir -p /var/www/example.com/public_html
+
<code>sudo mkdir -p /var/www/example.com/logs</code>
sudo mkdir -p /var/www/example.com/logs
+
<code>sudo mkdir -p /var/www/test.com/public_html</code>
sudo mkdir -p /var/www/test.com/public_html
+
<code>sudo mkdir -p /var/www/test.com/logs</code>
sudo mkdir -p /var/www/test.com/logs
 
</code>
 
  
 
2. Установите права доступа:
 
2. Установите права доступа:
<code>
+
<code>sudo chown -R www-data:www-data /var/www/</code>
sudo chown -R www-data:www-data /var/www/
+
<code>sudo chmod -R 755 /var/www/</code>
sudo chmod -R 755 /var/www/
 
</code>
 
  
 
=== Создание виртуального хоста ===
 
=== Создание виртуального хоста ===
  
 
1. Создайте файл конфигурации:
 
1. Создайте файл конфигурации:
<code>
+
<code>sudo nano /etc/apache2/sites-available/example.com.conf</code>
sudo nano /etc/apache2/sites-available/example.com.conf
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<code><VirtualHost *:80>
<VirtualHost *:80>
 
 
     ServerName example.com
 
     ServerName example.com
 
     ServerAlias www.example.com
 
     ServerAlias www.example.com
Строка 50: Строка 43:
 
     ServerTokens Prod
 
     ServerTokens Prod
 
     ServerSignature Off
 
     ServerSignature Off
</VirtualHost>
+
</VirtualHost></code>
</code>
 
  
 
=== Создание SSL виртуального хоста ===
 
=== Создание SSL виртуального хоста ===
  
 
1. Создайте SSL конфигурацию:
 
1. Создайте SSL конфигурацию:
<code>
+
<code>sudo nano /etc/apache2/sites-available/example.com-ssl.conf</code>
sudo nano /etc/apache2/sites-available/example.com-ssl.conf
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<code><VirtualHost *:443>
<VirtualHost *:443>
 
 
     ServerName example.com
 
     ServerName example.com
 
     ServerAlias www.example.com
 
     ServerAlias www.example.com
Строка 85: Строка 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></code>
</code>
 
  
 
=== Активация виртуальных хостов ===
 
=== Активация виртуальных хостов ===
  
 
1. Включите виртуальный хост:
 
1. Включите виртуальный хост:
<code>
+
<code>sudo a2ensite example.com.conf</code>
sudo a2ensite example.com.conf
 
</code>
 
  
 
2. Включите SSL модуль:
 
2. Включите SSL модуль:
<code>
+
<code>sudo a2enmod ssl</code>
sudo a2enmod ssl
 
</code>
 
  
 
3. Включите модуль headers:
 
3. Включите модуль headers:
<code>
+
<code>sudo a2enmod headers</code>
sudo a2enmod headers
 
</code>
 
  
 
4. Перезапустите Apache:
 
4. Перезапустите Apache:
<code>
+
<code>sudo systemctl restart apache2</code>
sudo systemctl restart apache2
 
</code>
 
  
 
== 3. Настройка виртуальных хостов Nginx ===
 
== 3. Настройка виртуальных хостов Nginx ===
Строка 115: Строка 95:
  
 
1. Создайте директории для сайтов:
 
1. Создайте директории для сайтов:
<code>
+
<code>sudo mkdir -p /var/www/example.com/html</code>
sudo mkdir -p /var/www/example.com/html
+
<code>sudo mkdir -p /var/www/example.com/logs</code>
sudo mkdir -p /var/www/example.com/logs
+
<code>sudo mkdir -p /var/www/test.com/html</code>
sudo mkdir -p /var/www/test.com/html
+
<code>sudo mkdir -p /var/www/test.com/logs</code>
sudo mkdir -p /var/www/test.com/logs
 
</code>
 
  
 
2. Установите права доступа:
 
2. Установите права доступа:
<code>
+
<code>sudo chown -R www-data:www-data /var/www/</code>
sudo chown -R www-data:www-data /var/www/
+
<code>sudo chmod -R 755 /var/www/</code>
sudo chmod -R 755 /var/www/
 
</code>
 
  
 
=== Создание виртуального хоста ===
 
=== Создание виртуального хоста ===
  
 
1. Создайте файл конфигурации:
 
1. Создайте файл конфигурации:
<code>
+
<code>sudo nano /etc/nginx/sites-available/example.com</code>
sudo nano /etc/nginx/sites-available/example.com
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<code>server {</code>
server {
+
<code>listen 80;</code>
    listen 80;
+
<code>server_name example.com www.example.com;</code>
    server_name example.com www.example.com;
+
<code>root /var/www/example.com/html;</code>
    root /var/www/example.com/html;
+
<code>index index.html index.php;</code>
    index index.html index.php;
+
<code>access_log /var/www/example.com/logs/access.log;</code>
   
+
<code>error_log /var/www/example.com/logs/error.log;</code>
    # Логирование
+
<code>location / {</code>
    access_log /var/www/example.com/logs/access.log;
+
<code>try_files $uri $uri/ =404;</code>
    error_log /var/www/example.com/logs/error.log;
+
<code>}</code>
   
+
<code>location ~ \.php$ {</code>
    # Основная конфигурация
+
<code>include snippets/fastcgi-php.conf;</code>
    location / {
+
<code>fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;</code>
        try_files $uri $uri/ =404;
+
<code>fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;</code>
    }
+
<code>include fastcgi_params;</code>
   
+
<code>}</code>
    # Обработка PHP
+
<code>location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {</code>
    location ~ \.php$ {
+
<code>expires 1y;</code>
        include snippets/fastcgi-php.conf;
+
<code>add_header Cache-Control "public, immutable";</code>
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
+
<code>}</code>
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+
<code>server_tokens off;</code>
        include fastcgi_params;
+
<code>add_header X-Frame-Options "SAMEORIGIN" always;</code>
    }
+
<code>add_header X-XSS-Protection "1; mode=block" always;</code>
   
+
<code>add_header X-Content-Type-Options "nosniff" always;</code>
    # Статические файлы
+
<code>}</code>
    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;
 
}
 
</code>
 
  
 
=== Создание SSL виртуального хоста ===
 
=== Создание SSL виртуального хоста ===
  
 
1. Создайте SSL конфигурацию:
 
1. Создайте SSL конфигурацию:
<code>
+
<code>sudo nano /etc/nginx/sites-available/example.com-ssl</code>
sudo nano /etc/nginx/sites-available/example.com-ssl
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<code>server {</code>
server {
+
<code>listen 443 ssl http2;</code>
    listen 443 ssl http2;
+
<code>server_name example.com www.example.com;</code>
    server_name example.com www.example.com;
+
<code>root /var/www/example.com/html;</code>
    root /var/www/example.com/html;
+
<code>index index.html index.php;</code>
    index index.html index.php;
+
<code>ssl_certificate /etc/ssl/certs/example.com.crt;</code>
   
+
<code>ssl_certificate_key /etc/ssl/private/example.com.key;</code>
    # SSL сертификаты
+
<code>ssl_trusted_certificate /etc/ssl/certs/example.com.chain.crt;</code>
    ssl_certificate /etc/ssl/certs/example.com.crt;
+
<code>ssl_protocols TLSv1.2 TLSv1.3;</code>
    ssl_certificate_key /etc/ssl/private/example.com.key;
+
<code>ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;</code>
    ssl_trusted_certificate /etc/ssl/certs/example.com.chain.crt;
+
<code>ssl_prefer_server_ciphers off;</code>
   
+
<code>ssl_session_cache shared:SSL:10m;</code>
    # SSL настройки
+
<code>ssl_session_timeout 10m;</code>
    ssl_protocols TLSv1.2 TLSv1.3;
+
<code>ssl_stapling on;</code>
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
+
<code>ssl_stapling_verify on;</code>
    ssl_prefer_server_ciphers off;
+
<code>access_log /var/www/example.com/logs/ssl_access.log;</code>
    ssl_session_cache shared:SSL:10m;
+
<code>error_log /var/www/example.com/logs/ssl_error.log;</code>
    ssl_session_timeout 10m;
+
<code>location / {</code>
    ssl_stapling on;
+
<code>try_files $uri $uri/ =404;</code>
    ssl_stapling_verify on;
+
<code>}</code>
   
+
<code>location ~ \.php$ {</code>
    # Логирование
+
<code>include snippets/fastcgi-php.conf;</code>
    access_log /var/www/example.com/logs/ssl_access.log;
+
<code>fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;</code>
    error_log /var/www/example.com/logs/ssl_error.log;
+
<code>fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;</code>
   
+
<code>include fastcgi_params;</code>
    # Основная конфигурация
+
<code>}</code>
    location / {
+
<code>location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {</code>
        try_files $uri $uri/ =404;
+
<code>expires 1y;</code>
    }
+
<code>add_header Cache-Control "public, immutable";</code>
   
+
<code>}</code>
    # Обработка PHP
+
<code>add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;</code>
    location ~ \.php$ {
+
<code>add_header X-Frame-Options "SAMEORIGIN" always;</code>
        include snippets/fastcgi-php.conf;
+
<code>add_header X-XSS-Protection "1; mode=block" always;</code>
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
+
<code>add_header X-Content-Type-Options "nosniff" always;</code>
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+
<code>}</code>
        include fastcgi_params;
+
<code>server {</code>
    }
+
<code>listen 80;</code>
   
+
<code>server_name example.com www.example.com;</code>
    # Статические файлы
+
<code>return 301 https://$server_name$request_uri;</code>
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
+
<code>}</code>
        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;
 
}
 
 
 
# Перенаправление с HTTP на HTTPS
 
server {
 
    listen 80;
 
    server_name example.com www.example.com;
 
    return 301 https://$server_name$request_uri;
 
}
 
</code>
 
  
 
=== Активация виртуальных хостов ===
 
=== Активация виртуальных хостов ===
  
 
1. Создайте символическую ссылку:
 
1. Создайте символическую ссылку:
<code>
+
<code>sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/</code>
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
 
</code>
 
  
 
2. Проверьте конфигурацию:
 
2. Проверьте конфигурацию:
<code>
+
<code>sudo nginx -t</code>
sudo nginx -t
 
</code>
 
  
 
3. Перезапустите Nginx:
 
3. Перезапустите Nginx:
<code>
+
<code>sudo systemctl restart nginx</code>
sudo systemctl restart nginx
 
</code>
 
  
 
== 4. Настройка PHP-FPM ===
 
== 4. Настройка PHP-FPM ===
Строка 265: Строка 199:
  
 
1. Установите PHP-FPM:
 
1. Установите PHP-FPM:
<code>
+
<code>sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip</code>
sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
 
</code>
 
  
 
2. Запустите PHP-FPM:
 
2. Запустите PHP-FPM:
<code>
+
<code>sudo systemctl start php8.1-fpm</code>
sudo systemctl start php8.1-fpm
+
<code>sudo systemctl enable php8.1-fpm</code>
sudo systemctl enable php8.1-fpm
 
</code>
 
  
 
=== Настройка пулов PHP-FPM ===
 
=== Настройка пулов PHP-FPM ===
  
 
1. Создайте пул для сайта:
 
1. Создайте пул для сайта:
<code>
+
<code>sudo nano /etc/php/8.1/fpm/pool.d/example.com.conf</code>
sudo nano /etc/php/8.1/fpm/pool.d/example.com.conf
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<code>[example.com]</code>
[example.com]
+
<code>user = www-data</code>
user = www-data
+
<code>group = www-data</code>
group = www-data
+
<code>listen = /var/run/php/php8.1-fpm-example.com.sock</code>
listen = /var/run/php/php8.1-fpm-example.com.sock
+
<code>listen.owner = www-data</code>
listen.owner = www-data
+
<code>listen.group = www-data</code>
listen.group = www-data
+
<code>listen.mode = 0660</code>
listen.mode = 0660
+
<code>pm = dynamic</code>
pm = dynamic
+
<code>pm.max_children = 10</code>
pm.max_children = 10
+
<code>pm.start_servers = 2</code>
pm.start_servers = 2
+
<code>pm.min_spare_servers = 1</code>
pm.min_spare_servers = 1
+
<code>pm.max_spare_servers = 3</code>
pm.max_spare_servers = 3
+
<code>pm.max_requests = 1000</code>
pm.max_requests = 1000
 
</code>
 
  
 
3. Перезапустите PHP-FPM:
 
3. Перезапустите PHP-FPM:
<code>
+
<code>sudo systemctl restart php8.1-fpm</code>
sudo systemctl restart php8.1-fpm
 
</code>
 
  
 
== 5. Настройка SSL сертификатов ===
 
== 5. Настройка SSL сертификатов ===
Строка 309: Строка 233:
  
 
1. Создайте приватный ключ:
 
1. Создайте приватный ключ:
<code>
+
<code>sudo openssl genrsa -out /etc/ssl/private/example.com.key 2048</code>
sudo openssl genrsa -out /etc/ssl/private/example.com.key 2048
 
</code>
 
  
 
2. Создайте запрос на сертификат:
 
2. Создайте запрос на сертификат:
<code>
+
<code>sudo openssl req -new -key /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.csr</code>
sudo openssl req -new -key /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.csr
 
</code>
 
  
 
3. Создайте самоподписанный сертификат:
 
3. Создайте самоподписанный сертификат:
<code>
+
<code>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</code>
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
 
</code>
 
  
 
=== Использование Let's Encrypt ===
 
=== Использование Let's Encrypt ===
  
 
1. Установите Certbot:
 
1. Установите Certbot:
<code>
+
<code>sudo apt install certbot python3-certbot-apache python3-certbot-nginx</code>
sudo apt install certbot python3-certbot-apache python3-certbot-nginx
 
</code>
 
  
 
2. Получите сертификат для Apache:
 
2. Получите сертификат для Apache:
<code>
+
<code>sudo certbot --apache -d example.com -d www.example.com</code>
sudo certbot --apache -d example.com -d www.example.com
 
</code>
 
  
 
3. Получите сертификат для Nginx:
 
3. Получите сертификат для Nginx:
<code>
+
<code>sudo certbot --nginx -d example.com -d www.example.com</code>
sudo certbot --nginx -d example.com -d www.example.com
 
</code>
 
  
 
== 6. Настройка файрвола ===
 
== 6. Настройка файрвола ===
Строка 345: Строка 257:
  
 
1. Разрешите HTTP и HTTPS трафик:
 
1. Разрешите HTTP и HTTPS трафик:
<code>
+
<code>sudo ufw allow 'Apache Full'</code>
sudo ufw allow 'Apache Full'
+
<code>sudo ufw allow 'Nginx Full'</code>
sudo ufw allow 'Nginx Full'
 
</code>
 
  
 
2. Проверьте статус:
 
2. Проверьте статус:
<code>
+
<code>sudo ufw status</code>
sudo ufw status
 
</code>
 
  
 
=== Настройка iptables ===
 
=== Настройка iptables ===
  
 
1. Разрешите HTTP и HTTPS порты:
 
1. Разрешите HTTP и HTTPS порты:
<code>
+
<code>sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT</code>
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
+
<code>sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT</code>
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
 
</code>
 
  
 
2. Сохраните правила:
 
2. Сохраните правила:
<code>
+
<code>sudo iptables-save > /etc/iptables/rules.v4</code>
sudo iptables-save > /etc/iptables/rules.v4
 
</code>
 
  
 
== 7. Управление виртуальными хостами ===
 
== 7. Управление виртуальными хостами ===
Строка 373: Строка 277:
  
 
1. '''Включение сайта''':
 
1. '''Включение сайта''':
<code>
+
<code>sudo a2ensite example.com.conf</code>
sudo a2ensite example.com.conf
 
</code>
 
  
 
2. '''Отключение сайта''':
 
2. '''Отключение сайта''':
<code>
+
<code>sudo a2dissite example.com.conf</code>
sudo a2dissite example.com.conf
 
</code>
 
  
 
3. '''Перезапуск Apache''':
 
3. '''Перезапуск Apache''':
<code>
+
<code>sudo systemctl restart apache2</code>
sudo systemctl restart apache2
 
</code>
 
  
 
4. '''Проверка конфигурации''':
 
4. '''Проверка конфигурации''':
<code>
+
<code>sudo apache2ctl configtest</code>
sudo apache2ctl configtest
 
</code>
 
  
 
=== Управление Nginx ===
 
=== Управление Nginx ===
  
 
1. '''Включение сайта''':
 
1. '''Включение сайта''':
<code>
+
<code>sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/</code>
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
 
</code>
 
  
 
2. '''Отключение сайта''':
 
2. '''Отключение сайта''':
<code>
+
<code>sudo rm /etc/nginx/sites-enabled/example.com</code>
sudo rm /etc/nginx/sites-enabled/example.com
 
</code>
 
  
 
3. '''Перезапуск Nginx''':
 
3. '''Перезапуск Nginx''':
<code>
+
<code>sudo systemctl restart nginx</code>
sudo systemctl restart nginx
 
</code>
 
  
 
4. '''Проверка конфигурации''':
 
4. '''Проверка конфигурации''':
<code>
+
<code>sudo nginx -t</code>
sudo nginx -t
 
</code>
 
  
 
== 8. Мониторинг виртуальных хостов ===
 
== 8. Мониторинг виртуальных хостов ===
Строка 419: Строка 307:
  
 
1. Просмотрите логи Apache:
 
1. Просмотрите логи Apache:
<code>
+
<code>sudo tail -f /var/log/apache2/error.log</code>
sudo tail -f /var/log/apache2/error.log
+
<code>sudo tail -f /var/www/example.com/logs/access.log</code>
sudo tail -f /var/www/example.com/logs/access.log
 
</code>
 
  
 
2. Просмотрите логи Nginx:
 
2. Просмотрите логи Nginx:
<code>
+
<code>sudo tail -f /var/log/nginx/error.log</code>
sudo tail -f /var/log/nginx/error.log
+
<code>sudo tail -f /var/www/example.com/logs/access.log</code>
sudo tail -f /var/www/example.com/logs/access.log
 
</code>
 
  
 
3. Просмотрите логи PHP-FPM:
 
3. Просмотрите логи PHP-FPM:
<code>
+
<code>sudo tail -f /var/log/php8.1-fpm.log</code>
sudo tail -f /var/log/php8.1-fpm.log
 
</code>
 
  
 
=== Создание скрипта мониторинга ===
 
=== Создание скрипта мониторинга ===
  
 
1. Создайте скрипт мониторинга:
 
1. Создайте скрипт мониторинга:
<code>
+
<code>sudo nano /usr/local/bin/vhost-monitor.sh</code>
sudo nano /usr/local/bin/vhost-monitor.sh
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<code>echo "=== Virtual Hosts Monitoring ==="</code>
#!/bin/bash
+
<code>echo "Date: $(date)"</code>
 
+
<code>echo ""</code>
echo "=== Virtual Hosts Monitoring ==="
+
<code>if systemctl is-active --quiet apache2; then</code>
echo "Date: $(date)"
+
<code>echo "Apache is running"</code>
echo ""
+
<code>echo "Apache sites:"</code>
 
+
<code>sudo apache2ctl -S | grep "namevhost"</code>
# Проверка Apache
+
<code>else</code>
if systemctl is-active --quiet apache2; then
+
<code>echo "Apache is not running"</code>
    echo "Apache is running"
+
<code>fi</code>
    echo "Apache sites:"
+
<code>if systemctl is-active --quiet nginx; then</code>
    sudo apache2ctl -S | grep "namevhost"
+
<code>echo "Nginx is running"</code>
else
+
<code>echo "Nginx sites:"</code>
    echo "Apache is not running"
+
<code>sudo nginx -T | grep "server_name"</code>
fi
+
<code>else</code>
 
+
<code>echo "Nginx is not running"</code>
# Проверка Nginx
+
<code>fi</code>
if systemctl is-active --quiet nginx; then
+
<code>if systemctl is-active --quiet php8.1-fpm; then</code>
    echo "Nginx is running"
+
<code>echo "PHP-FPM is running"</code>
    echo "Nginx sites:"
+
<code>else</code>
    sudo nginx -T | grep "server_name"
+
<code>echo "PHP-FPM is not running"</code>
else
+
<code>fi</code>
    echo "Nginx is not running"
+
<code>echo "SSL Certificates:"</code>
fi
+
<code>for cert in /etc/ssl/certs/*.crt; do</code>
 
+
<code>if [ -f "$cert" ]; then</code>
# Проверка PHP-FPM
+
<code>echo "$(basename $cert): $(openssl x509 -enddate -noout -in $cert | cut -d= -f2)"</code>
if systemctl is-active --quiet php8.1-fpm; then
+
<code>fi</code>
    echo "PHP-FPM is running"
+
<code>done</code>
else
 
    echo "PHP-FPM is not running"
 
fi
 
 
 
# Проверка 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
 
</code>
 
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>
+
<code>sudo chmod +x /usr/local/bin/vhost-monitor.sh</code>
sudo chmod +x /usr/local/bin/vhost-monitor.sh
 
</code>
 
  
 
== 9. Устранение неполадок ===
 
== 9. Устранение неполадок ===
Строка 511: Строка 377:
  
 
1. Проверьте статус служб:
 
1. Проверьте статус служб:
<code>
+
<code>sudo systemctl status apache2</code>
sudo systemctl status apache2
+
<code>sudo systemctl status nginx</code>
sudo systemctl status nginx
+
<code>sudo systemctl status php8.1-fpm</code>
sudo systemctl status php8.1-fpm
 
</code>
 
  
 
2. Проверьте конфигурацию:
 
2. Проверьте конфигурацию:
<code>
+
<code>sudo apache2ctl configtest</code>
sudo apache2ctl configtest
+
<code>sudo nginx -t</code>
sudo nginx -t
 
</code>
 
  
 
3. Проверьте подключения:
 
3. Проверьте подключения:
<code>
+
<code>sudo netstat -tlnp | grep -E ':(80|443)'</code>
sudo netstat -tlnp | grep -E ':(80|443)'
 
</code>
 
  
 
4. Проверьте права доступа:
 
4. Проверьте права доступа:
<code>
+
<code>ls -la /var/www/</code>
ls -la /var/www/
+
<code>ls -la /etc/apache2/sites-enabled/</code>
ls -la /etc/apache2/sites-enabled/
+
<code>ls -la /etc/nginx/sites-enabled/</code>
ls -la /etc/nginx/sites-enabled/
 
</code>
 
  
 
== 10. Дополнительные настройки ===
 
== 10. Дополнительные настройки ===
Строка 540: Строка 398:
  
 
1. Для Apache добавьте в конфигурацию:
 
1. Для Apache добавьте в конфигурацию:
<code>
+
<code># Кэширование
# Кэширование
 
 
<IfModule mod_expires.c>
 
<IfModule mod_expires.c>
 
     ExpiresActive On
 
     ExpiresActive On
Строка 551: Строка 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></code>
</code>
 
  
 
2. Для Nginx добавьте в конфигурацию:
 
2. Для Nginx добавьте в конфигурацию:
<code>
+
<code>location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {</code>
# Кэширование
+
<code>expires 1y;</code>
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
+
<code>add_header Cache-Control "public, immutable";</code>
    expires 1y;
+
<code>}</code>
    add_header Cache-Control "public, immutable";
 
}
 
</code>
 
  
 
=== Настройка сжатия ===
 
=== Настройка сжатия ===
  
 
1. Для Apache включите модуль сжатия:
 
1. Для Apache включите модуль сжатия:
<code>
+
<code>sudo a2enmod deflate</code>
sudo a2enmod deflate
 
</code>
 
  
 
2. Добавьте в конфигурацию:
 
2. Добавьте в конфигурацию:
<code>
+
<code><IfModule mod_deflate.c>
<IfModule mod_deflate.c>
 
 
     AddOutputFilterByType DEFLATE text/plain
 
     AddOutputFilterByType DEFLATE text/plain
 
     AddOutputFilterByType DEFLATE text/html
 
     AddOutputFilterByType DEFLATE text/html
Строка 582: Строка 432:
 
     AddOutputFilterByType DEFLATE application/javascript
 
     AddOutputFilterByType DEFLATE application/javascript
 
     AddOutputFilterByType DEFLATE application/x-javascript
 
     AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
+
</IfModule></code>
</code>
 
  
 
3. Для Nginx добавьте в конфигурацию:
 
3. Для Nginx добавьте в конфигурацию:
<code>
+
<code>gzip on;</code>
# Сжатие
+
<code>gzip_vary on;</code>
gzip on;
+
<code>gzip_min_length 1024;</code>
gzip_vary on;
+
<code>gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;</code>
gzip_min_length 1024;
 
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
 
</code>
 
  
 
== Заключение ==
 
== Заключение ==

Версия 19:59, 14 октября 2025

Содержание

Настройка виртуальных хостов 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):

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