Как работает Nginx
NGINX – разрабатываемый с 2002-го года русскими программистами вэб-сервер. Как правило используется для обработки статического содержимого. В нашем случае мы используем спайку “Apache + NGINX”, где последний работает в режиме прокси-сервера. Работа данной связки следуящая:
– NGINX слушает порт 80;
– Apache слушает порт 8081 (формально, можно выбрать любой иной порт);
– все приходящие HTTP-запросы обрабатываются сначала NGINX;
– если в HTTP-запросе требуются загрузить какой-либо статический файл из следующего списка:
(gif|3gp|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|
css|exe|zip|rar|gz|tar|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso) то обработку такого запроса (и, соответственно, отдачу таких файлов) выполняет NGINX, а Apache вообще не задействуется.
– если в HTTP-запросе требуется выполнение PHP или Perl/CGI-скрипта, он перенаправляется NGINX-ом на порт 8081, и тогда уже Apache его обрабатывает.
Таким образом на сервере одновременно работают ДВА вэб-сервера NGINX(80-й порт) и Apache(8081-й порт), которые “делят” между собой работу по обработке HTTP-запросов. NGINX оборабатывает “статику”, а Apache – “динамику”. Главная цель такой схемы – ускорение обработки запросов и снижение нагрузки на сервер. NGINX оптимизирован для обработки статического содержимого и в этом плане намного опережает Apache, однако он лишен такой гибкости, как Apache, в который можно включить/выключить сотни различных модулей.
Инсталляция
Так как у нас Apache работает и настраивается из-под Cpanel, необходимо не просто установить NGINX, но и сделать так, чтобы при добавлении/удалении новых аккаунтов соответственно менялась настройка данного аккаунта NGINX и так далее. К счастью, есть автоматический инсталлятор, который сам все делает. Любопытные могу подробнее почитать про все это тут: http://forums.cpanel.net/f189/nginx-automated-installer-148109-p14.html
Итак, установка сводится к следующему:
cd /usr/local/src wget http://nginxcp.com/latest/nginxadmin.tar tar xf nginxadmin.tar cd publicnginx ./nginxinstaller install |
Если по каким-либо причинам что-то не заработало и вам нужно все вернуть назад к обычному Apache, просто запускаем:
./nginxinstaller uninstall |
После инсталляции добавляем в рутовый крон:
0 * * * * /usr/sbin/tmpwatch -am 1 /tmp/nginx_client |
и потом
/etc/init.d/crond restart |
Конфигурация
По-умолчанию, NGINX ставится в папку:
/etc/nginx |
(вообщето только конфигурационные файлы, бинарник лежит тут /usr/local/sbin/)
Файлы хостов (они создаются или удаляются автоматически, когда вы добавляете или удаляете домен из Cpanel) лежат в папке:
/etc/nginx/vhosts |
Открываем файл конфигурации NGINX:
/etc/nginx/nginx.conf |
Ставим следующую конфигурацию:
user nobody; # no need for more workers in the proxy mode worker_processes 2; error_log /var/log/nginx/error.log info; worker_rlimit_nofile 20480; events { worker_connections 20000; # increase for busier servers use epoll; # you should use epoll here for Linux kernels 2.6.x } http { server_name_in_redirect off; server_names_hash_max_size 4096; server_names_hash_bucket_size 512; include mime.types; default_type application/octet-stream; server_tokens off; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 60; gzip on; gzip_vary on; gzip_disable "MSIE [1-6]\."; gzip_proxied any; gzip_http_version 1.1; gzip_min_length 0; gzip_comp_level 3; gzip_buffers 16 8k; proxy_buffering Off; # You can remove image/png image/x-icon image/gif image/jpeg if you have slow CPU gzip_types text/plain text/xml text/css application/x-javascript application/xml image/png image/x-icon image/gif image/jpeg application/xml+rss text/javascript application/atom+xml; ignore_invalid_headers on; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; reset_timedout_connection on; connection_pool_size 256; client_header_buffer_size 256k; large_client_header_buffers 4 256k; client_max_body_size 10M; client_body_buffer_size 128k; request_pool_size 32k; output_buffers 4 32k; postpone_output 1460; proxy_temp_path /tmp/nginx_proxy/; client_body_in_file_only on; log_format bytes_log "$msec $bytes_sent ."; include "/etc/nginx/vhosts/*"; } |
Рестарт NGINX:
/etc/init.d/nginx restart |
После рестарта обязательно проверяем, или он поднялся:
ps auxc | grep nginx |
Также надо убедится что и NGINX и Apache одновременно подняты и слушают нужные порты:
netstat -anp | grep :80 | grep LISTEN |
после такой команды вы должны получить что-то вроде этого
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3856/nginx.conf tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 3862/httpd |
Возможно, что при рестарте NGINX он не подымется. Тогда смотрим файлик:
/var/log/nginx/error.log |
Скорее всего ошибка будет заключаться в неверной конфигурации хоста в “/etc/nginx/vhosts”. Исправляем ее, если можем и после исправления делаем рестарт NGINX.
Возможные проблемы
Проблемы, которые могут возникнуть при установленном NGINX
1) Сайт не паблишится через Фронт-Пейдж
Почему: Все верно, Фронт-Пейдж – это модуль Апача, так что напрямую через HGINX он работаеть не будет.
Решение: Заливать нужно с указанием порта Апача (в нашем случае – 8081).
То есть:
http://example.com:8081/ |
2) Не грузятся сайты, “висят”
Почему: Как правило это значит, что забиты все коннекты NGINX либо из-за ДДОС атаки, либо из-за неверной настройки самого NGINX.
Решение: Смотрим сколько к серверу соединений. Если ДДОС, то отбиваем его (если можем).
Также смотрим конфиг NGINX:
/etc/nginx/nginx.conf |
и увеличиваем (если необходимо) значения с
worker_connections 10000; |
до, например
worker_connections 20000; |
После рестартуем NGINX.
3) Забивается ТМП-раздел
Почему: NGINX интенсивно кэширует запросы, используя “/tmp” раздел. В зависимости от интенсивности запросов к серверу, ТМП-раздел может забиваться быстрее или медленнее.
Решение: Нужно в рутовый крон прописать следующее
0 */4 * * * /usr/sbin/tmpwatch -am 4 /tmp/nginx_client |
возможны также и другие варианты, типа
0 * * * * /usr/sbin/tmpwatch -am 1 /tmp/nginx_client |
или
*/10 * * * * rm -rf /tmp/nginx_client/* |
Последний вариант используем, если ТМП-диск забиватся слишком быстро (к примеру, когда сервер атакуют).
Возможно иногда прийдется ставить чистку раз в 5 минут.
4) 502 Bad Gateway
Решение: Вот что пишут разработчики:
“502 Bad Gateway happens when apache down. Check the Apache non-SSL IP/port under tweak settings. Apache non-SSL IP/port should be 8081 afrer successful install. ”
То есть возможно, что был изменен конфиг Апача или сам Апач лежит.
Проверяем конфиг Апача и сам Апача, если надо, переставляем NGINX.
5) 500 internal server error nginx
Пока что конкретного решения нету, потому что все зависит от того, что записано в лог-фале.
То есть смотрим что генерирует ошибку в файле /var/log/nginx/vhost-error_log и на основе этого выясняем где ошибка.
6) Клиенту поставили выделенный ай-пи, и сайт перестал работать
Почему: Пока что в функционал плагина “NGINXCP”, который мы используем, не заложена автоматическая смена ай-пи адреса в конфиге NGINX.
Решение: Надо вручную отредактировать конфигурацию NGINX для нужного хоста.
Пример: Хост “example.com” был на адресе 11.11.11.11, а перевелся на 22.22.22.22.
Запускаем:
replace '11.11.11.11' '22.22.22.22' -- /etc/nginx/vhosts/example.com |
или же через SED
sed -i 's/11.11.11.11/22.22.22.22/' /etc/nginx/vhosts/example.com |
и потом
/etc/init.d/nginx restart |
7) Клиенту сменили мастер-домен, и сайт с новым доменом не работает
Почему: Причина та же, что и в пункте 6.
Решение: Надо вручную отредактировать конфигурацию NGINX для нужного хоста.
Пример: Мастер-домен сменили с “petya.com” на “vasya.com”
Делаем
mv /etc/nginx/vhosts/petya.com /etc/nginx/vhosts/vasya.com |
потом
replace 'petya.com' 'vasya.com' -- /etc/nginx/vhosts/vasya.com |
и потом
/etc/init.d/nginx restart |
8) Не работает cPanel и Webmail через субдомены cpanel.domain.com, webmail.domain.com
Почему: Нету соответсвующего конфига в NGINX
Решение: Редактируем соответсвующий виртуал-хост
vi /etc/nginx/vhosts/domain.com
меняем строку
server_name domain.com www.domain.com xxx.xxx.xxx.xxx; |
на
server_name domain.com www.domain.com webmail.domain.com cpanel.domain.com xxx.xxx.xxx.xxx; |
и потом рестартуем NGINX.
/etc/init.d/nginx restart |
для версии панели управления больше 11.28 – неработает
Откуда у тебя такая информация??? О_о
Все работает отлично как для 11.29 так и для 11.30
Там просто есть некоторые нюансы с Python, устанавливаешь более позднюю версию и все работает на ура!!!
Если у тебя версия сPanel 11.30 тогда тебе нужно ставить более новый релиз nginx (>= 2.0)
http://nginxcp.com/nginxadmin2.6-stable.tar
File “/usr/lib/python2.4/site-packages/PyYAML-3.10-py2.4-linux-x86_64.egg/yaml/__init__.py”, line 26 (for 64-bit)
Digging around I found that only machines with “PyYAML-3.10” library were facing problems while others with “PyYAML-3.09” file were working fine.
So, the solution is quite trivial – we just need to replace problem file:
# cd /usr/lib/python2.4/site-packages
# mv PyYAML-3.10-py2.4-linux-x86_64.egg PyYAML-3.10-py2.4-linux-x86_64.egg_
# wget http://alex-montana.co.cc/PyYAML-3.09-py…x86_64.egg
# cd /usr/local/src
# wget http://nginxcp.com/nginxadmin2.6-stable.tar
# tar xf nginxadmin2.6-stable.tar
# cd publicnginx
# ./nginxinstaller install