Nginx как фронтенд для Apache

Mar 31, 2016 21:47 · 370 words · 2 minute read nginx apache

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.

tweet Share