===== Настройка веб-сервера на базе стека 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~~