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

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