Nginx — различия между версиями
Kirill (обсуждение | вклад) (→PHP) |
Kirill (обсуждение | вклад) (→Файл конфигурации) |
||
Строка 6: | Строка 6: | ||
== Файл конфигурации == | == Файл конфигурации == | ||
Настройки хранятся в файле '''/etc/nginx/nginx.conf'''. | Настройки хранятся в файле '''/etc/nginx/nginx.conf'''. | ||
+ | <pre>## Пользователь, от имени которого запускается nginx. | ||
+ | user www-data; | ||
− | + | ## Количество рабочих процессов, рекомендуется устанавливать по числу ядер. | |
− | + | worker_processes auto; | |
− | + | ||
− | + | ## Файл с ID процесса. | |
− | + | pid /run/nginx.pid; | |
− | + | ||
− | + | ## Директива уменьшает разрешение времени в рабочих процессах, за счёт чего уменьшается число системных вызовов gettimeofday(). | |
− | + | timer_resolution 100ms; | |
− | + | ||
− | + | ||
− | + | events { | |
− | + | ## Максимальное число подключений к серверу на один рабочий процесс. | |
− | + | worker_connections 768; | |
− | + | ||
− | + | ## Эффективный метод обработки соединений, используемый в Linux 2.6+ | |
− | + | use epoll; | |
− | + | ||
− | + | ## Если выключен, то рабочий процесс за один раз принимает только одно новое соединение. | |
− | + | multi_accept on; | |
− | + | } | |
− | + | ||
− | + | ||
− | + | http { | |
− | + | #### | |
− | + | ## Основные настройки. | |
− | + | #### | |
− | + | ||
− | + | ## Разрешить использовать sendfile(). | |
− | + | sendfile on; | |
− | + | ||
− | + | ## Разрешить использование параметра сокета TCP_NOPUSH во FreeBSD или TCP_CORK в Linux. | |
− | + | ## Параметр включается только при использовании sendfile. | |
− | + | tcp_nopush on; | |
− | + | ||
− | + | ## Разрешить использование параметра TCP_NODELAY. | |
− | + | ## Параметр включаются только при переходе соединения в состояние keep-alive. | |
− | + | tcp_nodelay on; | |
− | + | ||
− | + | ## Таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера. | |
− | + | ## Значение 0 запрещает keep-alive соединения с клиентами. | |
− | + | keepalive_timeout 65; | |
− | + | ||
− | + | ## Максимальный размер хэш-таблиц типов. | |
− | + | types_hash_max_size 2048; | |
− | + | ||
− | + | ## Запретить выдавать версию nginx’а в сообщениях об ошибках и в поле “Server” заголовка ответа. | |
− | + | server_tokens off; | |
− | + | ||
− | + | ## Задать размер корзины в хэш-таблицах имён серверов. | |
− | + | ## Значение по умолчанию зависит от размера строки кэша процессора. | |
− | + | # server_names_hash_bucket_size 64; | |
− | + | ||
− | + | ## Разрешить или запретить использовать в абсолютных перенаправлениях, выдаваемых nginx’ом, основное имя сервера, задаваемое директивой server_name. | |
− | + | ## Если использование основного имени сервера запрещено, то используется имя, указанное в поле “Host” заголовка запроса. | |
− | + | ## Если же этого поля нет, то используется IP-адрес сервера. | |
− | + | # server_name_in_redirect off; | |
− | + | ||
− | + | ## Подключить описание MIME-типов. | |
− | + | include /etc/nginx/mime.types; | |
− | + | ||
− | + | ## MIME-тип ответов по умолчанию. | |
− | + | default_type application/octet-stream; | |
− | + | ||
− | + | ||
− | + | #### | |
− | + | ## Настройки SSL | |
− | + | #### | |
− | + | ||
− | + | ## Разрешить указанные протоколы. | |
− | + | ## Параметры TLSv1.1 и TLSv1.2 работают только при использовании библиотеки OpenSSL версии 1.0.1 и выше. | |
− | + | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE | |
− | + | ||
− | + | ## Указать, чтобы при использовании протоколов SSLv3 и TLS серверные шифры были более приоритетны, чем клиентские. | |
− | + | ssl_prefer_server_ciphers on; | |
− | + | ||
− | + | ||
− | + | #### | |
− | + | ## Настройки логов. | |
− | + | #### | |
− | + | ||
− | + | ## Задать путь, формат и настройки буферизованной записи в лог. | |
− | + | ## http://nginx.org/ru/docs/http/ngx_http_log_module.html#access_log | |
− | + | access_log /var/log/nginx/access.log; | |
− | + | ||
− | + | ## Настроить запись в лог. | |
− | + | ## На одном уровне может использоваться несколько логов (1.5.2). | |
− | + | ## http://nginx.org/ru/docs/ngx_core_module.html#error_log | |
− | + | error_log /var/log/nginx/error.log; | |
− | + | ||
− | + | ||
− | + | #### | |
− | + | ## Настройки сжатия. | |
− | + | #### | |
− | + | ||
− | + | ## Разрешить сжатие ответа методом gzip. | |
− | + | gzip on; | |
− | + | ||
− | + | ## Запретить сжатие ответа методом gzip для запросов с полями заголовка “User-Agent”, совпадающими с заданными регулярными выражениями. | |
− | + | gzip_disable "msie6"; | |
− | + | ||
− | + | ## Разрешить или запретить выдавать в ответе поле заголовка “Vary: Accept-Encoding”, если активны директивы gzip, gzip_static или gunzip. | |
− | + | # gzip_vary on; | |
− | + | ||
− | + | ## Разрешить или запретить сжатие ответа методом gzip для проксированных запросов в зависимости от запроса и ответа. | |
− | + | # gzip_proxied any; | |
− | + | ||
− | + | ## Степень сжатия ответа методом gzip. | |
− | + | ## Допустимые значения находятся в диапазоне от 1 до 9. | |
− | + | # gzip_comp_level 6; | |
− | + | ||
+ | ## Число и размер буферов, в которые будет сжиматься ответ. | ||
+ | # gzip_buffers 16 8k; | ||
+ | |||
+ | ## Минимальная HTTP-версия запроса, необходимую для сжатия ответа. | ||
+ | # gzip_http_version 1.1; | ||
+ | |||
+ | ## Разрешить сжатие ответа методом gzip для указанных MIME-типов в дополнение к “text/html”. | ||
+ | # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; | ||
+ | |||
+ | |||
+ | #### | ||
+ | ## Настройки виртуальных хостов. | ||
+ | #### | ||
+ | |||
+ | ## Подключить дополнительные файлы настроек. | ||
+ | include /etc/nginx/conf.d/*.conf; | ||
+ | |||
+ | ## Подключить настройки активных сайтов. | ||
+ | include /etc/nginx/sites-enabled/*; | ||
+ | }</pre> | ||
Для учета изменений настроек нужно перезагрузить службу | Для учета изменений настроек нужно перезагрузить службу |
Версия 15:09, 19 января 2017
В этой статье описывается установка и настройка веб-сервера nginx для работы с PHP-FPM, node.js и MySQL в операционной системе Ubuntu.
Содержание
Установка
# apt-get install nginx
Файл конфигурации
Настройки хранятся в файле /etc/nginx/nginx.conf.
## Пользователь, от имени которого запускается nginx. user www-data; ## Количество рабочих процессов, рекомендуется устанавливать по числу ядер. worker_processes auto; ## Файл с ID процесса. pid /run/nginx.pid; ## Директива уменьшает разрешение времени в рабочих процессах, за счёт чего уменьшается число системных вызовов gettimeofday(). timer_resolution 100ms; events { ## Максимальное число подключений к серверу на один рабочий процесс. worker_connections 768; ## Эффективный метод обработки соединений, используемый в Linux 2.6+ use epoll; ## Если выключен, то рабочий процесс за один раз принимает только одно новое соединение. multi_accept on; } http { #### ## Основные настройки. #### ## Разрешить использовать sendfile(). sendfile on; ## Разрешить использование параметра сокета TCP_NOPUSH во FreeBSD или TCP_CORK в Linux. ## Параметр включается только при использовании sendfile. tcp_nopush on; ## Разрешить использование параметра TCP_NODELAY. ## Параметр включаются только при переходе соединения в состояние keep-alive. tcp_nodelay on; ## Таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера. ## Значение 0 запрещает keep-alive соединения с клиентами. keepalive_timeout 65; ## Максимальный размер хэш-таблиц типов. types_hash_max_size 2048; ## Запретить выдавать версию nginx’а в сообщениях об ошибках и в поле “Server” заголовка ответа. server_tokens off; ## Задать размер корзины в хэш-таблицах имён серверов. ## Значение по умолчанию зависит от размера строки кэша процессора. # server_names_hash_bucket_size 64; ## Разрешить или запретить использовать в абсолютных перенаправлениях, выдаваемых nginx’ом, основное имя сервера, задаваемое директивой server_name. ## Если использование основного имени сервера запрещено, то используется имя, указанное в поле “Host” заголовка запроса. ## Если же этого поля нет, то используется IP-адрес сервера. # server_name_in_redirect off; ## Подключить описание MIME-типов. include /etc/nginx/mime.types; ## MIME-тип ответов по умолчанию. default_type application/octet-stream; #### ## Настройки SSL #### ## Разрешить указанные протоколы. ## Параметры TLSv1.1 и TLSv1.2 работают только при использовании библиотеки OpenSSL версии 1.0.1 и выше. ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ## Указать, чтобы при использовании протоколов SSLv3 и TLS серверные шифры были более приоритетны, чем клиентские. ssl_prefer_server_ciphers on; #### ## Настройки логов. #### ## Задать путь, формат и настройки буферизованной записи в лог. ## http://nginx.org/ru/docs/http/ngx_http_log_module.html#access_log access_log /var/log/nginx/access.log; ## Настроить запись в лог. ## На одном уровне может использоваться несколько логов (1.5.2). ## http://nginx.org/ru/docs/ngx_core_module.html#error_log error_log /var/log/nginx/error.log; #### ## Настройки сжатия. #### ## Разрешить сжатие ответа методом gzip. gzip on; ## Запретить сжатие ответа методом gzip для запросов с полями заголовка “User-Agent”, совпадающими с заданными регулярными выражениями. gzip_disable "msie6"; ## Разрешить или запретить выдавать в ответе поле заголовка “Vary: Accept-Encoding”, если активны директивы gzip, gzip_static или gunzip. # gzip_vary on; ## Разрешить или запретить сжатие ответа методом gzip для проксированных запросов в зависимости от запроса и ответа. # gzip_proxied any; ## Степень сжатия ответа методом gzip. ## Допустимые значения находятся в диапазоне от 1 до 9. # gzip_comp_level 6; ## Число и размер буферов, в которые будет сжиматься ответ. # gzip_buffers 16 8k; ## Минимальная HTTP-версия запроса, необходимую для сжатия ответа. # gzip_http_version 1.1; ## Разрешить сжатие ответа методом gzip для указанных MIME-типов в дополнение к “text/html”. # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; #### ## Настройки виртуальных хостов. #### ## Подключить дополнительные файлы настроек. include /etc/nginx/conf.d/*.conf; ## Подключить настройки активных сайтов. include /etc/nginx/sites-enabled/*; }
Для учета изменений настроек нужно перезагрузить службу
# service nginx reload
Ссылки
- Основная функциональность - nginx.org
- Модуль ngx_http_core_module - nginx.org
- Модуль ngx_http_gzip_module - nginx.org
Виртуальные хосты
Виртуальные хосты используются для описания параметров отдельных сайтов, которые обслуживает nginx. По-умолчанию, настройки хранятся в отдельных файлах в директории /etc/nginx/sites-available/, а для активации хоста нужно создать символьную ссылку в директории /etc/nginx/sites-enabled/ на соответствующий файл настроек
# ln -s /etc/nginx/sites-available/{имя сайта} /etc/nginx/sites-enabled/{имя сайта}
и перезагрузить службу
# service nginx reload
Один файл может содержать описание для нескольких сайтов, каждое должно находиться логическом блоке
server { # Обрабатываемый порт. listen 80; # Обрабатываемый порт для определенного домена. #listen {имя домена} 8080; # Обрабатываемый порт для ipv6. #listen [::]:80 [{имя домена}] ipv6only=on; # Директория с файлами сайта. root /var/www/{имя сайта}/www; # Для того, чтобы сайт был доступен по адресам http://{имя домена 1}/ и http://{имя домена 2}/. server_name {имя домена 1} {имя домена 2}; # Файл лога для проблем доступа. access_log /var/www/{имя сайта}/access.log; # Файл лога для ошибок. error_log /var/www/{имя сайта}/error.log; # Подключение шаблона со стандартными настройками. include /etc/nginx/templates/default; # Страница для ошибки 404. #error_page 404 /404.html; # Перенаправление при ошибках на статическую страницу /50x.html. #error_page 500 502 503 504 /50x.html; #location = /50x.html { # root /var/www/{имя сайта}/www; #} }
Шаблоны
Благодаря директиве include в блок настроек виртуального хоста можно включать внешние файлы. Шаблоны принято использовать для описания общих настроек. Файлы шаблонов, как правило, сохраняются в директорию /etc/nginx/templates/.
Например, стандартные настройки HTTP-хоста в файле /etc/nginx/templates/default
# Файлы, открываемые при пустом пути, в порядке приоритета. index index.php index.html index.htm; location / { # Сначала запрос обрабатывается как файл, потом как директория, потом происходит переход на страницу 404. try_files $uri $uri/ =404; # Раскоментировать для использования naxsi в этой области. #include /etc/nginx/naxsi.rules } # Закрыть доступ к файлами .htaccess и .htpassword. location ~ /\.ht { deny all; } # Отключить логи, связанные с отсутствием иконки сайта. location = /favicon.ico { log_not_found off; access_log off; } # Доступ к файлу с настройками для поисковых роботов. location = /robots.txt { allow all; log_not_found off; access_log off; }
PHP
Для работы с PHP-FPM достаточно создать шаблон /etc/nginx/templates/php:
# Адрес FastCGI-сервера (имя или адрес и порт или путь к UNIX-сокету). # Указывается в настройках виртуального хоста. #fastcgi_pass # Имя файла, который при создании переменной $fastcgi_script_name будет добавляться после URI, если URI заканчивается слэшом. fastcgi_index index.php; # Передавать ли клиенту ответы FastCGI-сервера с кодом больше либо равным 300. #fastcgi_intercept_errors on; # Добавить параметры из /etc/nginx/fastcgi_param. include fastcgi_params; # Путь к скрипту, который будет передан в PHP-FPM. # При использовании chroot окружения нужно указывать относительный путь. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # Закрывать ли соединение с FastCGI-сервером в случае, если клиент закрыл соединение, не дождавшись ответа. fastcgi_ignore_client_abort off;
и добавить в настройки виртуального хоста блок ({путь к файлу сокета} нужно заменить своим значением)
# Настройки обработки PHP-скриптов. location ~ \.php$ { # Подключение шаблона с настройками PHP. include /etc/nginx/templates/php; # Путь к UNIX-сокету PHP-FPM. fastcgi_pass unix:{путь к файлу сокета} }
С помощью директивы fastcgi_param и параметра PHP_VALUE можно изменять настройки службы PHP. Если использовать параметр PHP_ADMIN_VALUE, то указанная настройка не сможет быть изменена скриптом.
Например ({адрес почты} и {имя сайта} нужно заменить своими значениями)
# Путь к sendmail и параметр, указывающий адрес почты администратора сайта. fastcgi_param PHP_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f{адрес почты}"; # Директории с файлами сайта, файлами сессий и временными файлами. fastcgi_param PHP_ADMIN_VALUE "open_basedir = /var/www/{имя сайта}/:/tmp/:/"; # Ограничение памяти для выполнения скриптов. fastcgi_param PHP_VALUE "memory_limit = 256M"; # Максимальное время в секундах, в течение которого скрипт должен полностью загрузиться. fastcgi_param PHP_VALUE "max_execution_time = 60";
Если при выполнении скриптов возникает ошибка 502, то может помочь добавление
fastcgi_buffer_size 16k; fastcgi_buffers 4 16k;
в настройки виртуального сервера.
node.js
Для работы с сервером, основанным на node.js достаточно создать шаблон /etc/nginx/templates/nodejs_{имя сервера} (пример для сервера, основанного на Express; {имя сервера}, {путь к корневой директории проекта}, {номер порта} и {путь к unix-сокету} нужно заменить подходящими значениями):
# Директория с файлами сайта. root {путь к корневой директории проекта}/public; # Файл лога для проблем доступа. access_log {путь к корневой директории проекта}/access.log; # Файл лога для ошибок. error_log {путь к корневой директории проекта}/error.log; # Передача node.js обработки запросов не статического контента. location ~ ^/(?!css|images|js|favicon.ico) { # Для сервера, слушающего порт. # proxy_pass http://localhost:{номер порта}; # Для сервера, слушающего unix-сокет. proxy_pass http://unix:{путь к unix-сокету}:$uri$is_args$args; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } # Отключить логи, связанные с отсутствием иконки сайта. location = /favicon.ico { log_not_found off; access_log off; } # Доступ к файлу с настройками для поисковых роботов. location = /robots.txt { allow all; log_not_found off; access_log off; }
и подключить этот файл в настройках каждого виртуального хоста, работающего с рассматриваемым сервером node.js.
Ссылки
- Модуль ngx_http_fastcgi_module - nginx.org
- PHP: Настройка во время выполнения - Manual
- Установка параметров php через Nginx