Настройка NGinx в качестве прокси для Apache2 + настройка php5-fpm

Категория: Linux

Для использования nginx как проксирующего сервера для веб сервера Apache2, нужно использовать php5-fpm вместо апач модуля php5. Я предполагаю, что nginx у вас уже установлен.

Настройка порта Apache2

Если Apache2 слушает 80 порт, нужно задать ему другой порт, например 8080:

sudo sed -i -- 's|^Listen 80$|Listen 8080|g' /etc/apache2/ports.conf
sudo sed -i -- 's|<VirtualHost \*:80>|<VirtualHost \*:*>|g' /etc/apache2/sites-available/*

Убедитесь, что виртуальные хосты Apache не слушают 80 порт:

grep -r '80' /etc/apache2/sites-available

Проверьте и примените настройки Apache2:

sudo apachectl -t # Рассчитываем на ответ: Syntax OK
sudo service apache2 reload

Убедитесь, что Apache2 запустился на порту 8080:

http://localhost:8080/

Использование php5-fpm

Установка php5-fpm и включение:

sudo apt-get install libapache2-mod-fastcgi php5-fpm
sudo a2dismod php5
sudo a2enmod actions
sudo service apache2 restart

Настройка модуля fastcgi:

sudo nano /etc/apache2/mods-enabled/fastcgi.conf
<IfModule mod_fastcgi.c>
  AddHandler fastcgi-script .fcgi
  #FastCgiWrapper /usr/lib/apache2/suexec
  FastCgiIpcDir /var/lib/apache2/fastcgi

  AddType application/x-httpd-fastphp5 .php
  Action application/x-httpd-fastphp5 /php5-fcgi
  Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
  FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
  <Directory /usr/lib/cgi-bin>
    Require all granted
  </Directory>
</IfModule>

Если вместо сокета вы хотите настроить соединение через tcp порт - укажите конфиг listen.allowed_clients = 127.0.0.1:9000 в файле /etc/php5/fpm/pool.d/www.conf:

sudo sed -i -- 's|^;listen.allowed_clients = 127.0.0.1$|listen.allowed_clients = 127.0.0.1:9000|g' /etc/php5/fpm/pool.d/www.conf

Настройка проксирования

Создайте новый конфиг nginx сайта:

sudo gedit /etc/nginx/sites-available/apache_proxy
server {
    listen 80;
    server_name site01.lcl site02.lcl virtualhostN.lcl;

    location / {
        proxy_pass http://192.168.1.101:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

В параметре server_name укажите список сайтов (виртуальных хостов Apache2), которые нужно проксировать через nginx.

См. настройка виртуальных хостов nginx.

Проверьте и примените новую конфигурацию nginx:

sudo nginx -t

Включите этот конфиг проксирования:

sudo ln -s /etc/nginx/sites-available/apache_proxy /etc/nginx/sites-enabled/apache_proxy

И примените новую конфигурацию nginx:

sudo service nginx reload

Теперь проксирование должно работать для указанных в директиве server_name сайтов.

Примечание

Также можно установить и настроить apache модуль libapache2-mod-rpaf, который позволяет логировать правильный IP адрес.

#nginx, #nginx reverse proxy apache2, #nginx setup servers, #php5-fpm, #php fastcgi

категория: Linux