Настройка NGinx в качестве прокси для Apache2 + настройка php5-fpm
Для использования 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