Вики IT-KB

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

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

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


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

Настройка веб-сервера на базе стека LEMP в Ubuntu Server 14.04 LTS. Часть 5. Установка и настройка Nginx для работы в связке в PHP-FPM

В этой части мы рассмотрим пример установки и настройки веб-сервера Nginx, как более производительной и легковесной альтернативы веб-серверу Apache.

Если на вашем сервере ранее уже был развёрнут веб-сервер Apache, то возможно будет полезна короткая заметка о его удалении из системы.


Установка и запуск 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


Настройка службы 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

Пример заполненного конфигурационного файла nginx.conf со всеми параметрами можно найти по ссылке Full Example Configuration

Откроем главный конфигурационный файл nginx.conf:

sudo nano /etc/nginx/nginx.conf

Далее приведёны некоторые параметры файла, на которые нужно обратить внимание:

/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
/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;
        }
}

Редактируем настройки второго виртуального хоста (сайт blog.mydomain.ru).

sudo nano /etc/nginx/sites-available/blog.mydomain.ru

Простейший пример конфигурации виртуального хоста:

/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-сокеты для каждого пула 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:

testphp.php
<?php
phpinfo();
?>

Проверим возможность открытия скрипта с каждого сайта по ссылке типа http://blog.mydomain.ru/testphp.php

Во избежание открытия излишней информации о конфигурации нашего веб-сервера, после проверок не забываем удалить тестовый php-скрипт из всех корневых папок сайтов:

sudo rm /var/www/html/blog/testphp.php


Дополнительные источники информации

Обсуждение

Ваш комментарий:
 

unix-linux/ubuntu/ubuntu-14-04-lts-trusty-tahr/how-to-install-lemp-web-server-on-ubuntu-14-04/setup-nginx-global-params-and-virtual-hosts-for-php-fpm.txt · Последние изменения: 29.03.2016 09:10 — Алексей Максимов