Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

Инструменты пользователя

Инструменты сайта


web-server-nginx:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-nginx-global-params-and-virtual-hosts-for-php-fpm

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
web-server-nginx:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-nginx-global-params-and-virtual-hosts-for-php-fpm [05.09.2025 12:05] – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1web-server-nginx:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-nginx-global-params-and-virtual-hosts-for-php-fpm [05.09.2025 12:06] (текущий) – ↷ Операцией перемещения обновлены ссылки Алексей Максимов
Строка 1: Строка 1:
 +===== Настройка веб-сервера на базе стека LEMP в Ubuntu Server 14.04 LTS. Часть 5. Установка и настройка Nginx для работы в связке в PHP-FPM =====
  
 +В этой части мы рассмотрим пример установки и настройки веб-сервера **Nginx**, как более производительной и легковесной альтернативы веб-серверу **Apache**.
 +
 +<WRAP center tip>
 +Если на вашем сервере ранее уже был развёрнут веб-сервер **Apache**, то возможно будет полезна [[:web-server-apache:uninstall-remove-apache2-from-ubuntu-linux|короткая заметка]] о его удалении из системы.
 +</WRAP>
 +
 +
 +\\
 +==== Установка и запуск Nginx ====
 +
 +Для установки веб-сервера **nginx** выполним:
 +
 +<code>sudo apt-get update
 +sudo apt-get install nginx</code>
 +
 +Запустим, если требуется, основную службу **nginx**:
 +
 +<code>sudo service nginx status
 +sudo service nginx start</code>
 +
 +Разрешим в **iptables** подключение на порты веб-сервера TCP 80/443 и сохраним правила:
 +
 +<code>
 +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
 +</code>
 +
 +Проверим доступ к веб-серверу через веб-браузер по адресу **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)** в выводе команды
 +
 +<code>lscpu</code>
 +
 +Или ещё один вариант:
 +
 +<code>cat /proc/cpuinfo | grep processor | wc -l</code>
 +
 +{{ :unix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04:pasted:20160328-221832.png }}
 +
 +<WRAP center tip>
 +Пример заполненного конфигурационного файла **nginx.conf** со всеми параметрами можно найти по ссылке  [[https://www.nginx.com/resources/wiki/start/topics/examples/full/#|Full Example Configuration]]
 +</WRAP>
 + 
 +
 +Откроем главный конфигурационный файл **nginx.conf**:
 +
 +<code>sudo nano /etc/nginx/nginx.conf</code>
 +
 +Далее приведёны некоторые параметры файла, на которые нужно обратить внимание:
 +
 +
 +<file c /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/*;
 +</file>
 +
 +Остальные параметры **nginx.conf** в большинстве случаев можно оставить в значениях по умолчанию.
 +
 +Сохраняем файл и для вступления изменений в силу перезапускаем службу **nginx**:
 +
 +<code>sudo service nginx restart</code>
 +
 +
 +\\
 +==== Создание виртуальных хостов Nginx ====
 +
 +Как уже упоминалось ранее, настройки сайта по умолчанию хранятся в файле **/etc/nginx/sites-available/default**. 
 +
 +Отключим сайт по умолчанию, удалив символическую ссылку на его конфиг.файл:
 +
 +<code>sudo rm /etc/nginx/sites-enabled/default</code>
 +
 +Создадим отдельный конфиг.файл для первого сайта, скопировав его из конфиг.файла **default** и подключим его, создав соответствующую символическую ссылку.
 +При создании конфиг.файлов под виртуальные хосты для удобства будем присваивать им имена сайтов.
 +
 +<code>
 +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/
 +</code>
 +
 +Аналогичным образом создадим (и в дальнейшем подключим) конфигурационные файлы виртуальных хостов для каждого сайта. 
 +В итоге нашем примере получиться 4 включённых конфиг.файла:
 +
 +<code>
 +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
 +</code>
 +
 +
 +Создадим под каждый виртуальный хост свои корневые каталоги, в которые в дальнейшем будут скопированы скрипты сайтов:
 +
 +<code>
 +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
 +</code>
 +
 +
 +\\
 +==== Настройка виртуальных хостов Nginx ====
 +
 +Теперь нам предстоит настроить файлы виртуальных хостов.
 +Редактируем настройки первого виртуального хоста (сайт **mydomain.ru**).
 +В нашем примере он будет содержать миниму настроек, так как будет нацелен на редирект всех запросов на другой виртуальный хост, то есть в нашем примере
 +все клиентские запросы на сайт **mydomain.ru** должны перенаправлятся на адрес сайта блога **blog.mydomain.ru**
 +
 +<code>sudo nano /etc/nginx/sites-available/mydomain.ru</code>
 +
 +Здесь мы определим основные параметры виртуального хоста:
 +  * **listen** - номер порта, на котором доступен сайт mydomain.ru;
 +  * **root** - корневой каталог файлов веб-сайта (был создан нами ранее);
 +  * **server_name** - доменное имя, которое бует приниматься веб-сервером для этого сайта;
 +  * **access_log** и **error_log** - расположение файлов логов веб-сайта.\\ Для удобства для каждого сайта лучше сделать отдельные логи.
 +  * **location** - определение правил обработки того или иного url веб-сайта.\\ В данном примере все запросы перенаправляются на другой сайт.\\ При необходимости, мы можем добавить нужное нам количество секций **location**, в которых будут обрабатываться правила обработки запросов по аналогии с правилами файлов **.htaccess** обрабатываемых веб-сервером **Apache**
 +
 +<file php /etc/nginx/sites-available/mydomain.ru>
 +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;
 +        }
 +}
 +</file>
 +
 +
 +Редактируем настройки второго виртуального хоста (сайт **blog.mydomain.ru**).
 +
 +<code>sudo nano /etc/nginx/sites-available/blog.mydomain.ru</code>
 +
 +Простейший пример конфигурации виртуального хоста:
 +
 +<file php /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;
 +        }
 +}
 +</file>
 +
 +В данном примере в одной из секций **location** (определяющей правила обработки всех *.php файлов) присутсвует параметр **fastcgi_pass**. В этом параметре мы указываем путь к **unix-сокету**, который мы [[web-server-nginx: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:
 +
 +<code>sudo nginx -t</code>
 +
 +Вывод должен свидетельствовать об отсутвии явных ошибок конфигурации:
 +
 +<code>nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
 +nginx: configuration file /etc/nginx/nginx.conf test is successful</code>
 +
 +Если всё в порядке, выполняем перезапуск сервера nginx для вступления изменений в силу:
 +
 +<code>sudo service nginx restart</code>
 +
 +Если при перезапуске службы nginx возникают ошибки, ищем их описание в логах в каталоге **/var/log/nginx/**
 +
 +\\
 +==== Тестирование PHP ====
 +
 +Сайты **nginx** запущены, и теперь нам нужно протестировать возможность совместной работы **nginx** и **php-fpm**.
 +
 +Для этого создадим в корневой папке каждого сайта php-скрипт, например, с именем testphp.php
 +
 +<code>sudo nano /var/www/html/blog/testphp.php</code>
 +
 +Скопируем в файл вызов функции вывода текущей конфигурации php:
 +
 +<file php testphp.php>
 +<?php
 +phpinfo();
 +?>
 +</file>
 +
 +Проверим возможность открытия скрипта с каждого сайта по ссылке типа 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 }}
 +
 +<WRAP center important>
 +Во избежание открытия излишней информации о конфигурации нашего веб-сервера, после проверок не забываем удалить тестовый php-скрипт из всех корневых папок сайтов:
 +
 +<code>sudo rm /var/www/html/blog/testphp.php</code>
 +</WRAP>
 +
 +
 +\\
 +==== Дополнительные источники информации ====
 +
 +  * [[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~~