Главная страница
July 3, 2009
ЧАВо
     * tell a friend * print * site map * 
    Новости
    Статьи
    Каталог ссылок
    Связаться с нами
    Каналы новостей
    Форумы nginx.info
    Архив рассылки nginx
    ЧАВо
    Поиск по сайту
    Баннер
    Опросы
Username

Password

Click here to register.

Главная страница > ЧАВо

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

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

Что такое nginx ?

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

[top]

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

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

[top]

Какие есть fastcgi_params ? (до версии 0.1.29)

В 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

 

[top]

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

[top]

Сборка nginx с системной библиотекой pcre в Fedora Core 2

В дистрибутивах Fedora Core 2 на стадии конфигурации,  nginx не находит установленные в системе заголовки  от библиотеки pcre.
По этой причине приходится  либо собирать с указанием исходников pcre или просто добавить опцию configure ... --with-cc-opt=" -I /usr/include/pcre ", именно по этому пути лежат заголовки pcre (должен быть поставлен пакет pcre-devel) и после этого конфигруатор сборки nginx найдет необходимые файлы заголовков.

Собирать с системной библиотекой или из исходников - это дело вкуса и стабильности используемого Вами дистрибутива.

[top]

Как настроить nginx + fastcgi + php ? (до версии nginx 0.1.29)

Каждому пользователю вэб-сервера nginx приходится столкнуться с тем, что возникает необходимость в запуске php скриптов под управлением nginx. В nginx нет поддержки mod_php, как в апаче. Но, nginx перкрасно работает с любым fastcgi сервером, т.е. поддерживает выполнение любых fastcgi скриптов при помощи протокола 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:
(это все прописывается в секцию требуемого server {...})
В данном случае, fastcgi принимает запросы через юникс сокет и все файлы php отправляются к fastcgi серверу

Code:

location ~* ^.+\.(php)$ {
root /var/www/domain/root;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/usr/local/fastcgi/fcgi; # сокет
fastcgi_root  /var/www/domain/root;
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_params remote_addr
server_name
server_addr
server_port
script_name
server_protocol
server_software
gateway_interface
script_filename
remote_port
request_uri
document_root
redirect_status;
}


[top]

Как настроить 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 серверу

Code:

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
# производится дополнительный системный вызов, без нужды лучше не использовать,
# так как операциz ресурсоемкая.
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;
}

[top]

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

[top]

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

[top]

Copyright 2004-2005 Encrypted-Life.Net. All rights reserved.

powered by REMOTE ADMIN SERVICE