Настройка Nginx как фронтенд и Apache как бэкенд в CentOS и Ubuntu

Настройка Nginx как фронтенд и Apache как бэкенд в CentOS и Ubuntu

Меня периодически спрашивают, как “подружить” Nginx и Apache, да так, чтобы Nginx был фронтендом, а Apache бэкендом на . Ведь Apache довольно тяжёлый, но у него есть многие нужные для большинства сайтов функции. А Nginx очень быстрый и мог бы хранить всю статику, чтобы Apache брал на себя меньше нагрузки. Всё это, разумеется, сказывается на скорости загрузки сайта у посетителей. Ниже представлю настройки для произвольного сайта как из файла конфигурации Nginx, так и Apache. Я не буду здесь вдаваться в подробности кеширования, так как если вы попали на эту страницу, то прекрасно во всём разбираетесь, но вам необходима небольшая подсказка. Ниже представляю ту самую подсказку.

Nginx настройка

Nginx

Обратите внимание, что сначала запрос идёт на ваш ip, на котором находится сайт. Это должен быть реальный ip вашего сервера, которому мы присваиваем 80-ый порту. А потом идёт запрос на локальный ip, которому мы присваиваем 81-ый порт.

.....
server {
listen 111.222.333.444:80;
server_name ваш_сайт.ru www.ваш_сайт.ru;
charset UTF-8;
error_page 404 = @fallback;
location / {
proxy_pass http://127.0.0.1:81;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;

proxy_buffer_size 8k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 10m;
}
location ~* ^.+\.(bmp|jpg|jpeg|gif|ico|png|css|doc|txt|js|zip|iso|tgz|gz|rar|bz2|7z|xls|exe|pdf|ppt|tar|wav|avi|rtf|mp3|mp4|mov|mpeg|mpg|eot|ttf|woff|woff2)$ {
expires 300d;
root /var/www/Папка/Папка/Папка/ваш_сайт.ru;
proxy_redirect off;
access_log off;
}
location @fallback {
proxy_pass http://127.0.0.1:81;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}
.....

настройка Apache

Apache

Здесь вся работа происходит на вашем локальном ip, находящимся на 81-ом порту. В Nginx мы уже это указали. Локальный ip указанный в Nginx и в Apache должны совпадать для одного и того же домена.

.....
NameVirtualHost 127.0.0.1:81
.....
ServerName ваш_сайт.ru
AddDefaultCharset UTF-8
CustomLog /dev/null combined
DocumentRoot /var/www/Папка/Папка/Папка/ваш_сайт.ru
ErrorLog /dev/null
ServerAdmin admin@ваш_сайт.ru
ServerAlias www.ваш_сайт.ru
SuexecUserGroup Пользователь Группа
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
AddType application/x-httpd-php-source .phps
php_admin_value open_basedir "/var/www/Папка/Папка:."
php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f admin@ваш_сайт.ru"
php_admin_value upload_tmp_dir "/var/www/Папка/Папка/mod-tmp"
php_admin_value session.save_path "/var/www/Папка/Папка/mod-tmp"
.....