Nginx — различия между версиями

Материал из K.Wiki
Перейти к: навигация, поиск
(Новая страница: «== Установка == # apt-get install nginx == PHP == === Установка === # apt-get install php5-mysql php5-fpm»)
 
 
(не показано 27 промежуточных версии этого же участника)
Строка 1: Строка 1:
 +
В этой статье описывается установка и настройка веб-сервера nginx для работы с [[PHP-FPM]], [[node.js]] и [[MySQL]] в операционной системе [[Ubuntu]].
 +
 
== Установка ==
 
== Установка ==
 
  # apt-get install nginx
 
  # apt-get install nginx
== PHP ==
+
 
=== Установка ===
+
== Файл конфигурации ==
  # apt-get install php5-mysql php5-fpm
+
Настройки хранятся в файле '''/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/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;
 +
и добавить в настройки виртуального хоста блок (<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://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://manualpages.pro/node/31 Полноценный http-сервер без Apache, на nginx+php-fpm под Debian Squeeze]
 +
 
 +
[[Категория:База знаний]]
 +
[[Категория: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. По-умолчанию, настройки хранятся в отдельных файлах в директории /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.

Ссылки[править]

Ссылки[править]