Веб-сервер на основе Nginx и PHP-FPM Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:nginx-phpfpm [2015/06/01 03:20]
удалил устаревшую информацию
wiki:nginx-phpfpm [2015/06/01 04:04]
Ссылки
Строка 85: Строка 85:
 <code bash>​sudo nano /​etc/​nginx/​common/​upstream</​code>​ <code bash>​sudo nano /​etc/​nginx/​common/​upstream</​code>​
 и добавим в него строчки и добавим в него строчки
-<​code>​+<code=php>
 upstream php-fpm upstream php-fpm
 { {
Строка 95: Строка 95:
  
 Редактируем файл «/​etc/​nginx/​sites-available/​example.com». Добавляем строчку Редактируем файл «/​etc/​nginx/​sites-available/​example.com». Добавляем строчку
-<​code>​+<code=php>
 include common/​upstream;​ include common/​upstream;​
 </​code>​ </​code>​
Строка 101: Строка 101:
    
 Далее описываем перенаправление от HTTP к HTTPS, если, конечно,​ это планируется. В таком случае необходимо наличие сертификатов для HTTPS (см. [[wiki:​руководство_по_ubuntu_server:​безопасность:​certificates|Сертификаты]]) Далее описываем перенаправление от HTTP к HTTPS, если, конечно,​ это планируется. В таком случае необходимо наличие сертификатов для HTTPS (см. [[wiki:​руководство_по_ubuntu_server:​безопасность:​certificates|Сертификаты]])
-<​code>​+<code=php>
 server server
 { {
Строка 112: Строка 112:
  
 Начинаем описывать конфигурацию сайта Начинаем описывать конфигурацию сайта
-<​code>​+<code=php>
 server server
 { {
Строка 118: Строка 118:
  
 Сетевой порт для приема соединений:​ 80 — обычный HTTP; 443 — HTTPS (см. выше) Сетевой порт для приема соединений:​ 80 — обычный HTTP; 443 — HTTPS (см. выше)
-<​code>​+<code=php>
  # Порты  # Порты
  listen 80;  listen 80;
Строка 124: Строка 124:
 </​code>​ </​code>​
 Корневая директория сайта работающего на данном сервере Корневая директория сайта работающего на данном сервере
-<​code>​+<code=php>
  root /​var/​www;​  root /​var/​www;​
 </​code>​ </​code>​
 Возможные имена индексных файлов (их «Nginx» пытается открыть если он получил запрос вида «example.com/​»,​ вместо явного «example.com/​index.html») Возможные имена индексных файлов (их «Nginx» пытается открыть если он получил запрос вида «example.com/​»,​ вместо явного «example.com/​index.html»)
-<​code>​+<code=php>
  index index.php index.html index.htm;  index index.php index.html index.htm;
 </​code>​ </​code>​
 Имя сервера -- обычно доменное имя Вашего сервера Имя сервера -- обычно доменное имя Вашего сервера
-<​code>​+<code=php>
  server_name example.com www.example.com;​  server_name example.com www.example.com;​
 </​code>​ </​code>​
  
-==== Настройка шифрования SSL ====+==== Шифрование ====
  
 Необходимо наличие сертификата «*.crt» или «*.pem» и приватного секретного ключа «*.key» (см. [[wiki:​руководство_по_ubuntu_server:​безопасность:​certificates|Сертификаты]]). Самоподписанный сертификат можно сгенерировать командой в терминале (см. [[http://​manpages.ubuntu.com/​manpages/​lucid/​man1/​openssl.1ssl.html|man openssl]], [[http://​manpages.ubuntu.com/​manpages/​precise/​man1/​req.1ssl.html|man req]]) Необходимо наличие сертификата «*.crt» или «*.pem» и приватного секретного ключа «*.key» (см. [[wiki:​руководство_по_ubuntu_server:​безопасность:​certificates|Сертификаты]]). Самоподписанный сертификат можно сгенерировать командой в терминале (см. [[http://​manpages.ubuntu.com/​manpages/​lucid/​man1/​openssl.1ssl.html|man openssl]], [[http://​manpages.ubuntu.com/​manpages/​precise/​man1/​req.1ssl.html|man req]])
Строка 178: Строка 178:
  
 Файлы сертификатов для «HTTPS» Файлы сертификатов для «HTTPS»
-<​code>​+<code=php>
 ssl_certificate /​etc/​ssl/​certs/​example.com_nginx.crt;​ #​ сертификат (можно свободно распространять) ssl_certificate /​etc/​ssl/​certs/​example.com_nginx.crt;​ #​ сертификат (можно свободно распространять)
 ssl_certificate_key /​etc/​ssl/​private/​example.com_nginx.key;​ #​ приватный ключ (секретный файл - НИКОМУ НЕ ПОКАЗЫВАТЬ) ssl_certificate_key /​etc/​ssl/​private/​example.com_nginx.key;​ #​ приватный ключ (секретный файл - НИКОМУ НЕ ПОКАЗЫВАТЬ)
 </​code>​ </​code>​
 Дополнительные параметры требуемые для «HTTPS» Дополнительные параметры требуемые для «HTTPS»
-<​code>​+<code=php>
 ssl_dhparam /​etc/​ssl/​private/​example.com_nginx.dh.key;​ #​ писать эту строчку только если файл есть ssl_dhparam /​etc/​ssl/​private/​example.com_nginx.dh.key;​ #​ писать эту строчку только если файл есть
 ssl_session_timeout 20m;​ #​ время 20 минут ssl_session_timeout 20m;​ #​ время 20 минут
Строка 194: Строка 194:
  
 Продолжаем редактировать файл «/​etc/​nginx/​sites-available/​example.com». Подгружаем созданный выше конфигурационный файл с описанием настроек SSL Продолжаем редактировать файл «/​etc/​nginx/​sites-available/​example.com». Подгружаем созданный выше конфигурационный файл с описанием настроек SSL
-<​code>​+<code=php>
  # Настройка шифрования SSL  # Настройка шифрования SSL
  include common/ssl;  include common/ssl;
 </​code>​ </​code>​
  
-==== Различные настройки ====+==== Прочие настройки ====
  
 Указание максимального размера запроса -- необходимо если сервер будет использоваться для загрузки больших файлов (например,​ для построения небольшого облачного хранилища на основе «ownCloud»,​ эта строчка по сути делает то же что и указанные выше при настройке «PHP-FPM»,​ только теперь для «Nginx») Указание максимального размера запроса -- необходимо если сервер будет использоваться для загрузки больших файлов (например,​ для построения небольшого облачного хранилища на основе «ownCloud»,​ эта строчка по сути делает то же что и указанные выше при настройке «PHP-FPM»,​ только теперь для «Nginx»)
-<​code>​+<code=php>
  client_max_body_size 200m;​ #​ увеличение максимального объема файла для загрузки до 200МБ  client_max_body_size 200m;​ #​ увеличение максимального объема файла для загрузки до 200МБ
 </​code>​ </​code>​
  
 Ещё одна опция Ещё одна опция
-<​code>​ #​ Buffers+<code=php> # Buffers
  fastcgi_buffers 64 4K;  fastcgi_buffers 64 4K;
 </​code>​ </​code>​
  
-==== Настройки безопасности ====+==== Безопасность ====
 Опишем настройки безопасности в отдельном файле Опишем настройки безопасности в отдельном файле
 <​code=bash>​sudo touch /​etc/​nginx/​common/​security <​code=bash>​sudo touch /​etc/​nginx/​common/​security
Строка 217: Строка 217:
  
 И укажем в нём И укажем в нём
-<​code>​+<code=php>
 add_header X-Frame-Options "​SAMEORIGIN";​ add_header X-Frame-Options "​SAMEORIGIN";​
 add_header X-Content-Type-Options "​nosniff"; ​ add_header X-Content-Type-Options "​nosniff"; ​
Строка 223: Строка 223:
  
 Сохраним и закроем файл, а затем подключим его строкой Сохраним и закроем файл, а затем подключим его строкой
-<​code>​+<code=php>
  include common/​security;​  include common/​security;​
 </​code>​ </​code>​
Строка 236: Строка 236:
 и введём и введём
  
-<​code>​gzip on;​+<code=php>​gzip on;​
 gzip_disable "​msie6";​ gzip_disable "​msie6";​
 gzip_comp_level 6;​ gzip_comp_level 6;​
Строка 246: Строка 246:
  
 Следует сохранить,​ закрыть и затем подключить этот файл срочкой Следует сохранить,​ закрыть и затем подключить этот файл срочкой
-<​code>​+<code=php>
  include common/​gzip;​  include common/​gzip;​
 </​code>​ </​code>​
  
-==== Описание директорий сайта ====+==== Директории сайта ====
  
 Далее указание директорий сайта и правил работы с ними с использованием директив «location». Данная директива может обрабатывать регулярные выражения «Perl» (см. [[http://​www.opennet.ru/​docs/​RUS/​perl-maslov/​re.html|Регулярные выражения (шаблоны)]]) Далее указание директорий сайта и правил работы с ними с использованием директив «location». Данная директива может обрабатывать регулярные выражения «Perl» (см. [[http://​www.opennet.ru/​docs/​RUS/​perl-maslov/​re.html|Регулярные выражения (шаблоны)]])
Строка 259: Строка 259:
  
 Корневая директория Корневая директория
-<​code>​+<code=php>
  location "/"​  location "/"​
  {  {
Строка 267: Строка 267:
 </​code>​ </​code>​
 К примеру,​ если хочется построить сайт на основе «WordPress»,​ то можно описать корневую директорию так К примеру,​ если хочется построить сайт на основе «WordPress»,​ то можно описать корневую директорию так
-<​code>​+<code=php>
  location "/"​  location "/"​
  {  {
Строка 278: Строка 278:
  
 Директории можно описывать по одной в этом же файле, но это не удобно и не наглядно. А можно указать строчку Директории можно описывать по одной в этом же файле, но это не удобно и не наглядно. А можно указать строчку
-<​code>​ include common/​locations/​*.inc;</​code>​+<code=php>​ include common/​locations/​*.inc;</​code>​
 которая укажет «Nginx», что нужно подключить все файлы в директории «/​etc/​common/​locations/​» которые соответствуют шаблону «*.inc», таким образом,​ если один из файлов нужно будет временно отключить,​ то его можно просто переименовать убрав расширение в имени. Создадим директорию где будут хранится эти файлы которая укажет «Nginx», что нужно подключить все файлы в директории «/​etc/​common/​locations/​» которые соответствуют шаблону «*.inc», таким образом,​ если один из файлов нужно будет временно отключить,​ то его можно просто переименовать убрав расширение в имени. Создадим директорию где будут хранится эти файлы
 <​code=bash>​sudo mkdir /​etc/​nginx/​common/​locations</​code>​ <​code=bash>​sudo mkdir /​etc/​nginx/​common/​locations</​code>​
Строка 286: Строка 286:
 sudo nano /​etc/​nginx/​common/​locations/​restricted.inc</​code>​ sudo nano /​etc/​nginx/​common/​locations/​restricted.inc</​code>​
 со строчками со строчками
-<​code>​+<code=php>
 location ^~ "/​restricted/"​ location ^~ "/​restricted/"​
 { {
Строка 300: Строка 300:
 Этот конфигурационный файл подключится автоматически,​ за счёт шаблона (см. выше). Этот конфигурационный файл подключится автоматически,​ за счёт шаблона (см. выше).
  
-==== Для сайта на основе ​Wordpress ====+==== Wordpress ====
  
 Для более полной информации по настройке «Nginx» для «WordPress» следует обратиться к официальной документации (см. [[http://​codex.wordpress.org/​Nginx|codex.wordpress.org/​Nginx]] и [[http://​wiki.nginx.org/​WordPress|wiki.nginx.org/​WordPress]]) Для более полной информации по настройке «Nginx» для «WordPress» следует обратиться к официальной документации (см. [[http://​codex.wordpress.org/​Nginx|codex.wordpress.org/​Nginx]] и [[http://​wiki.nginx.org/​WordPress|wiki.nginx.org/​WordPress]])
  
 Натройки «Wordpress»,​ который,​ в данном примере,​ находится в папке «/​var/​www/​wordpress» будут описаны в файле «/​etc/​nginx/​common/​locations/​wordpress.inc» Натройки «Wordpress»,​ который,​ в данном примере,​ находится в папке «/​var/​www/​wordpress» будут описаны в файле «/​etc/​nginx/​common/​locations/​wordpress.inc»
-<​code>​sudo touch /​etc/​nginx/​common/​locations/​wordpress.inc+<code=bash>sudo touch /​etc/​nginx/​common/​locations/​wordpress.inc
 sudo nano /​etc/​nginx/​common/​locations/​wordpress.inc</​code>​ sudo nano /​etc/​nginx/​common/​locations/​wordpress.inc</​code>​
 Указываем виртуальную директорию (используется для удобства и читабельности) в которую будут перенаправляться запросы при необходимости Указываем виртуальную директорию (используется для удобства и читабельности) в которую будут перенаправляться запросы при необходимости
-<​code>​location @wordpress+<code=php>​location @wordpress
 { {
  rewrite "​^/​wordpress/​(.*)$"​ "/​wordpress/​index.php?​q=$1"​ last;  rewrite "​^/​wordpress/​(.*)$"​ "/​wordpress/​index.php?​q=$1"​ last;
 }</​code>​ }</​code>​
 Аналогично примеру выше предотвращаем обработку остальных директив «location» Аналогично примеру выше предотвращаем обработку остальных директив «location»
-<​code>​+<code=php>
 location ^~ "/​wordpress/"​ location ^~ "/​wordpress/"​
 { {
Строка 333: Строка 333:
  return 404;  return 404;
  }  }
- # Перенаправление php-файлов к серверу «PHP-FPM»+ # Перенаправление php-файлов к серверу «PHP-FPM» ​см. ниже по статье
  location ~ "​^(/​wordpress/​.+?​\.php)(/​.*)?​$"​  location ~ "​^(/​wordpress/​.+?​\.php)(/​.*)?​$"​
  {  {
Строка 346: Строка 346:
 } }
 </​code>​ </​code>​
-Сохраняем и закрываем этот файл.+Сохраняем и закрываем этот файл. Опять же, он будет подключён автоматически.
  
-==== Для облачного хранилища на основе ​ownCloud ==== +==== ownCloud ==== 
-Для наиболее полной информации следует обратится к официальному руководству «OwnCloud» (см. [[http://​doc.owncloud.org/​server/​6.0/​admin_manual/​installation/​installation_source.html#​nginx-configuration|Nginx Configuration]]). К примеру,​ «ownCloud» находится в папке «/​var/​www/​owncloud». ​+Для наиболее полной информации следует обратится к официальному руководству «OwnCloud» (см. [[https://​doc.owncloud.org/​server/​8.0/​admin_manual/​installation/​nginx_configuration.html|Nginx Configuration]]). К примеру,​ «ownCloud» находится в папке «/​var/​www/​owncloud». ​
  
 Создадим файл настроек для «ownCloud» и отредактируем его Создадим файл настроек для «ownCloud» и отредактируем его
-<​code>​sudo touch /​etc/​nginx/​common/​locations/​owncloud +<code=bash>sudo touch /​etc/​nginx/​common/​locations/​owncloud.inc 
-sudo nano /​etc/​nginx/​common/​locations/​owncloud</​code>​ +sudo nano /​etc/​nginx/​common/​locations/​owncloud.inc</​code>​ 
- +Многое аналогично примеру для «Wordpress» 
-Добавим строчки базовых ​настроек +<code=php>​location ​^~ "/​owncloud/"​
-<​code>​location "/​owncloud/"​+
 { {
 + root "/​var/​www"; ​
  index index.php index.html index.htm;  index index.php index.html index.htm;
  try_files $uri $uri/ =404;  try_files $uri $uri/ =404;
 + # ownCloud предоставляет свои красивые страницы для ошибок 404 и 403 - используем их
  error_page 403 /​owncloud/​core/​templates/​403.php;​  error_page 403 /​owncloud/​core/​templates/​403.php;​
  error_page 404 /​owncloud/​core/​templates/​404.php;​  error_page 404 /​owncloud/​core/​templates/​404.php;​
 +
 + # Отключаем сжатие - оно создаёт проблемы для клиента синхронизации ownCloud
 + gzip off;​
 + # Переопределяем глобальную настройку описанную в главном файле
 + # увеличиваем максимальный размер загружаемых файлов
 + client_max_body_size 16G;​
 + # Запрещаем читать секретные файлы
 + location ~* "​^/​owncloud/​(\.user\.ini|data|config|db_structure\.xml|README)(/​.*)?​$"​
 + {
 + deny all;
 + return 404;
 + }
 + location ~ "​^(/​owncloud/​.+?​\.php)(/​.*)?​$"​
 + {
 + try_files $1 $uri $uri/ $uri/​index.php =404;​
 + include common/​php-fpm;​
 + }
 + include common/​deny;​
 + include common/​cache;​
 }</​code>​ }</​code>​
-И также строчки для ограничения доступа 
-<​code>​location ~* "​^/​owncloud/​(data|config|db_structure\.xml|README)((/​.*)?​)$"​ 
-{ 
- deny all; 
- error_page 403 /​owncloud/​core/​templates/​403.php;​ 
- error_page 404 /​owncloud/​core/​templates/​404.php;​ 
- return 404; 
-}</​code>​ 
-Иначе пользователь может загрузить php-скрипт в «/​owncloud/​data/​files/​user/​» и выполнить его вызвав «example.com/​owncloud/​data/​user/​files/​foo.php». 
- 
-Подключаем этот конфигурационный файл строчкой 
-<​code>​include common/​locations/​owncloud;</​code>​ 
-в файле «/​etc/​nginx/​sites-available/​example.com». 
  
 Начиная с версии «ownCloud» 8 появился отдельный файл для переопределения некоторых настроек «PHP-FPM» взамен указанных в «/​etc/​php5/​fpm/​php.ini». Открыть его можно командой Начиная с версии «ownCloud» 8 появился отдельный файл для переопределения некоторых настроек «PHP-FPM» взамен указанных в «/​etc/​php5/​fpm/​php.ini». Открыть его можно командой
Строка 383: Строка 390:
 post_max_size=513M</​code>​ post_max_size=513M</​code>​
 и поменять значения на требуемые. и поменять значения на требуемые.
-==== Базовые ограничения ​доступа ​====+==== Базовые ограничения ====
  
-Далее идет запрет доступа к определенным каталогам, ​подкаталогам ​и файлам сайта (или «CMS», ​на основе которых он построен)Опишем это ​в конфигурационном ​файле «/​etc/​nginx/​common/​locations/​deny» +Выше была написана ​строчка для подключение файла ​«/​etc/​nginx/​common/​deny» 
-<​code>​sudo touch /​etc/​nginx/​common/locations/deny +<​code=php>​include common/​deny;</​code>​ 
-sudo nano /​etc/​nginx/​common/locations/​deny</​code>​ +рассмотрим его ​содержание. В нём идет запрет доступа к некоторым стандартным файламСоздадим этот файл 
-<​code>#​ Ограничение доступа к разным файлам и папкам которые часто используются ​для хранения важной информации +<code=bash>sudo touch /​etc/​nginx/​common/​deny 
-location ~* "/​(engine|inc|data|conf|config|bin|info|install|module|profile|theme)((/​.*)?​)$"​ +sudo nano /​etc/​nginx/​common/​deny</​code>​ 
-+с содержанием 
- deny all; +<​code=php>​# Запрет доступа к .htaccess и .htpasswd файлам
- return 404; +
-+
- +
-# Запрет доступа к .htaccess и .htpasswd файлам+
 location ~* "/​\.(htaccess|htpasswd)$"​ location ~* "/​\.(htaccess|htpasswd)$"​
 { {
Строка 403: Строка 406:
 </​code>​ </​code>​
  
-<note important>​Следует быть бдительным,​ неверно указанный шаблон ​здесь может сильно навредить, возможно лучше не дописывать эти директивы или ​указать их в концетак как они имеют высокий приоритет. Например, с приведенным ​выше ​шаблоном блокировки, станет невозможна загрузка ​и скачивание с сервера файлов системы контроля версий «Mercurial»,​ которые содержат папку с именем «data» подпадающую под данный шаблон. Ситуация усугубится если использовать «ownCloud» и «ownCloud Client», ​который попытается загрузить ​эти файлы ​на сервер, но потом ​их не найдёт, ​и в конце концов просто удалит их в источнике, что ​фактически приведет к потере ​файлов</​note>​+<note important>​Следует быть бдительным,​ неверно указанный шаблоны для запрета доступа (не только здесь но и в примерах вышемогут сильно навредить. Например, клиент ​ownCloud может начать удалять ​файлы ​которые не сможет загрузить на сервер из-за ​неправильного запрета где-то в конфигурационном ​файле</​note>​
  
 Следует переписать все файлы «.htaccess» в директивы «Nginx». Найти эти файлы среди файлов сайта можно, например,​ командой ​ Следует переписать все файлы «.htaccess» в директивы «Nginx». Найти эти файлы среди файлов сайта можно, например,​ командой ​
-<code bash>​sudo find /var/www/ -name .htaccess</​code>​+<code=bash>​sudo find /var/www/ -name .htaccess</​code>​
  
-Подключаем этот конфигурационный файл строчкой +==== Вызов PHP-FPM ====
-<​code>​include common/​locations/​deny;</​code>​ +
-в файле «/​etc/​nginx/​sites-available/​example.com».+
  
-На этом описание директорий завершено +В примерах выше использовался файл «/​etc/​nginx/​common/​php-fpm» — в нём идет перенаправление обработки php-скриптов внутреннему серверу «PHP-FPM»
- +
-==== Перенаправление обработки ​php-скриптов ​внутреннему серверу «PHP-FPM» ==== +
-  +
-Далее ​идет перенаправление обработки php-скриптов внутреннему серверу «PHP-FPM»+
  
 <note important>​ <note important>​
Строка 422: Строка 419:
 Также, в файле "/​etc/​php5/​fpm/​pool.d/​www.conf"​ должно присутствовать ограничение на разширение имени Также, в файле "/​etc/​php5/​fpm/​pool.d/​www.conf"​ должно присутствовать ограничение на разширение имени
 исполняемых скриптов - "​security.limit_extensions = .php .php3 .php4 .php5"</​note>​ исполняемых скриптов - "​security.limit_extensions = .php .php3 .php4 .php5"</​note>​
-<​note>​Очень желательно в шаблоне указать явно где разрешено выполнение скриптов</​note>​ 
-<​note>​Важно следить что-бы выполнение скриптов не происходило в папках куда их можно свободно загрузить (например,​ если папка доступна одновременно FTP и HTTP серверу)</​note>​ 
- 
-Добавляем в файл «/​etc/​nginx/​sites-available/​example.com» строчки,​ к примеру 
-<​code>​ 
- # Направление PHP-скрипта для обработки FastCGI или PHP-FPM серверу 
- location ~ "​^(/​index\.php|/​info\.php|/​(wordpress|owncloud)/​.+?​\.php)(/​.*)?​$"​ 
- { 
- # Решение проблемы с уязвимостью (см. http://​forum.nginx.org/​read.php?​2,​88845,​page=3) 
- # Не будет работать (ошибка 404) если файлы хранятся на другом сервере 
- try_files $1 $uri $uri/ $uri/​index.php?​q=$uri&​$args $uri/​index.php =404;​ 
-</​code>​ 
-где «$1» -- отсылка к 1-й скобке регулярного выражения в директиве «location …» и т.д. 
  
-Создаём файл ​с описанием настроек перенаправления к «PHP-FPM» +Создаём ​этот ​файл 
-<​code>​sudo touch /​etc/​nginx/​common/​php-fpm+<code=bash>sudo touch /​etc/​nginx/​common/​php-fpm
 sudo nano /​etc/​nginx/​common/​php-fpm</​code>​ sudo nano /​etc/​nginx/​common/​php-fpm</​code>​
-И в него добавляем строчки +с содержанием 
-<​code>​+<code=php>
 # Настройки порта или сокета PHP-FPM производятся в файле "/​etc/​php5/​fpm/​pool.d/​www.conf"​ # Настройки порта или сокета PHP-FPM производятся в файле "/​etc/​php5/​fpm/​pool.d/​www.conf"​
 fastcgi_pass php-fpm;​ fastcgi_pass php-fpm;​
Строка 452: Строка 436:
 set $path_info $fastcgi_path_info;​ set $path_info $fastcgi_path_info;​
 fastcgi_param PATH_INFO $path_info;​ fastcgi_param PATH_INFO $path_info;​
-Указание дополнительных переменных окружения PHP +Additional variables 
-fastcgi_param SERVER_ADMIN admin@example.com;​+fastcgi_param SERVER_ADMIN email@example.com;​
 fastcgi_param SERVER_SIGNATURE nginx/​$nginx_version;​ fastcgi_param SERVER_SIGNATURE nginx/​$nginx_version;​
 fastcgi_index index.php;​ fastcgi_index index.php;​
 </​code>​ </​code>​
- 
-Сохраняем и закрываем файл, подключаем его строчкой 
-<​code>​ include common/​php-fpm;</​code>​ 
-в файле «/​etc/​nginx/​sites-available/​example.com». 
-Закрываем фигурные скобки директивы «location» 
-<​code>​ 
- } 
-</​code>​ 
- 
-==== Доступ к Nagios через Nginx ==== 
-Если на сервере используется система мониторинга «Nagios», то обеспечение работы её веб-интерфейса тоже можно возложить на «Nginx», точнее на связку «Nginx+PHP-FPM/​FastCGIWrap». Установим дополнительное ПО «FastCGIWrap» 
-<code bash>​sudo apt-get install fcgiwrap</​code>​ 
-это позволит открывать «*.cgi» файлы. 
- 
-Открываем описанный выше файл со списком серверов выгрузки данных (upstream) 
-<code bash>​sudo nano /​etc/​nginx/​common/​upstream</​code>​ 
-и добавим в него строчки 
-<​code>​ 
-upstream fcgiwrap 
-{ 
- # FastCGIWrap сервер 
- server unix:/​var/​run/​fcgiwrap.socket;​ 
-} 
-</​code>​ 
-Создаём файл с параметрами для «FastCGIWrap» 
-<​code>​sudo touch /​etc/​nginx/​common/​fcgiwrap 
-sudo nano /​etc/​nginx/​common/​fcgiwrap</​code>​ 
-где укажем 
-<​code>​ 
-# Отключаем сжатие для быстродействия 
-gzip off; 
- 
-# Стандартные параметры 
-include fastcgi_params;​ 
- 
-# Доп. параметры 
-fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;​ 
-fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;​ 
-fastcgi_param SERVER_ADMIN admin@example.com;​ 
-fastcgi_param SERVER_SIGNATURE nginx/​$nginx_version;​ 
- 
-# Направление запроса к upstream-серверу 
-fastcgi_pass fcgiwrap;​ 
-</​code>​ 
- 
-Создаём файл с описанием настроек для «Nagios» 
-<code bash>​sudo touch /​etc/​nginx/​common/​locations/​nagios</​code>​ 
-и откроем его для редактирования 
-<code bash>​sudo nano /​etc/​nginx/​common/​locations/​nagios</​code>​ 
-И укажем необдимые параметры. 
-В «Ubuntu» «Nagios» устанавливается в разные папки, «PHP»-файлы веб-интерфейса обычно находятся в «/​usr/​share/​nagios3/​htdocs/​» 
-<​code>​ 
-location "/​nagios/"​ 
-{ 
- index index.php index.html; 
- try_files $uri $uri/​ /​nagios/​index.php;​ 
- alias "/​usr/​share/​nagios3/​htdocs/";​ 
-} 
-</​code>​ 
-«CSS»-файлы для веб-инрфейса находятся в «/​etc/​nagios3/​stylesheets/​» 
-<​code>​ 
-location ^~ "/​nagios/​stylesheets/"​ 
-{ 
- alias "/​etc/​nagios3/​stylesheets/";​ 
-} 
-location ^~ "/​nagios3/​stylesheets/"​ 
-{ 
- alias "/​etc/​nagios3/​stylesheets/";​ 
-} 
-</​code>​ 
-Картинки тоже прийдется описать отдельно 
-<​code>​ 
-location ^~ "/​nagios/​images/"​ 
-{ 
- alias "/​usr/​share/​nagios3/​htdocs/​images/";​ 
-} 
-location ^~ "/​nagios3/​images/"​ 
-{ 
- alias "/​usr/​share/​nagios3/​htdocs/​images/";​ 
-} 
-</​code>​ 
-«JS»-скрипты 
-<​code>​ 
-location ^~ "/​nagios/​js/"​ 
-{ 
- alias "/​usr/​share/​nagios3/​htdocs/​js/";​ 
-} 
-location ^~ "/​nagios3/​js/"​ 
-{ 
- alias "/​usr/​share/​nagios3/​htdocs/​js/";​ 
-} 
-</​code>​ 
-Перенаправление «PHP»-скриптов уже было описано выше, но тут требуется сделать дополнительные настройки,​ опишем все заново 
-<​code>​ 
-location ~ "​^/​nagios/​(.+?​\.php)(/​.*)?​$"​ 
-{ 
- # Папки nagios в /var/www нет, так что требуется сделать внутренне перенаправление в папку /​usr/​share/​nagios3/​htdocs/​ 
- root "/​usr/​share/​nagios3/​htdocs/";​ 
- # Проверка существования файла на диске 
- # $1 - отсылка к первой скобке регулярного выражения в location 
- # Если ничего не найдено,​ то открыть /​nagios/​index.php (можно поменять на =404) 
- try_files $1 $uri $uri/​ /​nagios/​index.php;​ 
- # Собственно перенаправление 
- rewrite "​^/​nagios/​(.+?​\.php)(/​.*)?​$"​ /​$1$2 break;​ 
- # Авторизация 
- auth_basic "​Authorization required to access Nagios";​ 
- auth_basic_user_file htpasswd;​ 
-  
- # Перенаправление запросов к PHP-FPM 
- include common/​php-fpm;​ 
-} 
-</​code>​ 
-Подобным образом описываем перенаправление запросов к «CGI»-сприптам серверу «FastCGIWarp» 
-<​code>​ 
-location ~* ^/​cgi-bin/​nagios3/​(.+?​\.cgi)$ 
-{ 
- root "/​usr/​lib/​cgi-bin/​nagios3";​ 
- try_files $1 $uri $uri/ =404; 
- rewrite "​^/​cgi-bin/​nagios3/​(.+?​\.cgi)$"​ /​$1 break;​ 
- 
- auth_basic "​Authorization required to access Nagios";​ 
- auth_basic_user_file htpasswd;​ 
- 
- # Передаём скрипту параметры аутентификации 
- fastcgi_param AUTH_USER $remote_user;​ 
- fastcgi_param REMOTE_USER $remote_user;​ 
-  
- include common/​fcgiwrap;​ 
-} 
-</​code>​ 
-Сохраняем и закрываем файл. 
- 
-А в файле «/​etc/​nginx/​sites-available/​example.com» дописываем 
-<​code>​ 
- # Nagios 
- include common/​locations/​nagios;​ 
-</​code>​ 
- 
-Выше были описаны параметры аутентификации для доступа к «Nagios», однако сам файл с пользователем и хеш-суммой от пароля хранится в неизвестном для «Nginx» файле «/​etc/​nagios3/​htpasswd.users». Просто перенесём эти настройки в известный для «Nginx» файл «/​etc/​nginx/​htpasswd»,​ например,​ командой выполненной от корневого пользователя «root» 
-<code bash> 
-cat /​etc/​nagios3/​htpasswd.users >> /​etc/​nginx/​htpasswd 
-</​code>​ 
-хотя, конечно,​ лучше это сделать вручную. 
  
 ==== Кеширование ==== ==== Кеширование ====
 +Выше, в примерах,​ был упомянут файл «/​etc/​nginx/​common/​cache»
  
-Сайт работает значительно лучше когда часть контента сохранена на стороне клиента с прошлого посещения сайта. Не все файлы можно кешировать. Поэтому описание кеширования производится в самом конце (т.е. эти настройки будут иметь наименьший приоритет и есть шанс что это не повлияет на правильную работу сайта). Создаём файл с параметрами для кеширования +Сайт работает значительно лучше когда часть контента сохранена на стороне клиента с прошлого посещения сайта. Не все файлы можно кешировать. Поэтому описание кеширования производится в самом конце (т.е. эти настройки будут иметь наименьший приоритет и есть шанс что это не повлияет на правильную работу сайта). Создадим файл с параметрами для кеширования 
-<​code>​sudo touch /​etc/​nginx/​common/​cache+<code=bash>sudo touch /​etc/​nginx/​common/​cache
 sudo nano /​etc/​nginx/​common/​cache</​code>​ sudo nano /​etc/​nginx/​common/​cache</​code>​
 где укажем где укажем
-<​code>​location ~* "​.+\.(?:​ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|css|swf|js|atom|jpe?​g|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$"​+<code=php>​location ~* "​.+\.(?:​ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|css|swf|js|atom|jpe?​g|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$"​
  {  {
  access_log off;​  access_log off;​
Строка 614: Строка 456:
  }</​code>​  }</​code>​
  
-и указываем считывать этот файл строчкой в «/​etc/​nginx/​sites-available/​example.com» +==== Окончание ====
-<​code>​ +
- include common/​cache;​ +
-</​code>​ +
- +
-==== Завершение редактирования конфигурации ​====+
  
 Закрываем фигурные скобки директивы «server» в «/​etc/​nginx/​sites-available/​example.com» Закрываем фигурные скобки директивы «server» в «/​etc/​nginx/​sites-available/​example.com»
-<​code>​+<code=php>
 } }
 </​code>​ </​code>​
Строка 634: Строка 471:
 sudo service php5-fpm restart sudo service php5-fpm restart
 </​code>​ </​code>​
 +
 +====== Проверка ======
 +
 +Проверить свой сайт можно создав файл «info.php» с содержанием
 +<​code=php><?​php
 +phpinfo();
 +?>
 +</​code>​
 +затем скопировав его, например,​ в «/​var/​www/​wordpress/​wp-content/​uploads/​»,​ затем открыв адрес в браузере «http://​example.com/​wordpress/​wp-content/​uploads/​info.php»,​ если он выполнится вместо того чтобы просто сохранится — то что-то настроено неправильно,​ в этой директории php файлы выполняться не должны ни в коем случае (она доступна для загрузки)
 +
 +Проверить свой сайт на скорость и прочее можно тут:
 +  * [[http://​www.webpagetest.org/​|webpagetest.org]]
 +  * [[https://​developers.google.com/​speed/​pagespeed/​insights/​|developers.google.com]]
 +  * [[https://​www.ssllabs.com/​ssltest/​|ssllabs.com]]
  
 ====== Ссылки ====== ====== Ссылки ======