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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:nginx-phpfpm [2015/06/01 03:44]
avi9526avi9526avi9526ахтыжъёшкинкот [Перенаправление обработки php-скриптов внутреннему серверу «PHP-FPM»]
wiki:nginx-phpfpm [2015/06/01 04:04] (текущий)
avi9526avi9526avi9526ахтыжъёшкинкот Ссылки
Строка 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>​
 Указываем виртуальную директорию (используется для удобства и читабельности) в которую будут перенаправляться запросы при необходимости Указываем виртуальную директорию (используется для удобства и читабельности) в которую будут перенаправляться запросы при необходимости
Строка 348: Строка 348:
 Сохраняем и закрываем этот файл. Опять же, он будет подключён автоматически. Сохраняем и закрываем этот файл. Опять же, он будет подключён автоматически.
  
-==== Для облачного хранилища на основе ​ownCloud ====+==== ownCloud ====
 Для наиболее полной информации следует обратится к официальному руководству «OwnCloud» (см. [[https://​doc.owncloud.org/​server/​8.0/​admin_manual/​installation/​nginx_configuration.html|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.inc+<code=bash>sudo touch /​etc/​nginx/​common/​locations/​owncloud.inc
 sudo nano /​etc/​nginx/​common/​locations/​owncloud.inc</​code>​ sudo nano /​etc/​nginx/​common/​locations/​owncloud.inc</​code>​
 Многое аналогично примеру для «Wordpress» Многое аналогично примеру для «Wordpress»
Строка 390: Строка 390:
 post_max_size=513M</​code>​ post_max_size=513M</​code>​
 и поменять значения на требуемые. и поменять значения на требуемые.
-==== Базовые ограничения ​доступа ​====+==== Базовые ограничения ====
  
-Выше было написана строчка для подключение файла «/​etc/​common/​deny»+Выше была написана строчка для подключение файла «/etc/nginx/​common/​deny»
 <​code=php>​include common/​deny;</​code>​ <​code=php>​include common/​deny;</​code>​
 рассмотрим его содержание. В нём идет запрет доступа к некоторым стандартным файлам. Создадим этот файл рассмотрим его содержание. В нём идет запрет доступа к некоторым стандартным файлам. Создадим этот файл
Строка 406: Строка 406:
 </​code>​ </​code>​
  
-<note important>​Следует быть бдительным,​ неверно указанный шаблон ​здесь может сильно навредить, возможно лучше не дописывать эти директивы или указать их в конце, так как ​они имеют высокий приоритет. Например,​ клиент ownCloud может начать удалять файлы которые не сможет загрузить на сервер из-за неправильного запрета где-то в конфигурационном файле</​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-скриптов внутреннему серверу «PHP-FPM» ====+==== Вызов PHP-FPM ====
  
-В примерах выше использовался файл «/​etc/​common/​php-fpm» — в нём идет перенаправление обработки php-скриптов внутреннему серверу «PHP-FPM»+В примерах выше использовался файл «/etc/nginx/​common/​php-fpm» — в нём идет перенаправление обработки php-скриптов внутреннему серверу «PHP-FPM»
  
 <note important>​ <note important>​
Строка 421: Строка 421:
  
 Создаём этот файл Создаём этот файл
-<​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>​
 с содержанием с содержанием
Строка 437: Строка 437:
 fastcgi_param PATH_INFO $path_info;​ fastcgi_param PATH_INFO $path_info;​
 # Additional variables # Additional variables
-fastcgi_param SERVER_ADMIN avi9526@avi9526.pp.ua;+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>​ include common/​php-fpm;</​code>​ 
-в файле «/​etc/​nginx/​sites-available/​example.com». 
-Закрываем фигурные скобки директивы «location» 
-<​code>​ 
- } 
 </​code>​ </​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;​
Строка 463: Строка 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>​
Строка 483: Строка 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]]
  
 ====== Ссылки ====== ====== Ссылки ======