© http://svdev.ru/blog/setup-nginx-apache-under-debian/
Основная задача – что бы apache слушал запросы на
127.0.0.1:81 #порт можно взять и другой, к примеру 8080а nginx слушал запросы с внешних адресов на 80 порту, разбирал статику или еще какие действия выполнял, а остальные запросы прокидывал на apache на локальный адрес 127.0.0.1 и 81 порт
Установка nginx:
|
1
|
apt-get install nginx
|
Сначала настроим nginx для работы, дефолтный конфиг и создадим конфиги для все используемых сайтов.
В самом конфиге (/etc/nginx/nginx.conf) получилось следующее:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
user www-data;
worker_processes 1; error_log /var/log/nginx/error.log; events { http { sendfile on; keepalive_timeout 65; gzip on; include /etc/nginx/conf.d/*.conf; |
И проверяем что не закралась ошибка:
|
1
2 3 |
sudo nginx -t
[info] 31015#0: the configuration file /etc/nginx/nginx.conf syntax is ok [info] 31015#0: the configuration file /etc/nginx/nginx.conf was tested successfully |
Далее правим дефолтный конфиг /etc/nginx/sites-available/default, для всех запросов. Так как запросы, кроме определенных сайтов нам не нужны, повесим их переадресацию на заглушку /var/www/nginx-default/index.html, больше нам здесь ничего не надо – 404 можно перекидывать сюда же:
|
1
2 3 4 5 6 7 8 9 10 11 12 |
server {
listen 80; server_name localhost; access_log /var/log/nginx/localhost.access.log; location / { |
В итоге все неразобранные запросы попадут на нашу заглушку: http://77.220.185.16/.
Далее создаем настройки для всех поддерживаемых ресурсов, по аналогии с apache конфиги хранятся в /etc/nginx/sites-available/, а подключенные в /etc/nginx/sites-enabled/. Создаем /etc/nginx/sites-available/svdev.ru:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
server {
listen 80; server_name svdev.ru www.svdev.ru; access_log /var/www/svdev.ru/logs/nginx-access.log; location / { proxy_set_header Host $host; client_max_body_size 10m; proxy_connect_timeout 90; proxy_buffer_size 4k; |
Перовоначальные настройки позволяют просто перенаправлять запросы с nginx на apache. Настройкой правил для отдачи статики без участия apache и прочим займемся позже. После создания настроек их необходимо подключить, по аналогии apache утилит a2ensite и a2dissite нет и надо создать симлинк самому:
|
1
|
sudo ln -s /etc/nginx/sites-available/svdev.ru /etc/nginx/sites-enabled/svdev.ru
|
Далее заставляем apache слушать 81 порт с внутреннего интерфейса, поправив /etc/apache2/ports.conf:
|
1
2 |
NameVirtualHost *:81
Listen 127.0.0.1:81 |
И необходимо подправить настройки хостов apache /etc/apache2/sites-available/svdev.ru:
|
1
2 |
# заменить 80 порт на выбранный, у меня 81
<VirtualHost *:81> |
Таким образом попасть на apache теперь можно только через nginx, т. е. снаружи он недоступен!
Для удобства необходимо еще установить пакет
libapache2-mod-rpaf - module for Apache2 which takes the last IP from the 'X-Forwarded-For' header
|
1
|
sudo apt-get install libapache2-mod-rpaf
|
Мне дополнительно настраивать ничего не пришлось, после установки в $_SERVER["REMOTE_ADDR"] начал подставляться реальный IP посетителя, вместо 127.0.0.1 Дополнительную информацию по модулю можно найти погуглив, в документации или по ссылкам ниже.
Далее настроим ротацию логов. Сначала для nginx, приятно был удивлен, увидев /etc/logrotate.d/nginx, добавим туда еще один файл:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 |
/var/log/nginx/*.log {
daily missingok rotate 2 compress delaycompress notifempty create 640 root adm sharedscripts postrotate [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid` cat /var/log/nginx/error.log.1 | mail root endscript } |
cat /var/log/nginx/error.log.1 | mail root – таким образом данные из последнего обработанного файла будут отправлену на почту рута, а уж куда она придет можно настраивать в /etc/aliases