Nginx — различия между версиями
Kirill (обсуждение | вклад) |
Kirill (обсуждение | вклад) |
||
| (не показаны 24 промежуточные версии этого же участника) | |||
| Строка 1: | Строка 1: | ||
| − | В этой статье описывается установка и настройка веб-сервера nginx для работы с [[PHP]] и [[MySQL]] в операционной системе [[Ubuntu]]. | + | В этой статье описывается установка и настройка веб-сервера nginx для работы с [[PHP-FPM]], [[node.js]] и [[MySQL]] в операционной системе [[Ubuntu]]. |
== Установка == | == Установка == | ||
| Строка 5: | Строка 5: | ||
== Файл конфигурации == | == Файл конфигурации == | ||
| − | Настройки хранятся в файле | + | Настройки хранятся в файле '''/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> | ||
| + | |||
| + | Для учета изменений настроек нужно перезагрузить службу | ||
| + | sudo service nginx reload | ||
| + | |||
| + | Ссылки | ||
| + | * [http://nginx.org/ru/docs/ngx_core_module.html Основная функциональность - nginx.org] | ||
| + | * [http://nginx.org/ru/docs/http/ngx_http_core_module.html Модуль ngx_http_core_module - nginx.org] | ||
| + | * [http://nginx.org/ru/docs/http/ngx_http_gzip_module.html Модуль ngx_http_gzip_module - nginx.org] | ||
| + | |||
| + | == Виртуальные хосты == | ||
| + | Виртуальные хосты используются для описания параметров отдельных сайтов, которые обслуживает nginx. | ||
| + | По-умолчанию, настройки хранятся в отдельных файлах в директории '''/etc/nginx/sites-available/''', | ||
| + | а для активации хоста нужно создать символьную ссылку в директории '''/etc/nginx/sites-enabled/''' на соответствующий файл настроек | ||
| + | sudo ln -s /etc/nginx/sites-available/{имя сайта} /etc/nginx/sites-enabled/{имя сайта} | ||
| + | и перезагрузить службу | ||
| + | sudo service nginx reload | ||
| + | |||
| + | Один файл может содержать описание для нескольких сайтов, каждое должно находиться логическом блоке | ||
| + | server { | ||
| + | ## Для того, чтобы сайт был доступен по адресам <nowiki>http://{имя домена 1}/</nowiki> и <nowiki>http://{имя домена 2}/</nowiki>. | ||
| + | server_name {имя домена 1} {имя домена 2}; | ||
| − | ## | + | ## Обрабатываемый порт. |
| − | # | + | listen 80; |
| − | ## | + | ## Обрабатываемый порт для определенного домена. |
| + | #listen {имя домена} 8080; | ||
| + | ## Обрабатываемый порт для ipv6. | ||
| + | #listen [::]:80 [{имя домена}] ipv6only=on; | ||
| − | # | + | ## Директория с файлами сайта. |
| − | + | root /var/www/{имя сайта}/www; | |
| − | + | ||
| − | + | ||
| + | ## Файл лога для проблем доступа. | ||
| + | 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; | ||
| + | #} | ||
| + | } | ||
| + | Если <code>server_name</code> совпадает с именем сайта, то можно использовать макрос <code>$server_name</code> для подстановки вместо <code>{имя сайта}</code>. | ||
| + | |||
| + | === Шаблоны === | ||
| + | Благодаря директиве <tt>include</tt> в блок настроек виртуального хоста можно включать внешние файлы. | ||
| + | Шаблоны принято использовать для описания общих настроек. | ||
| + | Файлы шаблонов, как правило, сохраняются в директорию '''/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/ | + | #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; | ||
} | } | ||
| − | + | # Активировать кэширование. | |
| − | # | + | location ~* \.(ico|css|js)$ { |
| + | expires 7d; | ||
| + | add_header Pragma public; | ||
| + | add_header Cache-Control "public, must-revalidate, proxy-revalidate"; | ||
| + | } | ||
| − | == PHP == | + | === 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; | ||
| + | и добавить в настройки виртуального хоста блок (<tt>{путь к файлу сокета}</tt> нужно заменить своим значением) | ||
| + | ## Настройки обработки PHP-скриптов. | ||
| + | location ~ \.php$ { | ||
| + | ## Подключение шаблона с настройками PHP. | ||
| + | include /etc/nginx/templates/php; | ||
| + | |||
| + | ## Путь к UNIX-сокету PHP-FPM. | ||
| + | fastcgi_pass unix:{путь к файлу сокета} | ||
| + | } | ||
| + | |||
| + | С помощью директивы <tt>fastcgi_param</tt> и параметра <tt>PHP_VALUE</tt> можно изменять настройки службы PHP. | ||
| + | Если использовать параметр <tt>PHP_ADMIN_VALUE</tt>, то указанная настройка не сможет быть изменена скриптом. | ||
| + | |||
| + | Например (<tt>{адрес почты}</tt> и <tt>{имя сайта}</tt> нужно заменить своими значениями) | ||
| + | ## Путь к 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_{имя сервера}''' (пример для сервера, основанного на [[node.js/Express|Express]]; <tt>{имя сервера}</tt>, <tt>{путь к корневой директории проекта}</tt>, <tt>{номер порта}</tt> и {путь к unix-сокету} нужно заменить подходящими значениями): | ||
| + | <pre>## Директория с файлами сайта. | ||
| + | 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; | ||
| + | }</pre> | ||
| + | и подключить этот файл в настройках каждого виртуального хоста, работающего с рассматриваемым сервером [[node.js]]. | ||
| + | |||
| + | === Ссылки === | ||
| + | * [http://nginx.org/ru/docs/http/ngx_http_fastcgi_module.html Модуль ngx_http_fastcgi_module - nginx.org] | ||
| + | * [http://php.net/manual/ru/info.configuration.php PHP: Настройка во время выполнения - Manual] | ||
| + | * [https://modx.pro/hosting/797-set-php-options-through-nginx/ Установка параметров php через Nginx] | ||
== Ссылки == | == Ссылки == | ||
| − | * [http:// | + | * [http://habrahabr.ru/post/164401/ Nginx+php-fpm+perl под Debian Squeeze] |
| − | + | ||
| − | + | ||
* [http://howitmake.ru/blog/ubuntu/80.html Настройка Nginx с поддержкой PHP-FPM в Ubuntu 12.04 (включает: Nginx, php-fpm, MySQL, Memcached)] | * [http://howitmake.ru/blog/ubuntu/80.html Настройка Nginx с поддержкой PHP-FPM в Ubuntu 12.04 (включает: Nginx, php-fpm, MySQL, Memcached)] | ||
| − | |||
* [http://manualpages.pro/node/31 Полноценный http-сервер без Apache, на nginx+php-fpm под Debian Squeeze] | * [http://manualpages.pro/node/31 Полноценный http-сервер без Apache, на nginx+php-fpm под Debian Squeeze] | ||
[[Категория:База знаний]] | [[Категория:База знаний]] | ||
[[Категория:Linux]][[Категория:Ubuntu]] | [[Категория:Linux]][[Категория:Ubuntu]] | ||
| + | [[Категория:nginx]][[Категория:PHP]][[Категория:node.js]][[Категория:MySQL]] | ||
Текущая версия на 06:49, 21 марта 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/*;
}
Для учета изменений настроек нужно перезагрузить службу
sudo 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/ на соответствующий файл настроек
sudo ln -s /etc/nginx/sites-available/{имя сайта} /etc/nginx/sites-enabled/{имя сайта}
и перезагрузить службу
sudo service nginx reload
Один файл может содержать описание для нескольких сайтов, каждое должно находиться логическом блоке
server {
## Для того, чтобы сайт был доступен по адресам http://{имя домена 1}/ и http://{имя домена 2}/.
server_name {имя домена 1} {имя домена 2};
## Обрабатываемый порт.
listen 80;
## Обрабатываемый порт для определенного домена.
#listen {имя домена} 8080;
## Обрабатываемый порт для ipv6.
#listen [::]:80 [{имя домена}] ipv6only=on;
## Директория с файлами сайта.
root /var/www/{имя сайта}/www;
## Файл лога для проблем доступа.
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;
#}
}
Если server_name совпадает с именем сайта, то можно использовать макрос $server_name для подстановки вместо {имя сайта}.
Шаблоны[править]
Благодаря директиве 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;
}
# Активировать кэширование.
location ~* \.(ico|css|js)$ {
expires 7d;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
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