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.1 | 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:06] (текущий) – ↷ Операцией перемещения обновлены ссылки Алексей Максимов | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ===== Настройка веб-сервера на базе стека LEMP в Ubuntu Server 14.04 LTS. Часть 5. Установка и настройка Nginx для работы в связке в PHP-FPM ===== | ||
+ | В этой части мы рассмотрим пример установки и настройки веб-сервера **Nginx**, как более производительной и легковесной альтернативы веб-серверу **Apache**. | ||
+ | |||
+ | <WRAP center tip> | ||
+ | Если на вашем сервере ранее уже был развёрнут веб-сервер **Apache**, то возможно будет полезна [[: | ||
+ | </ | ||
+ | |||
+ | |||
+ | \\ | ||
+ | ==== Установка и запуск Nginx ==== | ||
+ | |||
+ | Для установки веб-сервера **nginx** выполним: | ||
+ | |||
+ | < | ||
+ | sudo apt-get install nginx</ | ||
+ | |||
+ | Запустим, | ||
+ | |||
+ | < | ||
+ | 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 / | ||
+ | </ | ||
+ | |||
+ | Проверим доступ к веб-серверу через веб-браузер по адресу **http:// | ||
+ | |||
+ | Должен открыться веб-документ c сайта, который создаётся в nginx при установке **/ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | \\ | ||
+ | ==== Настройка службы Nginx ==== | ||
+ | |||
+ | Конфигурационные файлы nginx имеют следующую структуру: | ||
+ | |||
+ | * Главный конфигурационный файл веб-сервера nginx: **/ | ||
+ | * Конфигурационные файлы виртуальных хостов разделены на два каталога.\\ Каталог **/ | ||
+ | * Вспомогательные файлы конфигурации из каталога **/ | ||
+ | |||
+ | Для настройки главного конфигурационного файла **nginx.conf** нам предварительно потребуется выяснить количество процессоров работающих в нашей системе. | ||
+ | Сделать это можно разными способами, | ||
+ | |||
+ | < | ||
+ | |||
+ | Или ещё один вариант: | ||
+ | |||
+ | < | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | <WRAP center tip> | ||
+ | Пример заполненного конфигурационного файла **nginx.conf** со всеми параметрами можно найти по ссылке | ||
+ | </ | ||
+ | |||
+ | |||
+ | Откроем главный конфигурационный файл **nginx.conf**: | ||
+ | |||
+ | < | ||
+ | |||
+ | Далее приведёны некоторые параметры файла, на которые нужно обратить внимание: | ||
+ | |||
+ | |||
+ | <file c / | ||
+ | |||
+ | # Пользователь от имени которого работает 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 / | ||
+ | include / | ||
+ | </ | ||
+ | |||
+ | Остальные параметры **nginx.conf** в большинстве случаев можно оставить в значениях по умолчанию. | ||
+ | |||
+ | Сохраняем файл и для вступления изменений в силу перезапускаем службу **nginx**: | ||
+ | |||
+ | < | ||
+ | |||
+ | |||
+ | \\ | ||
+ | ==== Создание виртуальных хостов Nginx ==== | ||
+ | |||
+ | Как уже упоминалось ранее, настройки сайта по умолчанию хранятся в файле **/ | ||
+ | |||
+ | Отключим сайт по умолчанию, | ||
+ | |||
+ | < | ||
+ | |||
+ | Создадим отдельный конфиг.файл для первого сайта, скопировав его из конфиг.файла **default** и подключим его, создав соответствующую символическую ссылку. | ||
+ | При создании конфиг.файлов под виртуальные хосты для удобства будем присваивать им имена сайтов. | ||
+ | |||
+ | < | ||
+ | sudo cp / | ||
+ | sudo ln -s / | ||
+ | </ | ||
+ | |||
+ | Аналогичным образом создадим (и в дальнейшем подключим) конфигурационные файлы виртуальных хостов для каждого сайта. | ||
+ | В итоге нашем примере получиться 4 включённых конфиг.файла: | ||
+ | |||
+ | < | ||
+ | ls -la / | ||
+ | |||
+ | total 0 | ||
+ | lrwxrwxrwx 1 root root ... mydomain.ru -> / | ||
+ | lrwxrwxrwx 1 root root ... blog.mydomain.ru -> / | ||
+ | lrwxrwxrwx 1 root root ... forum.mydomain.ru -> / | ||
+ | lrwxrwxrwx 1 root root ... wiki.mydomain.ru -> / | ||
+ | </ | ||
+ | |||
+ | |||
+ | Создадим под каждый виртуальный хост свои корневые каталоги, | ||
+ | |||
+ | < | ||
+ | sudo mkdir -p / | ||
+ | sudo mkdir -p / | ||
+ | sudo mkdir -p / | ||
+ | sudo mkdir -p / | ||
+ | </ | ||
+ | |||
+ | |||
+ | \\ | ||
+ | ==== Настройка виртуальных хостов Nginx ==== | ||
+ | |||
+ | Теперь нам предстоит настроить файлы виртуальных хостов. | ||
+ | Редактируем настройки первого виртуального хоста (сайт **mydomain.ru**). | ||
+ | В нашем примере он будет содержать миниму настроек, | ||
+ | все клиентские запросы на сайт **mydomain.ru** должны перенаправлятся на адрес сайта блога **blog.mydomain.ru** | ||
+ | |||
+ | < | ||
+ | |||
+ | Здесь мы определим основные параметры виртуального хоста: | ||
+ | * **listen** - номер порта, на котором доступен сайт mydomain.ru; | ||
+ | * **root** - корневой каталог файлов веб-сайта (был создан нами ранее); | ||
+ | * **server_name** - доменное имя, которое бует приниматься веб-сервером для этого сайта; | ||
+ | * **access_log** и **error_log** - расположение файлов логов веб-сайта.\\ Для удобства для каждого сайта лучше сделать отдельные логи. | ||
+ | * **location** - определение правил обработки того или иного url веб-сайта.\\ В данном примере все запросы перенаправляются на другой сайт.\\ При необходимости, | ||
+ | |||
+ | <file php / | ||
+ | server { | ||
+ | listen 80; | ||
+ | root / | ||
+ | server_name mydomain.ru; | ||
+ | access_log / | ||
+ | error_log / | ||
+ | location / { | ||
+ | return 301 $scheme:// | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | Редактируем настройки второго виртуального хоста (сайт **blog.mydomain.ru**). | ||
+ | |||
+ | < | ||
+ | |||
+ | Простейший пример конфигурации виртуального хоста: | ||
+ | |||
+ | <file php / | ||
+ | server { | ||
+ | listen 80; | ||
+ | root / | ||
+ | index index.html index.htm; | ||
+ | server_name blog.mydomain.ru; | ||
+ | access_log / | ||
+ | error_log / | ||
+ | location / { | ||
+ | try_files $uri $uri/ =404; | ||
+ | } | ||
+ | location ~ \.php$ { | ||
+ | fastcgi_pass unix:/ | ||
+ | fastcgi_index index.php; | ||
+ | include fastcgi_params; | ||
+ | } | ||
+ | location ~ /\.ht { | ||
+ | deny all; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | В данном примере в одной из секций **location** (определяющей правила обработки всех *.php файлов) присутсвует параметр **fastcgi_pass**. В этом параметре мы указываем путь к **unix-сокету**, | ||
+ | |||
+ | Напомню, | ||
+ | Таким образом, | ||
+ | |||
+ | По аналогии с вышеприведённым примером отредактируем конфигурационные файлы виртуальных хостов **nginx** для остальных сайтов: | ||
+ | * **/ | ||
+ | * **/ | ||
+ | |||
+ | При этом в конфигурации каждого виртуального хоста не забудем указать свой отдельный unix-сокет для совместной работы **nginx** с **PHP-FPM**. | ||
+ | |||
+ | После того, как все конфигурационные файлы отредактированы протестируем конфигурацию nginx: | ||
+ | |||
+ | < | ||
+ | |||
+ | Вывод должен свидетельствовать об отсутвии явных ошибок конфигурации: | ||
+ | |||
+ | < | ||
+ | nginx: configuration file / | ||
+ | |||
+ | Если всё в порядке, | ||
+ | |||
+ | < | ||
+ | |||
+ | Если при перезапуске службы nginx возникают ошибки, | ||
+ | |||
+ | \\ | ||
+ | ==== Тестирование PHP ==== | ||
+ | |||
+ | Сайты **nginx** запущены, | ||
+ | |||
+ | Для этого создадим в корневой папке каждого сайта php-скрипт, | ||
+ | |||
+ | < | ||
+ | |||
+ | Скопируем в файл вызов функции вывода текущей конфигурации php: | ||
+ | |||
+ | <file php testphp.php> | ||
+ | <?php | ||
+ | phpinfo(); | ||
+ | ?> | ||
+ | </ | ||
+ | |||
+ | Проверим возможность открытия скрипта с каждого сайта по ссылке типа http:// | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | <WRAP center important> | ||
+ | Во избежание открытия излишней информации о конфигурации нашего веб-сервера, | ||
+ | |||
+ | < | ||
+ | </ | ||
+ | |||
+ | |||
+ | \\ | ||
+ | ==== Дополнительные источники информации ==== | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | |||
+ | ---- | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{tag> | ||
+ | |||
+ | ~~DISCUSSION~~ |