Установка необходимых компонентов:
apt-get update
apt-get install apache2 nginx libapache2-mod-rpaf bsdutils mysql-server
libapache2-mod-rpaf - нужен чтобы Apache видел реальный IP подключения, а не локальный.
Включаем mod_rewrite для Apache:
a2enmod rewrite
Добавляем возможность запускать Apache не под рутом:
a2dismod mpm_event
apt-get install libapache2-mpm-itk
systemctl restart apache2
Добавляем пользователя для Apache. Можно создать отдельного пользователя для каждого сайта, но мне это обычно не требуется.
adduser aworker
Далее в конфиге /etc/apache2/envvars необходимо выставить:
export APACHE_RUN_USER=aworker
export APACHE_RUN_GROUP=aworker
А в конфиге /etc/nginx/nginx.conf необходимо выставить:
user aworker
Устанавливаем PHP, если нужно:
apt-get install software-properties-common
LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
apt-get update
apt-get install php8.1 libapache2-mod-php8.1 php8.1-mysql php8.1-curl php8.1-cli php8.1-common php8.1-gd php8.1-mbstring
Чтобы найти дополнительные модули:
apt-cache search php7-*
Закрываем Apache от внешних запросов:
В файле: /etc/apache2/ports.conf:
Listen 127.0.0.1:81
Nginx настраиваем как прокси. Для этого создадим файл /etc/nginx/conf.d/proxy.conf со следующим содержимым:
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Для каждого сайта создаём конфиг с расширением .conf в: /etc/apache2/sites-enabled
Типичный конфиг для сайта:
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
ServerName YOUR_DOMAIN_NAME
ServerAdmin admin@mail.ru
DocumentRoot /home/YOUR_DOMAIN_NAME/html
ErrorLog /home/YOUR_DOMAIN_NAME/logs/apache2.error.log
CustomLog /home/YOUR_DOMAIN_NAME/logs/apache2.access.log combined
AddType application/x-httpd-php .php
php_admin_value open_basedir "/home/YOUR_DOMAIN_NAME"
php_admin_value upload_tmp_dir "/home/YOUR_DOMAIN_NAME/tmp"
php_admin_value session.save_path "/home/YOUR_DOMAIN_NAME/tmp"
ServerName www.YOUR_DOMAIN_NAME
ServerAdmin admin@mail.ru
DocumentRoot /home/YOUR_DOMAIN_NAME/html
ErrorLog /home/YOUR_DOMAIN_NAME/logs/apache2.error.log
CustomLog /home/YOUR_DOMAIN_NAME/logs/apache2.access.log combined
AddType application/x-httpd-php .php
php_admin_value open_basedir "/home/YOUR_DOMAIN_NAME"
php_admin_value upload_tmp_dir "/home/YOUR_DOMAIN_NAME/tmp"
php_admin_value session.save_path "/home/YOUR_DOMAIN_NAME/tmp"
Redirect / https://YOUR_DOMAIN_NAME
Конфиг 000-default.conf заменяем на свой:
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
ServerAdmin admin@mail.ru
DocumentRoot /home/aworker/html/
ErrorLog /home/aworker/logs/apache2.error.log
CustomLog /home/aworker/logs/apache2.access.log combined
AddType application/x-httpd-php .php
php_admin_value open_basedir "/home/aworker"
php_admin_value upload_tmp_dir "/home/aworker/tmp"
php_admin_value session.save_path "/home/aworker/tmp"
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Для каждого сайта создаём конфиг в: /etc/nginx/sites-enabled
Типичный конфиг для сайта:
server {
listen 80;
server_name YOUR_DOMAIN_NAME www.YOUR_DOMAIN_NAME;
root /home/YOUR_DOMAIN_NAME/html;
error_log /home/YOUR_DOMAIN_NAME/logs/nginx.error.log crit;
access_log /home/YOUR_DOMAIN_NAME/logs/nginx.access.log;
location / {
proxy_pass http://127.0.0.1:81;
}
location ~* .(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|docx|xlsx)$ {
root /home/YOUR_DOMAIN_NAME/html;
expires 6h;
}
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
Конфиг default:
server {
listen 80;
server_name localhost;
root /home/aworker/html;
error_log /home/aworker/logs/nginx.error.log crit;
access_log /home/aworker/logs/nginx.access.log;
location / {
proxy_pass http://127.0.0.1:81;
}
location ~* .(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|docx|xlsx)$ {
root /home/aworker/html;
expires 6h;
}
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
Естественно, директории для сайтов нужно создать, после чего выдать на них права вашему юзеру:
chown aworker:root /home/YOUR_DOMAIN_NAME
Не забываем делать рестарт в конце:
systemctl restart apache2
systemctl restart nginx