Nginx как фронтенд для Apache
Mar 31, 2016 21:47 · 370 words · 2 minute read
Apache и Nginx — наиболее распространенные web-серверы с открытым исходным кодом. Они могут прекрасно справляться с различными рабочими нагрузками, но также имеют и свои недостатки (например, Apache требует много памяти сервера, а Nginx зависит от модулей для динамического контента). Давайте разберемся, как взять лучшее от каждого из этих web-серверов!
Зачастую для получения максимального эффекта Nginx используют как фронтенд (для статического контента), а Apache — как бекенд (для динамического контента). Считаем, что необходимые пакеты уже установлены в системе.
Для настройки Nginx в роли фронтенда создадим конфигурационный файл:
nano /etc/nginx/sites-available/example
Пример содержимого конфигурационного файла:
server {
listen 80;
root /var/www/;
index index.php index.html index.htm;
server_name example.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
proxy_pass http://127.0.0.1:8080;
}
location /nginx-status {
stub_status on;
access_log off;
satisfy any;
allow 127.0.0.1;
allow 192.168.0.0/24;
deny all;
auth_basic "Nginx";
auth_basic_user_file /etc/nginx/basic.auth;
}
location /phpmyadmin {
satisfy any;
allow 192.168.0.0/24;
deny all;
auth_basic "PhpMyAdmin";
auth_basic_user_file /etc/phpmyadmin/basic.auth;
proxy_pass http://127.0.0.1:8080;
}
location ~ /\.ht {
deny all;
}
}
Активируем созданный виртуальный хост:
ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/example
И удалим присутствующий по умолччанию виртуальный хост:
rm /etc/nginx/sites-enabled/default
Проверить конфигурацию Nginx можно командой:
nginx -t
Перечитать конфиг можно так:
nginx -s reload
Переходим к настройке web-сервера Apache. Открываем конфигурационный файл /etc/apache2/ports.conf
, и изменяем порт, на котором будет запущен Apache:
Listen 127.0.0.1:8080
Примечание. Параметр NameVirtualHost
начиная с версии 2.3.11 больше не используется.
Копируем пример настроек виртуального хоста из настроек по умолчанию:
cp /etc/apache2/sites-available/default /etc/apache2/sites-available/example
Редактируем конфигурационный файл /etc/apache2/sites-available/example
, в моем случае он выглядит следующим образом:
...
<VirtualHost *>
ServerName example.com
ServerAlias www.example.com example.com
DocumentRoot /var/www/
CustomLog /var/log/apache2/access.log combined
ErrorLog /var/log/apache2/error.log
AddDefaultCharset utf-8
</VirtualHost>
...
Активируем виртуальный хост:
a2ensite example
Перезапустить web-сервер Apache можно командой:
service apache2 restart
Убедиться, что web-серверы запущены на указанных портах можно командой:
netstat -plunt
Результатом будет примерно следующее:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 539/rpcbind
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 22092/apache2
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 733/nginx -g daemon
...
Также для проверки работоспособности настроенной связки можно создать файл info.php
, котором использовать функцию phpinfo()
— теперь при открытии в браузере страницы example.com/info.php будет выведена информация о текущей конфигурации PHP.