Задача снизить нагрузку на Apache и отдавать статический контент с помощью Nginx, что значительно экономит системные ресурсы за счет того, что после того как пришел запрос от клиента, Nginx передает запрос apache и быстро получает ответ.
В итоге Apache после того как отдал ответ Nginx освобождает память, далее с клиентом взаимодействует web сервер nginx, который и написан для раздачи статического контента, большому количеству клиентов, при незначительном потреблении системных ресурсов.
Установка Nginx
apt-get install nginx
Настройка Nginx
Сначала отредактируем файл виртуальных хостов, описывать все виртуальные хосты которые есть в настройка apache не обязательно, просто заставим nginx слушать нужный нам айпи адрес.
/etc/nginx/sites-enabled/default
server { # здесь пишем ip адрес сервера на котором стоит nginx listen 192.168.0.100:80; # путь куда будем писать журнал access_log /var/log/nginx/localhost.access.log; location / { # ip адрес сервера где стоит apache в данном случае он стоит на том же сервере где и nginx и слушает только localhost (127.0.0.1) # порт можно указать любой из незанятых в данном примере это 80 порт на петлевом интерфейсе (localhost) proxy_pass http://127.0.0.1:80/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/nginx-default; } }
Затем файл /etc/nginx/nginx.conf
Добавим в секцию http параметр client_max_body_size 100m;
Для того чтоб не было ошибки 413, так как по умолчанию стоит ограничение на заливаемые файлы 1мб.
http { include /etc/nginx/mime.types; access_log /var/log/nginx/access.log; sendfile on; #tcp_nopush on; client_max_body_size 100m; #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; gzip on; gzip_disable "MSIE [1-6].(?!.*SV1)"; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
Установка mod_rpaf
Данный модуль необходим по следующей причине: запросы к apache приходят с ip адреса на котором работает nginx, соответственно в журнальных файлах apache будет фигурировать только ip nginx сервера, что не хорошо. Также без использования данного модуля начнутся проблемы со скриптами в которых используется ip адрес посетителя и перестанет правильно работать механизм ограничения доступа по ip адресам с помощью .htaccess.
apt-get install libapache2-mod-rpaf
Настройка mod_rpaf
Приводим файл apache/mods-enabled/rpaf.conf к такому виду
RPAFenable On RPAFsethostname On RPAFproxy_ips 127.0.0.1
Настройка Apache
В файле конфигурации Apache /etc/apache2/ports.conf замените
Listen :80
на
Listen 127.0.0.1:80
127.0.0.1 - IP-адрес, с помощью которого компьютер может обратиться по сети к самому себе, независимо от есть ли у него подключения к сети или нет.
:80 - порт прослушивания, как написано выше может быть любой у меня это 80, если выбран другой порт например 8990 то и в nginx нужно указать "proxy_pass http://127.0.0.1:8990/; "
И проверим файл описания виртуальных хостов
/etc/apache2/sites-enabled/default
И убедимся что секция VirtualHost не содержит ip адреса и порта, если да то вместо 192.168.0.100:80 ставим символ " * "
Запуск
Сначала останавливаем наши сервера
/etc/init.d/nginx stop
и
/etc/init.d/apache2 stop
И запускам, сначала nginx
/etc/init.d/nginx start
потом
/etc/init.d/apache2 start