Часто задаваемые вопросы по nginx (FAQ)


  • * Что такое nginx ?
  • * Где можно скачать nginx ?
  • * Как задавать expireы контенту ?
  • * Как настроить nginx + fastcgi + php ? (начиная с nginx 0.1.29)
  • * Как перехватить 404-ю ошибку от fastcgi сервера ?
  • * Авторизация по паролю в nginx ?

Данный FAQ был взят из кеша гугла сайта nginx.info, который судя по всему закрылся, ну и убрал часть неактуальной информации.

Что такое nginx ?

nginx [engine x] — это http-сервер, который  начал разрабатывать Игорь Сысоев весной 2002 года. Пдробную информацию Вы можете найти на сайте Игоря – http://www.sysoev.ru/nginx/

Где можно скачать nginx ?

Самую последнюю версию nginx всегда можно скачать с сайта Игоря Сысоева – http://www.sysoev.ru/nginx/

Как задавать 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

Как настроить nginx + fastcgi + php ? (начиная с nginx 0.1.29)

Каждому пользователю вэб-сервера 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 можно запустить, как 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 серверу

location ~* ^.+\.(php)$ {
root /var/www/domain/root;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/usr/local/fastcgi/fcgi; # сокет
fastcgi_index index.php;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_header_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_busy_buffers_size 32k;
fastcgi_temp_file_write_size 32k;
#fastcgi_temp_path /var/tmp;
#fastcgi_next_upstream error timeout invalid_header http_500 http_404;
#fastcgi_next_upstream error timeout;
fastcgi_x_powered_by off; # default on
fastcgi_redirect_errors on; # для отображения своих страниц об ошибках
fastcgi_x_powered_by off; # убираем отображение версии php, X-Powered..
fastcgi_param   DOCUMENT_ROOT   /path/to/host_root;
fastcgi_param   SCRIPT_FILENAME /path/to/host_root$fastcgi_script_name;
fastcgi_param   PATH_TRANSLATED /path/to/host_root$fastcgi_script_name;
fastcgi_param   SCRIPT_NAME  $fastcgi_script_name;
fastcgi_param   QUERY_STRING    $query_string;
fastcgi_param   CONTENT_TYPE    $content_type;
fastcgi_param   CONTENT_LENGTH  $content_length;
fastcgi_param   REDIRECT_STATUS 200; # если php собрано с опцией –enable-forece-cgi-redirect
# производится дополнительный системный вызов, без нужды лучше не использовать,
# так как операция ресурсоемкая.
fastcgi_param   SERVER_ADDR     $server_addr;
fastcgi_param   SERVER_PORT     $server_port;
fastcgi_param   SERVER_PROTOCOL $server_protocol;
fastcgi_param   SERVER_SOFTWARE “nginx/0.1.30″;
fastcgi_param   GATEWAY_INTERFACE       “CGI/1.1″;
fastcgi_param   SERVER_NAME     $server_name;
fastcgi_param   REQUEST_URI     $request_uri;
fastcgi_param   REQUEST_METHOD  $request_method;
fastcgi_param   REMOTE_USER     $remote_user;
fastcgi_param   REMOTE_ADDR     $remote_addr;
fastcgi_param   REMOTE_PORT     $remote_port;
}

Как перехватить 404-ю ошибку от fastcgi сервера ?

При использовании связки 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 – эксперименты ;) , а документация когда-нибудь будет :)

Авторизация по паролю в 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;

}

  1. No comments yet.
(will not be published)
  1. No trackbacks yet.