Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:nginx-phpfpm [2015/06/01 03:45] [Перенаправление обработки php-скриптов внутреннему серверу «PHP-FPM»] |
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> | ||
Указываем виртуальную директорию (используется для удобства и читабельности) в которую будут перенаправляться запросы при необходимости | Указываем виртуальную директорию (используется для удобства и читабельности) в которую будут перенаправляться запросы при необходимости | ||
Строка 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> | ||
с содержанием | с содержанием | ||
Строка 440: | Строка 440: | ||
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]] | ||
====== Ссылки ====== | ====== Ссылки ====== |