nginx [engine x] — это HTTP-сервер и обратный прокси-сервер, а также почтовый прокси-сервер, написанный Игорем Сысоевым. Уже длительное время он обслуживает серверы многих высоконагруженных российских сайтов, таких как: Яндекс, Mail.Ru, ВКонтакте и Рамблер. Согласно статистике, Netcraft nginx обслуживал или проксировал 13.54% самых нагруженных сайтов в мае 2013 года.
Говоря по-простому, nginx это веб сервер, который менее требователен к ресурсам машины. Имеет смысл использовать на слабых серверах либо на высоконагруженных проектах. Наиболее оптимальный вариант конфигурации, по моему мнению, это работа nginx в связке с apache. В таком варианте nginx выступает прослойкой между пользователем и apache, отдавая всю статику и обработанные apache запросы. Таким образом ускоряется ответ на запрос и освобождаются ресурсы занятые apache, так как ему нужно будет обрабатывать только запросы nginx-а.
Хронология моего сайта
- Начало 2012 - сайт полностью перенесен с DLE на битрикс. До этого момента работал на хостинге - достаточно неплохой, недорогой но под битрикс не оптимизированный- выдавал 2 балла производительности из 30-ти по эталону. Потому приобретен хостинг на - на котором сайт проработал до января 2013.
- Начало 2013 - pagemaster скуксился и начал халтурить. Сайт подвисал, долго открывался и вообще тупил по черному. Кстати это происходит до сих пор с сайтами моих клиентов, которым я когда-то рекомендовал данный хостинг как лучший для Битрикс (во всяком случае он таким и был). Потому потихоньку переношу их на более удобные варианты. Для себя приобрел виртуальный сервер в Германии и настроил простой WEB-сервер с небольшой доводкой под Битрикс.
- Май 2013 - приобрел выделенный сервер в Германии. Полностью перенес сайт и до установил memcached на сервер, в остальном все тот же простой WEB сервер с apache.
- Настоящий момент. Так как многих клиентов буду переносить на обслуживание на собственном сервере, решил вкорячить nginx, дабы быть готовым к нагрузкам и не делать потом впопыхах. Об этом сейчас и расскажу.
Установка nginx на работающий сервер с apache.
Итак имеем работающий WEB-сервер: собранный вот по этим инструкциям:
- Сервер на ubuntu, для Битрикс- инструкция оптимизирована для настройки сервера с 1С-Битрикс
- Установка и настройка memcached на ubuntu server- аналогично с учетом Битрикс
Нам необходимо ко всему этому добру прикрутить nginx, таким образом чтобы он отдавал всю статику и делал запросы к apache для получения динамики.
Во первых устанавливаем nginx командой:
Далее редактируем все файлы виртуальных хостов созданных в apache, собственно меняем прослушиваемый порт с 80 на 81. Пример одного из файлов:
ServerName адрес_сайта
ServerAdmin ящик_админа
DocumentRoot /путь_к_файлам_сайта
<Directory/путь_к_файлам_сайта>
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/mysitesdocs/polimer_m>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel debug
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
Далее редактируем файл nano /etc/apache2/ports.conf
Listen 81
Устанавливаем apache2-mod-rpaf командой
Открываем файл конфигурации nginx и настраивам под себя (рекомендации и подсказки внутри): nano /etc/nginx/nginx.conf
worker_processes 2;
#выставляем по колличеству ядер процессора
timer_resolution 100ms;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 64;
access_log /var/log/nginx/access.log;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_proxied any;
gzip_min_length 1100;
gzip_http_version 1.0;
gzip_buffers 4 8k;
gzip_comp_level 5;
#рекомендую оставить 5, больше бестолково, меньше не эффективно
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Создаем виртуальный хост в nginx nano /etc/nginx/sites-enabled/домен_сайта
listen 80;
server_name домен_сайта;
access_log /var/log/nginx.access_log;
location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ {
root /путь_к_сайту/;
index index.html index.php;
access_log off;
expires 30d;
}
location ~ /\.ht {
deny all;
}
location / {
proxy_pass http://127.0.0.1:81/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_set_header Host $host;
proxy_connect_timeout 60;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_redirect off;
proxy_set_header Connection close;
proxy_pass_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
}
}
Перезапускаем nginx /etc/init.d/nginx restart
и апач sudo /etc/init.d/apache2 reload
Изменение прав на папки и файлы сайта(ов)
Для безопасности имеет смысл выставить права на файлы всех сайтов равными 644, а на папки 755. При этом владельцем должен стать пользователь от имени которого работает apache, а именно www-data. Предположим что вы положили все сайты в папку /var/www - тогда необходимо выполнить следующие команды
find /var/www -type f -exec chmod 644 {} \;
find /var/www -type d -exec chmod 755 {} \;
chown -R www-data:www-data /var/www