- * Что такое 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;
…
}