Nginx - свободный высокопроизводительный веб-сервер и обратный прокси-сервер с открытым исходным кодом, а также IMAP/POP3 прокси-сервер. Игорь Сысоев начал разработку Nginx в 2002 году, первый публичный релиз был выпущен в 2004 году. Nginx в настоящее время используют около 7,65% всех доменов по всему миру по рейтингу Netcraft.
Nginx известен своей высокой производительностью, стабильностью, богатым набором функций, простой конфигурацией, и низким потреблением ресурсов. В отличие от традиционных серверов, Nginx не зависит от потоков для обработки запросов. Вместо этого он использует гораздо более масштабируемую управляемую событиями (асинхронную) архитектуру. Эта архитектура использует небольшие, но что более важно, предсказуемые объемы памяти под нагрузкой.
Установка Nginx
Для некоторых версий Linux добавьте одно из хранилищ с этой страницы в соответствии с вашей ОС. Этот шаг позволит вам устанавливать более новые версии Nginx, нежели в официальных хранилищах.
Установка Nginx в CentOS
Из-под привелегированного пользователя вам нужно отдать сл. команду:
yum install nginx
После установки вам нужно его запустить
/etc/init.d/nginx start
или
service nginx start
Так же рекомендуется включить этот сервис в автозагрузку
chkconfig nginx on
Установка Nginx в Ubuntu
От привелегированного пользователяч вам нужно отдать сл. команду:
apt-get install nginx
Как только сервис будет установлен в вашу систему, его можно включить
/etc/init.d/nginx start
Установка Nginx в FreeBSD
Установка из портов:
1 2 |
|
После этого возникнет окно с выбором модулей, среди которых вам нужно будет выбрать необходимые
- Продолжение темы на этой странице: Установка NGINX и PHP в FreeBSD
Установка Nginx в Solaris из исходников
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Установка Nginx в Windows
Необходимо скачать zip-архив. Он доступен на этой странице. Далее в командной строке нужно перейти в место его сохранения, например, в корень диска C:
cd c:\
Разархивировать полученный файл
unzip nginx.zip
Перейти внутрь каталога
cd nginx
Запустить сервер
start nginx
Если nginx не запустился, нужно смотреть причины в error_log. Если же error_log не создался, то об этом сообщается в Event Log. В настоящее время данное ПО не работает в Windows как сервис.
Настройка Nginx
Настройка Nginx для работы с Apache
Для того, чтобы Nginx мог работать с другими веб-сервисами, достаточно прописать одну строку в конфигурацию.
proxy_pass IP сервера:PORT
Например, у нас есть сайт wikiadmin.net, на нем apache, отдающий контент на порт 8080. Надо, чтобы nginx отдавал контент wikiadmin.net на 80 порту:
1 2 3 4 5 6 |
|
В apache можно отключить keep alive, так как nginx с ним общается через http/1.0 и keepalive не поддерживается. При отключении может сильно уменьшиться кол-во процессов и снизиться нагрузка на сервер.
Отдаём статику без участия Apache
Зачем просить Apache отдавать статику, если Nginx с этим справится быстрее? Добавляем в конфиг, например, это:
1 2 3 4 5 6 |
|
После строки root у нас сказано, чтобы браузеры кешировали информацию и в следующий раз брали из локального кеша, не прося их у сервера снова.
Ошибка 504 и ругань про timeout
В данном случае можно увеличить таймаут, добавив пару строк:
1 2 |
|
Если взять верхний пример, получится так:
1 2 3 4 5 6 7 8 |
|
Проблема, когда в логах apache только адрес сервера nginx
Значит просто не установлен модуль apache mod_rpaf и (или) не настроен Nginx для передачи IP. Итак, порядок действий в CentOS5:
- Установка хранилища, откуда можно установить модуль mod_rpaf
rpm
-ihv
http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm
- Отключение этого хранилища, редактируя файл /etc/yum.repos.d/centalt.repo и заменив 1 на 0 в строке
enabled=0
- Установка mod_rpaf
yum -y --enablerepo=CentALT install mod_rpaf
- добавляем в /etc/httpd/conf/httpd.conf следующее:
1 2 3 4 5 6 |
|
Учтите, что может потребоваться заменить 127.0.0.1 на тот IP, который использует Nginx. В логах, по сути, только он и есть.
- Перезгрузите apache
/etc/init.d/httpd restart
- В конфигурации nginx должны быть строки:
1 2 3 |
|
Например:
1 2 3 4 5 6 7 |
|
Настройка Nginx для phpBB
Столкнулся с тем, что даже после начала работы форума невозможно было подгрузить аватарки, заполнить личную информацию, не работало удаление…. В конечном итоге все заработало, вот рабочий конфиг:
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
|
Настройка Nginx для Mediawiki
Конфигурация нгинкс для вики ресурсов. Эта конфигурация проверена и в данный момент работает для wikiadmin.net
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
Настройка Nginx для Wordpress
Это рабочая конфигурация для вордпресс, проверено на нескольких серверах
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
включаем сжатие GZIP
Для этого достаточно добавить в конфиг сайта следующее:
1 2 3 4 5 6 7 8 9 |
|
gzip_static on подразумевает, что у вас могут быть сжатые копии некоторых файлов. Например, CSS, JS, GIF и так далее. Сделать их можно следующим образом:
for i in `
find
` /var/www/site* -type f -name '*.css'
; do echo $i; gzip -c -9 $i > $i.gz; done; `
for i in `
find
` /var/www/site* -type f -name '*.js'
; do echo $i; gzip -c -9 $i > $i.gz; done; `
for i in `
find
/var/www/site* -type f -name '*.gif'`; do echo $i; gzip -c -9 $i > $i.gz; done;
То есть меняется только расширение. GIF, PNG тоже можно сжать, если это элементы верстки страницы и редко изменяются.
Включаем кеширование
Вставляем что-то типа нижеприведённого в nginx.conf до каких-либо include в секцию http:
`proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=cache:30m max_size=1G;
`proxy_temp_path /var/lib/nginx/proxy 1 2;
`proxy_ignore_headers Expires Cache-Control;
`proxy_cache_use_stale error timeout invalid_header http_502;
`proxy_cache_bypass $cookie_session;
proxy_no_cache $cookie_session;
Создаём каталоги:
`mkdir -p /var/lib/nginx/cache
`chown -R www-data /var/lib/nginx/cache
chmod 700 /var/lib/nginx/cache
Секция server в конфиге будет выглядеть примерно так (для wordpress):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Показать содержимое директории (или папки)
1 2 3 |
|
Настройка мультисабдомена в Nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Где:
- IP - ваш ip адрес сервера;
- wikiadmin.net - ваш домен;
- /var/www - путь к каталогу с сайтами.
То есть получаем:
- http://wikiadmin.net - оказываемся в /var/www
- http://www.wikiadmin.net - оказываемся в /var/www
- http://test.wikiadmin.net - оказываемся в /var/www/test
Блокировка использования контента сторонним сервисом (хотлинк)
Как заблокировать контент (картинки и так далее), чтобы их не использовали на другом сайте.
1 2 3 4 5 6 |
|
www.wikiadmin.net wikiadmin.net - это ваши домены, для которых медиаконтент доступен.
Вместо return 403; вы можете использовать любой свой баннер:
rewrite ^/images/uploads.*\.(gif|jpg|jpeg|png)$ http://www.wikiadmin.net/banned.jpg last
Ошибка 413 Request Entity Too Large
Эта ошибка возникает, когда вы загружаете слишком большой файл. Добавьте в секцию http (в файл конфигурации nginx.conf) параметр и желаемый размер. Например, разрешим отправлять файлы до 100МБ:
client_max_body_size 100m;
И перезагрузите nginx.
Ошибка 499 в access.log
Nginx закрывал соединение без отправки запроса апачу. Исправляется добавлением
proxy_ignore_client_abort on
По умолчанию данный параметр равен off.
Установка spawn-fcgi для работы php в CentOS
Для начала нужно установить spawn-fcgi, который доступен в хранилищах:
yum install spawn-fcgi
Далее загрузите init-скрипт. Он доступен на странице bash.cyberciti.biz. Вот листинг скрипта самого скрипта, если он будет недоступен на странице:
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
|
Сохраните его как /etc/init.d/php_cgi и сделайте исполняемым. После этого запустите скрипт:
/etc/init.d/php_cgi start
И проверьте, работает ли он:
netstat -tulpn |
grep
:9000
Вы должны будете увидеть такой ответ:
TCP
0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
Скрипт готов к работе.
spawn-fcgi падает
Замечено, что этот процесс иногда падает. Я решил этот вопрос следующим образом…. У меня раз в минуту один скрипт проверяет наличие открытого 9000 порта (как это написано на этой странице). Я просто добавил строчку запуска процесса и получилось нечто подобное:
1 2 3 4 5 6 7 8 9 10 11 |
|
Пробовал убить процесс вручную, в течении минуты получал сообщение, что порт down и процесс снова появлялся. Конечно же, это не есть хорошо, т.к. непонятно, почему spawn падает. Но этот вариант может спасти вас на некоторое время.