Часто задаваемые вопросы по nginx (FAQ)
Часто задаваемые вопросы по nginx
- Что такое nginx ?
- Где можно скачать nginx ?
- Какие есть fastcgi_params ? (до версии 0.1.29)
- Как задавать expireы контенту ?
- Сборка nginx с системной библиотекой pcre в Fedora Core 2
- Как настроить nginx + fastcgi + php ? (до версии nginx 0.1.29)
- Как настроить nginx + fastcgi + php ? (начиная с nginx 0.1.29)
- Как перехватить 404-ю ошибку от fastcgi сервера ?
- Авторизация по паролю в nginx ?
nginx [engine x] — это http-сервер, который начал разрабатывать
Игорь Сысоев весной 2002 года. Пдробную информацию Вы можете найти на сайте Игоря - http://www.sysoev.ru/nginx/
Самую последнюю версию nginx всегда можно скачать с сайта Игоря Сысоева - http://www.sysoev.ru/nginx/
В fastcgi_params входят следующие параметры:
- remote_addr
- server_name
- server_addr # one more syscall for request
- server_port
- script_name
- server_protocol
- server_software
- gateway_interface
- script_filename
- remote_port
- request_uri
- document_root
- redirect_status; # if php with --enable-cgi-redirect
remote_addr - $_SERVER['REMOTE_ADDR'] - адрес клиента
server_name - $_SERVER['SERVER_NAME'] - имя сервера
server_addr - $_SERVER['SERVER_ADDR'] - адрес сервера
Прим.: лишний syscall для запроса
server_port - $_SERVER['SERVER_PORT'] - порт сервера
script_name - $_SERVER['SCRIPT_NAME'] - имя скрипта - /script.php
server_protocol - $_SERVER['SERVER_PROTOCOL'] - протокол соединения - HTTP/1.0 или HTTP/1.1
server_software - $_SERVER['SERVER_SOFTWARE'] - версия и имя вэб-сервера
gateway_interface - $_SERVER['GATEWAY_INTERFACE'] - версия CGI протокола
script_filename - $_SERVER['SCRIPT_FILENAME'] - имя скрипта с полным путем на диске - /var/site/script.php
SCRIPT_FILENAME - это DOCUMENT_ROOT + SCRIPT_NAME, часто используется скриптами напрямую, а не путем сложения двух других переменных, поэтому был добавлен в nginx.
remote_port - $_SERVER['REMOTE_PORT'] - порт соединения клиента
request_uri - $_SERVER['REQUEST_URI'] - URI запроса
document_root - $_SERVER['DOCUMENT_ROOT'] - корень хоста - /var/site
redirect_status - $_SERVER['REDIRECT_STATUS'] - статус редиректа
Если php собрано с --enable-cgi-redirect
Как задавать expireы контенту ?
В nignx доступны следующие варианты задания expires для контента:
expires [время] - 1s (1 секунда), 1d (1 день и т.п.
expires 0 выдаёт
Date: Fri, 25 Feb 2005 23:56:25 GMT
Expires: Fri, 25 Feb 2005 23:56:25 GMT
Cache-control: max-age=0
expires -1 выдаёт
Date: Fri, 25 Feb 2005 23:56:25 GMT
Expires: Fri, 25 Feb 2005 23:56:24 GMT
Cache-control: no-cache
expires epoch выдаёт
Date: Fri, 25 Feb 2005 23:56:25 GMT
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Cache-control: no-cache
В дистрибутивах Fedora Core 2 на стадии конфигурации, nginx не
находит установленные в системе заголовки от библиотеки pcre.
По этой причине приходится либо собирать с указанием исходников
pcre или просто добавить опцию configure ... --with-cc-opt=" -I
/usr/include/pcre ", именно по этому пути лежат заголовки pcre (должен
быть поставлен пакет pcre-devel) и после этого конфигруатор сборки
nginx найдет необходимые файлы заголовков.
Собирать с системной библиотекой или из исходников - это дело вкуса и стабильности используемого Вами дистрибутива.
Каждому пользователю вэб-сервера nginx приходится столкнуться с тем,
что возникает необходимость в запуске php скриптов под управлением
nginx. В nginx нет поддержки mod_php, как в апаче. Но, nginx перкрасно
работает с любым fastcgi сервером, т.е. поддерживает выполнение любых
fastcgi скриптов при помощи протокола fastcgi.
Чтобы настроить связку nginx+fastcgi+php необходимо :
- запустить php как fastcgi сервер (порт или unix сокет)
- прописать в nginx, что файлы *.php отправлять на fastcgi сервер (пример ниже)
(в обоих случаях надо сначала собрать php с опцией --enable-fastcgi)
- непосредсвенно запуская php с опцией -b IP:PORT ( Bind Path for
external FASTCGI Server mode). В таком случае php можно заставить
соединения только по tcp.
- используя spawn-fcgi+spawn-php.sh из дистрибетива lighttpd
Пример конфигурации для nginx:
(это все прописывается в секцию требуемого server {...})
В данном случае, fastcgi принимает запросы через юникс сокет и все файлы php отправляются к fastcgi серверу
| Code: |
|
Каждому пользователю вэб-сервера nginx приходится столкнуться с тем,
что возникает необходимость в запуске php скриптов под управлением
nginx. В nginx нет поддержки mod_php, как в апаче. Но, nginx перкрасно
работает с любым fastcgi сервером, т.е. поддерживает выполнение любых
fastcgi скриптов при помощи протокола fastcgi. Эта статья описывает,
как настроить такую связку после выхода nginx 0.1.29. Начиная с этой
версии изенились директивы fastcgi.
Чтобы настроить связку nginx+fastcgi+php необходимо :
- запустить php как fastcgi сервер (порт или unix сокет)
- прописать в nginx, чтобы файлы с расширением *.php отправлялись на fastcgi сервер (пример фалйа конфигурации ниже)
(в обоих случаях надо сначала собрать php с опцией --enable-fastcgi)
- непосредсвенно запуская php с опцией -b IP:PORT ( Bind Path for
external FASTCGI Server mode). В таком случае php можно заставить
соединения только по tcp.
- используя spawn-fcgi+spawn-php.sh из дистрибетива lighttpd
Пример конфигурации для nginx (начиная с 0.1.29):
(это все прописывается в секцию требуемого server {...})
В данном случае, fastcgi принимает запросы через юникс сокет и все файлы php отправляются к fastcgi серверу
| Code: |
|
При использовании связки nginx+fastcgi+php возникает необходимость в
перехвате стандартной 404-й ошибки от php fastcgi сервера, так как
стандартная ошибка не очень эстетично выглядит ;) "No input file
specified." и дает лишнюю информацию заинтересованным в вашем passwd
товарищам :). Как говорится, лучшая защита - полное отсутствие
информации у врага, так как голова у него будет занята ;)
Чтобы сделать перехват 404-й, нам нужно указать в конфигурации нашего сервера или location директиву
"error_page 404 /error.html;"
После этого положить наш html файл с сообщеиием об ошибке в корень сайта.
А Вы спросите - как заставить nginx показывать этот файл при 404-й ?
А очень просто, есть такая малоизвестная директива "fastcgi_redirect_errors on;".
Именно с помощью этой директивы, которую мы сейчас прописываем в нашу
location с fastcgi настройками и даст нужный нам эффект. Прописали ? ;)
пробуйте :)
Таким образом можно перехватывать и некоторые другие ошибки, которые можно описать через error_page.
Главный залог успеха с nginx - эксперименты ;), а документация когда-нибудь будет :)
Директивы этого модуля следующие:
auth_basic [<realm>|off]
auth_basic_user_file path/to/file
формат файла с паролями
# comment
login0:password
login1:password:anything
Помните, что пароль должен быть создан с помощью crypt(), другие
алгоритмы не поддерживаются. Т.е. чтобы сделать файл с паролями для
nginx, запускайте htpasswd с ключом '-d' (force CRYPT)
Пример использования:
location /bober/
{
auth_basic "Bobram hoda net v les";
auth_basic_user_file /no_bobers/les/dub/htpasswd;
...
}
