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

Материал из K.Wiki
Перейти к: навигация, поиск
(Виртуальные хосты)
(PHP)
Строка 225: Строка 225:
 
  # Закрывать ли соединение с FastCGI-сервером в случае, если клиент закрыл соединение, не дождавшись ответа.
 
  # Закрывать ли соединение с FastCGI-сервером в случае, если клиент закрыл соединение, не дождавшись ответа.
 
  fastcgi_ignore_client_abort off;
 
  fastcgi_ignore_client_abort off;
и добавить в настройки виртуального хоста блок (<tt>{имя сайта}</tt> нужно заменить своим значением)
+
и добавить в настройки виртуального хоста блок (<tt>{путь к файлу сокета}</tt> нужно заменить своим значением)
 
  # Настройки обработки PHP-скриптов.
 
  # Настройки обработки PHP-скриптов.
 
  location ~ \.php$ {
 
  location ~ \.php$ {
Строка 232: Строка 232:
 
      
 
      
 
     # Путь к UNIX-сокету PHP-FPM.
 
     # Путь к UNIX-сокету PHP-FPM.
     fastcgi_pass unix:/var/run/php5-fpm_{имя сайта}.sock;
+
     fastcgi_pass unix:{путь к файлу сокета}
 
  }
 
  }
  
Строка 243: Строка 243:
 
   
 
   
 
  # Директории с файлами сайта, файлами сессий и временными файлами.
 
  # Директории с файлами сайта, файлами сессий и временными файлами.
  fastcgi_param PHP_ADMIN_VALUE "open_basedir = /var/www/{имя сайта}/:/var/www/{имя сайта}/save/:/var/www/{имя сайта}//tmp/";
+
  fastcgi_param PHP_ADMIN_VALUE "open_basedir = /var/www/{имя сайта}/:/var/www/{имя сайта}/save/:/var/www/{имя сайта}/tmp/";
 
   
 
   
 
  # Ограничение памяти для выполнения скриптов.
 
  # Ограничение памяти для выполнения скриптов.

Версия 11:34, 12 сентября 2014

В этой статье описывается установка и настройка веб-сервера nginx для работы с PHP-FPM и MySQL в операционной системе Ubuntu.

Установка

# apt-get install nginx

Файл конфигурации

Настройки хранятся в файле /etc/nginx/nginx.conf.

# Пользователь, от имени которого запускается nginx.
user www-data;

# Количество рабочих процессов, рекомендуется устанавливать по числу ядер.
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/*;
}

Для учета изменений настроек нужно перезагрузить службу

# service nginx reload

Ссылки

Виртуальные хосты

Виртуальные хосты используются для описания параметров отдельных сайтов, которые обслуживает 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.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.
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# При использовании chroot окружения нужно указывать путь по-другому.
#fastcgi_param SCRIPT_FILENAME  /{имя домена}$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/{имя сайта}/:/var/www/{имя сайта}/save/:/var/www/{имя сайта}/tmp/";

# Ограничение памяти для выполнения скриптов.
fastcgi_param PHP_VALUE "memory_limit = 256M";

# Максимальное время в секундах, в течение которого скрипт должен полностью загрузиться.
fastcgi_param PHP_VALUE "max_execution_time = 60";

Ссылки

Ссылки