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

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

Текущая версия на 10:36, 15 октября 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):

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