===== Настройка веб-сервера на базе стека LEMP в Ubuntu Server 14.04 LTS. Часть 5. Установка и настройка Nginx для работы в связке в PHP-FPM =====
В этой части мы рассмотрим пример установки и настройки веб-сервера **Nginx**, как более производительной и легковесной альтернативы веб-серверу **Apache**.
Если на вашем сервере ранее уже был развёрнут веб-сервер **Apache**, то возможно будет полезна [[:web-server-apache:uninstall-remove-apache2-from-ubuntu-linux|короткая заметка]] о его удалении из системы.
\\
==== Установка и запуск Nginx ====
Для установки веб-сервера **nginx** выполним:
sudo apt-get update
sudo apt-get install nginx
Запустим, если требуется, основную службу **nginx**:
sudo service nginx status
sudo service nginx start
Разрешим в **iptables** подключение на порты веб-сервера TCP 80/443 и сохраним правила:
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -i eth0 -j ACCEPT \
-m comment --comment "Allow web-server ports"
sudo iptables-save | sudo tee /etc/iptables.conf
Проверим доступ к веб-серверу через веб-браузер по адресу **http://ip-address/**
Должен открыться веб-документ c сайта, который создаётся в nginx при установке **/usr/share/nginx/html**
{{ :unix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04:pasted:20160328-221027.png }}
\\
==== Настройка службы Nginx ====
Конфигурационные файлы nginx имеют следующую структуру:
* Главный конфигурационный файл веб-сервера nginx: **/etc/nginx/nginx.conf**
* Конфигурационные файлы виртуальных хостов разделены на два каталога.\\ Каталог **/etc/nginx/sites-available/** содержит все конфиг.файлы (продуктивные, тестовые, копии конфигов и т.д.). По умолчанию содержит только файл **default**.\\ Каталог **/etc/nginx/sites-enabled/** содержит символические ссылки на работающие конфигурации продуктивных сайтов из каталога **sites-available**.
* Вспомогательные файлы конфигурации из каталога **/etc/nginx/conf.d/**
Для настройки главного конфигурационного файла **nginx.conf** нам предварительно потребуется выяснить количество процессоров работающих в нашей системе.
Сделать это можно разными способами, например посмотреть значение параметра **CPU(s)** в выводе команды
lscpu
Или ещё один вариант:
cat /proc/cpuinfo | grep processor | wc -l
{{ :unix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04:pasted:20160328-221832.png }}
Пример заполненного конфигурационного файла **nginx.conf** со всеми параметрами можно найти по ссылке [[https://www.nginx.com/resources/wiki/start/topics/examples/full/#|Full Example Configuration]]
Откроем главный конфигурационный файл **nginx.conf**:
sudo nano /etc/nginx/nginx.conf
Далее приведёны некоторые параметры файла, на которые нужно обратить внимание:
# Пользователь от имени которого работает nginx.
# Нужно убедиться в том, что основная группа этого пользователя и группа,
# указаная в конфигурационных файлах пулов php-fpm в параметре listen.group совпадают.
# В противном случае nginx может получить проблемы с доступом
# на изменение файлов сокетов пулов php-fpm.
#
user www-data;
# Количество рабочих процессов.
# Выставляем равным количеству CPU (его мы определили ранее)
#
worker_processes 4;
# Число соединений на один рабочий процесс
# max_clients = worker_processes * worker_connections
#
worker_connections 1024;
# Cкрыть токены и номер версии nginx
# Раскомментировать этот параметр в секции http
#
server_tokens off;
# Проверьте наличие строк присоединения файлов конфигураций включенных виртулаьных хостов:
#
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
Остальные параметры **nginx.conf** в большинстве случаев можно оставить в значениях по умолчанию.
Сохраняем файл и для вступления изменений в силу перезапускаем службу **nginx**:
sudo service nginx restart
\\
==== Создание виртуальных хостов Nginx ====
Как уже упоминалось ранее, настройки сайта по умолчанию хранятся в файле **/etc/nginx/sites-available/default**.
Отключим сайт по умолчанию, удалив символическую ссылку на его конфиг.файл:
sudo rm /etc/nginx/sites-enabled/default
Создадим отдельный конфиг.файл для первого сайта, скопировав его из конфиг.файла **default** и подключим его, создав соответствующую символическую ссылку.
При создании конфиг.файлов под виртуальные хосты для удобства будем присваивать им имена сайтов.
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/mydomain.ru
sudo ln -s /etc/nginx/sites-available/mydomain.ru /etc/nginx/sites-enabled/
Аналогичным образом создадим (и в дальнейшем подключим) конфигурационные файлы виртуальных хостов для каждого сайта.
В итоге нашем примере получиться 4 включённых конфиг.файла:
ls -la /etc/nginx/sites-enabled/
total 0
lrwxrwxrwx 1 root root ... mydomain.ru -> /etc/nginx/sites-available/mydomain.ru
lrwxrwxrwx 1 root root ... blog.mydomain.ru -> /etc/nginx/sites-available/blog.mydomain.ru
lrwxrwxrwx 1 root root ... forum.mydomain.ru -> /etc/nginx/sites-available/forum.mydomain.ru
lrwxrwxrwx 1 root root ... wiki.mydomain.ru -> /etc/nginx/sites-available/wiki.mydomain.ru
Создадим под каждый виртуальный хост свои корневые каталоги, в которые в дальнейшем будут скопированы скрипты сайтов:
sudo mkdir -p /var/www/html/root
sudo mkdir -p /var/www/html/blog
sudo mkdir -p /var/www/html/forum
sudo mkdir -p /var/www/html/wiki
\\
==== Настройка виртуальных хостов Nginx ====
Теперь нам предстоит настроить файлы виртуальных хостов.
Редактируем настройки первого виртуального хоста (сайт **mydomain.ru**).
В нашем примере он будет содержать миниму настроек, так как будет нацелен на редирект всех запросов на другой виртуальный хост, то есть в нашем примере
все клиентские запросы на сайт **mydomain.ru** должны перенаправлятся на адрес сайта блога **blog.mydomain.ru**
sudo nano /etc/nginx/sites-available/mydomain.ru
Здесь мы определим основные параметры виртуального хоста:
* **listen** - номер порта, на котором доступен сайт mydomain.ru;
* **root** - корневой каталог файлов веб-сайта (был создан нами ранее);
* **server_name** - доменное имя, которое бует приниматься веб-сервером для этого сайта;
* **access_log** и **error_log** - расположение файлов логов веб-сайта.\\ Для удобства для каждого сайта лучше сделать отдельные логи.
* **location** - определение правил обработки того или иного url веб-сайта.\\ В данном примере все запросы перенаправляются на другой сайт.\\ При необходимости, мы можем добавить нужное нам количество секций **location**, в которых будут обрабатываться правила обработки запросов по аналогии с правилами файлов **.htaccess** обрабатываемых веб-сервером **Apache**
server {
listen 80;
root /var/www/html/root;
server_name mydomain.ru;
access_log /var/log/nginx/access.mydomain.ru.log;
error_log /var/log/nginx/error.mydomain.ru.log;
location / {
return 301 $scheme://blog.mydomain.ru$request_uri;
}
}
Редактируем настройки второго виртуального хоста (сайт **blog.mydomain.ru**).
sudo nano /etc/nginx/sites-available/blog.mydomain.ru
Простейший пример конфигурации виртуального хоста:
server {
listen 80;
root /var/www/html/blog;
index index.html index.htm;
server_name blog.mydomain.ru;
access_log /var/log/nginx/access.blog.mydomain.ru.log;
error_log /var/log/nginx/error.blog.mydomain.ru.log;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm-blog.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
В данном примере в одной из секций **location** (определяющей правила обработки всех *.php файлов) присутсвует параметр **fastcgi_pass**. В этом параметре мы указываем путь к **unix-сокету**, который мы [[:unix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-php5-and-php-fpm-for-nginx|создавали ранее]].
Напомню, что ранее мы создали отдельные unix-сокеты для каждого пула **PHP-FPM**.
Таким образом, с помощью этих сокетов, здесь мы выполняем связку виртуальных хостов **nginx** с созданными ранее пулами **PHP-FPM**.
По аналогии с вышеприведённым примером отредактируем конфигурационные файлы виртуальных хостов **nginx** для остальных сайтов:
* **/etc/nginx/sites-available/forum.mydomain.ru** для сайта **forum.mydomain.ru**
* **/etc/nginx/sites-available/wiki.mydomain.ru** для сайта **wiki.mydomain.ru**
При этом в конфигурации каждого виртуального хоста не забудем указать свой отдельный unix-сокет для совместной работы **nginx** с **PHP-FPM**.
После того, как все конфигурационные файлы отредактированы протестируем конфигурацию nginx:
sudo nginx -t
Вывод должен свидетельствовать об отсутвии явных ошибок конфигурации:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Если всё в порядке, выполняем перезапуск сервера nginx для вступления изменений в силу:
sudo service nginx restart
Если при перезапуске службы nginx возникают ошибки, ищем их описание в логах в каталоге **/var/log/nginx/**
\\
==== Тестирование PHP ====
Сайты **nginx** запущены, и теперь нам нужно протестировать возможность совместной работы **nginx** и **php-fpm**.
Для этого создадим в корневой папке каждого сайта php-скрипт, например, с именем testphp.php
sudo nano /var/www/html/blog/testphp.php
Скопируем в файл вызов функции вывода текущей конфигурации php:
Проверим возможность открытия скрипта с каждого сайта по ссылке типа http://blog.mydomain.ru/testphp.php
{{ :unix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04:pasted:20160328-224006.png }}
Во избежание открытия излишней информации о конфигурации нашего веб-сервера, после проверок не забываем удалить тестовый php-скрипт из всех корневых папок сайтов:
sudo rm /var/www/html/blog/testphp.php
\\
==== Дополнительные источники информации ====
* [[http://help.ubuntu.ru/wiki/nginx-phpfpm|help.ubuntu.ru - Веб-сервер на основе Nginx и PHP-FPM]]
* [[http://pektop.net/2013/09/sovety-po-nastrojke-i-optimizacii-nginx-i-php-fpm/|Ректор - Советы по настройке и оптимизации Nginx и PHP-FPM]]
* [[https://www.digitalocean.com/community/tutorials/how-to-host-multiple-websites-securely-with-nginx-and-php-fpm-on-ubuntu-14-04|DigitalOcean - How To Host Multiple Websites Securely With Nginx And Php-fpm On Ubuntu 14.04]]
----
{{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 28.03.2016 22:03
{{tag>Linux Ubuntu "Ubuntu 14.04" "14.04 LTS" "Ubuntu Server" "web server" Apache htaccess iptables LEMP FastCGI PHP PHP5 PHP-FPM Nginx "virtual host" vhost socket unix-socket listener}}
~~DISCUSSION~~