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

Материал из K.Wiki
Перейти к: навигация, поиск
(Ссылки)
 
(не показана одна промежуточная версия этого же участника)
Строка 1: Строка 1:
В этой статье описывается установка и настройка веб-сервера nginx для работы с [[PHP-FPM]] и [[MySQL]] в операционной системе [[Ubuntu]].
+
В этой статье описывается установка и настройка веб-сервера nginx для работы с [[PHP-FPM]], [[node.js]] и [[MySQL]] в операционной системе [[Ubuntu]].
  
 
== Установка ==
 
== Установка ==
Строка 5: Строка 5:
  
 
== Файл конфигурации ==
 
== Файл конфигурации ==
Настройки хранятся в файле <tt>/etc/nginx/nginx.conf</tt>.
+
Настройки хранятся в файле '''/etc/nginx/nginx.conf'''.
 +
<pre>## Пользователь, от имени которого запускается nginx.
 +
user www-data;
  
# Пользователь, от имени которого запускается nginx.
+
## Количество рабочих процессов, рекомендуется устанавливать по числу ядер.
user www-data;
+
worker_processes auto;
# Количество рабочих процессов, рекомендуется устанавливать по числу ядер.
+
worker_processes 4;
+
# Файл с ID процесса.
+
pid /run/nginx.pid;
+
# Директива уменьшает разрешение времени в рабочих процессах, за счёт чего уменьшается число системных вызовов gettimeofday().
+
timer_resolution 100ms;
+
# Ограничение на максимальное число открытых файлов.
+
worker_rlimit_nofile 8192;
+
+
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;
+
    # Описание MIME-типов.
+
    include /etc/nginx/mime.types;
+
    # Задаёт MIME-тип ответов по умолчанию.
+
    default_type application/octet-stream;
+
   
+
         
+
    ##
+
    # Настройки логов.
+
    ##
+
   
+
    # Настройки файла логов доступа.
+
    access_log /var/log/nginx/access.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/x-javascript text/xml application/xml application/xml+rss text/javascript;
+
   
+
   
+
    ##
+
    # Настройки виртуальных хостов.
+
    ##
+
   
+
    # Подключить дополнительные файлы настроек.
+
    include /etc/nginx/conf.d/*.conf;
+
    # Подключить настройки активных сайтов.
+
    include /etc/nginx/sites-enabled/*;
+
}
+
  
Для учета изменений настроек нужно выполнить
+
## Файл с ID процесса.
# service nginx reload; service nginx restart
+
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/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_core_module.html Модуль ngx_http_core_module - nginx.org]
Строка 102: Строка 150:
 
== Виртуальные хосты ==
 
== Виртуальные хосты ==
 
Виртуальные хосты используются для описания параметров отдельных сайтов, которые обслуживает nginx.
 
Виртуальные хосты используются для описания параметров отдельных сайтов, которые обслуживает nginx.
По-умолчанию, настройки хранятся в отдельных файлах в директории <tt>/etc/nginx/sites-available/</tt>,
+
По-умолчанию, настройки хранятся в отдельных файлах в директории '''/etc/nginx/sites-available/''',
а для активации хоста нужно создать символьную ссылку в директории <tt>/etc/nginx/sites-enabled/</tt> на соответствующий файл настроек
+
а для активации хоста нужно создать символьную ссылку в директории '''/etc/nginx/sites-enabled/''' на соответствующий файл настроек
  # ln -s /etc/nginx/sites-available/{имя сайта} /etc/nginx/sites-enabled/{имя сайта}
+
  sudo ln -s /etc/nginx/sites-available/{имя сайта} /etc/nginx/sites-enabled/{имя сайта}
и перезапустить сервер
+
и перезагрузить службу
  # service nginx reload; service nginx restart
+
  sudo service nginx reload
  
 
Один файл может содержать описание для нескольких сайтов, каждое должно находиться логическом блоке
 
Один файл может содержать описание для нескольких сайтов, каждое должно находиться логическом блоке
 
  server {
 
  server {
     # Обрабатываемый порт.
+
     ## Для того, чтобы сайт был доступен по адресам <nowiki>http://{имя домена 1}/</nowiki> и <nowiki>http://{имя домена 2}/</nowiki>.
 +
    server_name {имя домена 1} {имя домена 2};
 +
         
 +
    ## Обрабатываемый порт.
 
     listen 80;
 
     listen 80;
     # Обрабатываемый порт для определенного домена.
+
     ## Обрабатываемый порт для определенного домена.
     # listen {имя домена} 8080;
+
     #listen {имя домена} 8080;
     # Обрабатываемый порт для ipv6.
+
     ## Обрабатываемый порт для ipv6.
     # listen [::]:80 [{имя домена}] ipv6only=on;
+
     #listen [::]:80 [{имя домена}] ipv6only=on;
 
      
 
      
     # Директория с файлами сайта.
+
     ## Директория с файлами сайта.
 
     root /var/www/{имя сайта}/www;
 
     root /var/www/{имя сайта}/www;
 
      
 
      
     # Для того, чтобы сайт был доступен по адресам <nowiki>http://{имя домена 1}/</nowiki> и <nowiki>http://{имя домена 2}/</nowiki>.
+
     ## Файл лога для проблем доступа.
    server_name {имя домена 1} {имя домена 2};
+
     access_log /var/www/{имя сайта}/access.log;
         
+
    # Файл лога для проблем доступа.
+
     access_log /var/www/{имя сайта}/access.log
+
    # Файл лога для ошибок.
+
    error_log /var/www/{имя сайта}/error.log
+
 
      
 
      
     # Подключение шаблона со стандартными настройками.
+
     ## Файл лога для ошибок.
 +
    error_log /var/www/{имя сайта}/error.log;
 +
   
 +
    ## Подключение шаблона со стандартными настройками.
 
     include /etc/nginx/templates/default;
 
     include /etc/nginx/templates/default;
 
      
 
      
     # Страница для ошибки 404.
+
     ## Страница для ошибки 404.
     # error_page 404 /404.html;
+
     #error_page 404 /404.html;
     # Перенаправление при ошибках на статическую страницу /50x.html.
+
      
     # error_page 500 502 503 504 /50x.html;
+
    ## Перенаправление при ошибках на статическую страницу /50x.html.
     # location = /50x.html {
+
     #error_page 500 502 503 504 /50x.html;
     #     root /var/www/{имя сайта}/www;
+
     #location = /50x.html {
     # }
+
     #   root /var/www/{имя сайта}/www;
 +
     #}
 
  }
 
  }
 +
Если <code>server_name</code> совпадает с именем сайта, то можно использовать макрос <code>$server_name</code> для подстановки вместо <code>{имя сайта}</code>.
  
 
=== Шаблоны ===
 
=== Шаблоны ===
 
Благодаря директиве <tt>include</tt> в блок настроек виртуального хоста можно включать внешние файлы.
 
Благодаря директиве <tt>include</tt> в блок настроек виртуального хоста можно включать внешние файлы.
 
Шаблоны принято использовать для описания общих настроек.
 
Шаблоны принято использовать для описания общих настроек.
Файлы шаблонов, как правило, сохраняются в директорию <tt>/etc/nginx/templates/</tt>.
+
Файлы шаблонов, как правило, сохраняются в директорию '''/etc/nginx/templates/'''.
  
Например, стандартные настройки HTTP-хоста в файле <tt>/etc/nginx/templates/default</tt>:
+
Например, стандартные настройки HTTP-хоста в файле '''/etc/nginx/templates/default'''
  # Файлы, открываемые при пустом пути, в порядке приоритета.
+
  ## Файлы, открываемые при пустом пути, в порядке приоритета.
 
  index index.php index.html index.htm;
 
  index index.php index.html index.htm;
 
   
 
   
 
  location / {
 
  location / {
     # Сначала запрос обрабатывается как файл, потом как директория, потом происходит переход на страницу 404.
+
     ## Сначала запрос обрабатывается как файл, потом как директория, потом происходит переход на страницу 404.
 
     try_files $uri $uri/ =404;
 
     try_files $uri $uri/ =404;
     # Раскоментировать для использования naxsi в этой области.
+
   
     # include /etc/nginx/naxsi.rules
+
     ## Раскоментировать для использования naxsi в этой области.
 +
     #include /etc/nginx/naxsi.rules
 
  }
 
  }
 
   
 
   
  # Закрыть доступ к файлами .htaccess и .htpassword.
+
  ## Закрыть доступ к файлами .htaccess и .htpassword.
 
  location ~ /\.ht {
 
  location ~ /\.ht {
 
     deny all;
 
     deny all;
 
  }
 
  }
 
   
 
   
  # Отключить логи, связанные с отсутствием иконки сайта.
+
  ## Отключить логи, связанные с отсутствием иконки сайта.
 
  location = /favicon.ico {
 
  location = /favicon.ico {
 
     log_not_found off;
 
     log_not_found off;
Строка 167: Строка 219:
 
  }
 
  }
 
   
 
   
  # Доступ к файлу с настройками для поисковых роботов.
+
  ## Доступ к файлу с настройками для поисковых роботов.
 
  location = /robots.txt {
 
  location = /robots.txt {
 
     allow all;
 
     allow all;
Строка 173: Строка 225:
 
     access_log 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]
  
 
== Ссылки ==
 
== Ссылки ==
Строка 181: Строка 336:
 
[[Категория:База знаний]]
 
[[Категория:База знаний]]
 
[[Категория: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. По-умолчанию, настройки хранятся в отдельных файлах в директории /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.

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

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