четверг, 2 июля 2015 г.

Установка MariaDB + Nginx + PHP-FPM на CentOS 7 (Часть 4)

Продолжение статьи об установке MariaDB + Nginx + PHP-FPM на сервер под управлением CentOS 7. Предыдущие части: Часть 1, Часть 2, Часть 3.

Что ж, CentOS настроена, MariaDB и PHP-FPM установлены и настроены нужным образом. Пришла пора к установке Web-сервера NGINX.


Содержание:

  1. Проверка текущей версии CentOS
  2. Установка FTP сервера (vsFTPd)
  3. Создание пользователя с правами root
  4. Настройка строки приглашения
  5. Установка MariaDB (MySQL)
  6. Настройка MariaDB
  7. Установка PHP
  8. Настройка PHP-FPM
  9. Установка NGINX
  10. Ключ на старт...
  11. Послесловие

9. Установка NGINX.

По сравнению с MariaDB и PHP-FPM, NGINX будет устанавливаться из стандартного репозитария yum без дополнительных модификаций.

[22:38 ebabenko@centos7 ~]$ sudo yum install nginx

[...skipped...]

Install  1 Package (+15 Dependent packages)

Total download size: 3.5 M
Installed size: 11 M
Is this ok [y/d/N]: y

[...skipped...]

Installed:
  nginx.x86_64 1:1.6.3-2.el7

Dependency Installed:
  GeoIP.x86_64 0:1.5.0-9.el7                   fontconfig.x86_64 0:2.10.95-7.el7
  fontpackages-filesystem.noarch 0:1.44-8.el7  gd.x86_64 0:2.0.35-26.el7
  gperftools-libs.x86_64 0:2.1-1.el7           libX11.x86_64 0:1.6.0-2.1.el7
  libX11-common.noarch 0:1.6.0-2.1.el7         libXau.x86_64 0:1.0.8-2.1.el7
  libXpm.x86_64 0:3.5.10-5.1.el7               libjpeg-turbo.x86_64 0:1.2.90-5.el7
  libpng.x86_64 2:1.5.13-5.el7                 libunwind.x86_64 0:1.1-3.el7
  libxcb.x86_64 0:1.9-5.el7                    libxslt.x86_64 0:1.1.28-5.el7
  nginx-filesystem.noarch 1:1.6.3-2.el7

Complete!

После установки, переходим к правке освновного файла конфигурации.

[22:40 ebabenko@centos7 ~]$ sudo vi /etc/nginx/nginx.conf

Доводим его до следующего содержания.

user             nginx;
worker_processes auto;
error_log        /var/log/nginx/error.master.log;
pid              /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.master.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Не вижу особой необходимости описывать какие-то ключевые моменты, так как все параметры в полной мере описанны в документации по NGINX. Остановлюсь только на одном.

  • include /etc/nginx/sites-enabled/*; данная запись, как и в случае с PHP, загрузит только те конфигурации, которые будут располагаться в указанной директории, при этом имена и расширения файлов могут быть любыми.

Создадим директории для хранения всех конфигураций, а так же для запускаемых конфигураций.

[22:56 ebabenko@centos7 ~]$ cd /etc/nginx
[22:56 ebabenko@centos7 /etc/nginx]$ sudo mkdir sites-available sites-enabled
[22:57 ebabenko@centos7 /etc/nginx]$ cd sites-available
[22:57 ebabenko@centos7 /etc/nginx/sites-available]$ sudo vi default.local

Для начала создаем обязательную конфигурацию для работы NGINX по умолчанию. Изначально она была прописана в главном конфигурационном файле /etc/nginx/nginx.conf, но я ее для порядка вынес в отдельный файл. Все запросы, которые не попали под правила запущенных серверов, будут отправлены на сервер именно этой конфигурации. Так же, для нас она будет служить в качестве отображения статических страниц (для примера).

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    root         /usr/share/nginx/html;

    include /etc/nginx/default.d/*.conf;

    access_log /var/log/nginx/access.default.log main;
    error_log /var/log/nginx/error.default.log;

    location / {
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

Создаем конфигурацию сервера для общего сервиса.

[23:02 ebabenko@centos7 /etc/nginx/sites-available]$ sudo vi www.local

В ней уже указываем подключение к пулу PHP-FPM.

server {
    listen 80;
    server_name www.local;
    server_name_in_redirect off;
    charset utf-8;

    access_log /var/log/nginx/access.www.log main;
    error_log /var/log/nginx/error.www.log;

    root /var/www/html;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$ {
        access_log off;
        expires 14d;
    }

    location ~ \.php$ {
        fastcgi_pass  unix:/var/run/php5-fpm-www.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Некоторые коментарии по параметрам:

  • server_name www.local; - URL сервера данной конфигурации. Так как я экспериментирую через виртуальную машину, я имя могу дать абсолютно любое. Однако, если вы конфигурируете для боевого сервера, который расположен в сети, тут должно быть прописано его полное имя (например, www.my-best-portal.ru)
  • root /var/www/html; - путь к директории, где располагаются файлы сайта. Особое внимание требуется уделить тому, что пул, который будет запускать скрипты, должен иметь доступ к файлам из этой директории. В данном случае в пуле www.conf прописано имя пользователя (user) и группа (group) www. Соответственно, файлы и директории должны иметь так же имя пользователя и группу www. Это мы проделаем чуть позже, пока у нас таких ни пользователя ни группы в системе не существует.
  • fastcgi_pass unix:/var/run/php5-fpm-www.sock; - тут прописывает путь к сокету, который будет обрабатывать скрипты данного сервера. То есть тут указывается тот путь, который прописан в пуле www.conf в параметре listen.

Аналогично создаем конфигурацию для пользовательского сервиса.

[23:04 ebabenko@centos7 /etc/nginx/sites-available]$ sudo vi ebabenko.local

Доводим его примерно до такого же содержания, как и www.local, только со своими данными.

server {
    listen 80;
    server_name ebabenko.local;
    server_name_in_redirect off;
    charset utf-8;

    access_log /var/log/nginx/access.ebabenko.log main;
    error_log /var/log/nginx/error.ebabenko.log;

    root /home/ebabenko/public_html;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$ {
        access_log off;
        expires 14d;
    }

    location ~ \.php$ {
        fastcgi_pass  unix:/var/run/php5-fpm-ebabenko.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Собственно, на этом с настройками NGINX сервера закончено. Осталось только добавить конфигурации в директрию запуска.

[23:23 ebabenko@centos7 /etc/nginx/sites-available]$ cd ../sites-enabled
[23:23 ebabenko@centos7 /etc/nginx/sites-enabled]$ sudo ln -s /etc/nginx/sites-available/default.local
[23:23 ebabenko@centos7 /etc/nginx/sites-enabled]$ sudo ln -s /etc/nginx/sites-available/www.local
[23:24 ebabenko@centos7 /etc/nginx/sites-enabled]$ sudo ln -s /etc/nginx/sites-available/ebabenko.local
[23:24 ebabenko@centos7 /etc/nginx/sites-enabled]$ ll
total 0
lrwxrwxrwx. 1 root root 40 Jul  1 23:23 default.local -> /etc/nginx/sites-available/default.local
lrwxrwxrwx. 1 root root 41 Jul  1 23:24 ebabenko.local -> /etc/nginx/sites-available/ebabenko.local
lrwxrwxrwx. 1 root root 36 Jul  1 23:24 www.local -> /etc/nginx/sites-available/www.local

Продолжение статьи "Установка MariaDB + Nginx + PHP-FPM на CentOS 7 (Часть 5)".