Установка nginx c PHP-FPM под CentOS 7.0

Пробуем установить Nginx с PHP5 (и PHP-FPM) и MySQL под CentOS или Fedora.

Внимание! Эта методика позволяет отказаться от привычного apache! Если Вы не готовы отказаться от apache, рекомендую связку apache+nginx.

Nginx представляет собой бесплатный, высокопроизводительный HTTP-сервер, с открытым исходным кодом. Nginx известен своей стабильностью, широким набором функций, простой настройкой и невысоким ресурсопотреблением. В этой статье мы рассмотрим процесс установки Nginx на Fedora/CentOS с поддержкой PHP версии 5 (через PHP-FPM) и MySQL.

Статья изначально написана для дистрибутивов Fedora версии 14 и CentOS версии 6.5, а затем адаптирована для CentOS версии 7.0. Тем не менее, установке именно на версию RHEL 7.0 / CentOS 7.0 посвящена отдельная статья.

1 Предварительные замечания

В этой статье будем мы будем использовать 10.4.0.10 как IP-адрес экспериментальной машины. Данные настройки в вашем случае могут отличаться, поэтому замените их на свои, где это необходимо.

2 Подключение дополнительных систем хранения

К сожалению, php-fpm не доступен в репозиториях (в официальных системах хранения) CentOS, но доступен из RemiRPM, которая сама зависит от EPEL. Можно включить обе системы хранения следующим образом (актуально для CentOS 6.5):

rpm --import https://fedoraproject.org/static/0608B895.txt
rpm -ivh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm --import https://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh https://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Запустим yum со следующими параметрами:

install -y yum-priorities

Затем отредактируем /etc/yum.repos.d/epel.repo

И добавим приоритет линии =10 к секции [epel]:

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=https://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

Затем проделаем аналогичные модификации с секцией [remi] /etc/yum.repos.d/remi.repo и изменим значение enabled на 1:

[remi]
name=Les RPM de remi pour Enterprise Linux $releasever - $basearch
#baseurl=https://rpms.famillecollet.com/enterprise/$releasever/remi/$basearch/
mirrorlist=https://rpms.famillecollet.com/enterprise/$releasever/remi/mirror
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
failovermethod=priority

3 Установка MySQL 5

Во-первых, установим MySQL 5 (MariaDB), для этого запустим yum со следующими параметрами:

install -y mysql mysql-server

Затем создадим ссылки на автозагрузку для MySQL (MySQL будет загружаться автоматически при старте системы) и запустим сервер MySQL:

systemctl enable mysqld.service

Для системы под CentOS более ранних версий надо было выполнить следующее:

chkconfig --levels 235 mysqld on
service mysqld start

Теперь проверим разрешена ли работа в сети. Выполним следующее:

netstat -tap | grep mysql

Если появилось подобное сообщение:

[root]# netstat -tap | grep mysql
tcp 0 0 *:mysql *:* LISTEN 1279/mysqld

Выполним следующее:

mysql_secure_installation

Для задания пароля администратора (иначе кто-угодно может получить доступ к вашим базам данных MySQL!):

mysql_secure_installation

Для дальнейшей установки вам необходимо будет ввести ваш логин и пароль, на остальные вопросы нажимаем Enter.

На этой ноте установка MySQL 5 будет завершена.

4 Установка Nginx

Nginx доступен на CentOS как из EPEL, так и с официального сайта разработчика, для установки запустим yum со следующими параметрами:

install -y nginx

Затем создадим ссылку на автозагрузку nginx и затем запустим саму программу:

systemctl enable nginx.service

Для системы под CentOS более ранних версий надо было выполнить следующее:

chkconfig --levels 235 nginx on
service nginx start

У вас может появится ошибка типа: порт 80 уже используется, ошибка будет иметь следующий вид:

[root]# service nginx start]
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
[FAILED]

Ошибка появляется в том случае, если уже запущена другая служба, использующая порт 80, например, apache. Остановим apache и запустим службу NGINX:

apachectl stop
yum remove httpd
chkconfig --level 235 httpd off
chkconfig --levels 235 nginx on
service nginx start

Введём IP-адрес нашего сервера или имя хоста в браузер, (например http://10.4.0.10) и перейдём на стартовую страницу nginx.

5 Установка PHP5

PHP5 может работать в nginx через PHP-FPM (FastCGI Process Manager), который является альтернативой PHP FastCGI, с дополнительными возможностями, полезными для сайтов любого размера, особенно для посещаемых сайтов. Установим php-fpm вместе с php-cli и некоторыми PHP5 модулями, например php-mysql, который потребуется для использования MySQL в ваших PHP-скриптах, для установки запустим yum со следующими параметрами:

install -y php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy

APC представляет собой бесплатный и открытый opcode кэшер для PHP, который кэширует и оптимизирует промежуточный код PHP. APC схож с другими opcode-кэшерами для PHP, такими как: eAccelerator и Xcache. Рекомендуется установить любой из этих модулей для ускорения работы динамических страниц на PHP.

Для установки APC запустим yum со следующими параметрами:

install -y php-pecl-apc

Затем откроем /etc/php.ini и установим значение cgi.fix_pathinfo=0:

[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's
; previousbehaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting
; of zero causes PHP to behave as before. Default is 1. You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]

Если требуется, выполняем детальную настройку PHP.

Для того, чтобы избежать ошибок часового пояса в файле /var/log/php-fpm/www-error.log, когда срабатывает скрипт PHP в браузере, нам потребуется задать часовой пояс (date.timezone)в /etc/php.ini:

[...]
[Date
] ; Defines the default timezone used by the date functions
; php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = "Europe/Berlin"
[...]

Определить часовой пояс на нашей системе можно следующим образом:

cat /etc/sysconfig/clock
[root]# cat /etc/sysconfig/clock
ZONE="Europe/Berlin"

Затем создадим ссылки на автозагрузку для php-fpm и запустим:

chkconfig --levels 235 php-fpm on
service php-fpm start

PHP-FPM является процессом (со скриптом init/etc/init.d/php-fpm), который запускает FastCGI сервер на порте 9000.

6 Настройка nginx

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

Первым делом (рекомендуется для высоконагруженных мощных серверов) можно увеличить число запущенный процессов и установить максимальное время поддержания keepalive-соединения:

[...]
worker_processes 4;
[...]
keepalive_timeout 2;
[...];

А можно довериться разработчикам nginx и указать значения auto.

Виртуальные хосты определены на сервере в директории /etc/nginx/conf.d. Отредактируем стандартный vhost (это в /etc/nginx/conf.d/default.conf) следующим образом:

[...]
server {;
listen 80;
server_name _;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /usr/share/nginx/html;
try_files $uri =404;
fastcgi_pass127.0.0.1:9000;
fastcgi_indexindex.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
includefastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
# location ~ /\.ht {
deny all;
}
}

server_name _; создает стандартное хранилище vhost (если вы определили имя хоста).

В разделе /part, добавим index.php к строке индкекса корень /usr/share/nginx/html; означает, что корень документа находится в директории /usr/share/nginx/html.

Важной частью PHP является местоположение, строфа: ~\.php$ {}. Удалите ~ \.php$ {} для включения местоположения. Изменим корневую строку в корне документа нашего сайта (например/usr/share/nginx/html;). Также добавим строкуtry_files $uri =404, для предотвращения уязвимостей. Убедитесь, что изменили строку fastcgi_param на fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name, иначе интерпретирующая программа PHP не найдёт PHP-скрипт, который используется в браузере. В $document_root задается /usr/share/nginx/html, так как это и есть наша корневая директория.

PHP-FPM стандартно работает с портом 9000 по адресу 127.0.0.1, поэтому зададим nginx подключиться к 127.0.0.1:9000 со строкой fastcgi_pass 127.0.0.1:9000;. Также возможно использование PHP-FPM сокета - рассмотрим это в главе 7.

Теперь сохраним файл и перезапустим nginx:

service nginx reload

Создадим файл PHP в корне сайта /usr/share/nginx/html.


<?php
phpinfo(); ?>

Затем откроем созданный файл в браузере (например http://10.4.0.10/info.php)

PHP5 работает через FPM/FastCGI, как показано в строке Server API. Внизу страницы представлена информация о подключенных модулях, в том числе и MySQL.

7 Использование Unix-сокета в PHP-FPM

По умолчанию PHP-FPM использует порт 9000 по адресу 127.0.0.1. Так же возможно использование Unix сокета в PHP-FPM, что позволит избежать издержек TCP. Откроем файл /etc/php-fpm.d/www.conf и отредактируем следующим образом:

[...]
;listen = 127.0.0.1:9000
listen = /tmp/php5-fpm.sock
[...]

Затем перезагрузим PHP-FPM:

service php-fpm reload

Теперь в конфигурации nginx и заменим строку fastcgi_pass 127.0.0.1:9000; на fastcgi_passunix:/tmp/php5-fpm.sock; это будет выглядеть следующим образом:

[...]
location ~ \.php$ {
root /usr/share/nginx/html;
try_files $uri =404;
fastcgi_passunix:/tmp/php5-fpm.sock;
fastcgi_indexindex.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
includefastcgi_params;
}
[...]

В конце снова перезапустим nginx:

service nginx reload

Теперь в браузере можно обратиться к нашему серверу по IP-адресу и увидеть ответ.

nginx-start-page-ff

18 комментарии

  • nocturna

    написал nocturna

    Пятница, 07 Ноябрь 2014 03:34

    Как заставить nginx съесть именно этот конфиг, а не default? Сейчас при обращении к серверу, загружается /usr/share/nginx/html/index.html, т.к. так указано в default

    Пожаловаться
  • Владимир Драч

    написал Владимир Драч

    Пятница, 07 Ноябрь 2014 20:51

    Проверьте, что в конфигурационном файле по умолчанию встречается директива (указывающая на то, что необходимо прочитать все конфигурационные файлы из папки):
    include /etc/nginx/conf.d/*.conf;
    Она должна быть расположена перед самой последней закрывающей фигурной скобкой. Подробнее в самом конце статьи http://drach.pro/blog/linux/item/38-nginx-apache-web-server

    Пожаловаться
  • nocturna

    написал nocturna

    Среда, 12 Ноябрь 2014 02:55

    Делала по мануалу с Убунту, там конфиги лежат в /etc/nginx/sites-available/*
    В чем разница относительно размещения в /etc/nginx/conf.d/?

    ls /etc/nginx/sites-available/
    default example_com

    Пожаловаться
  • Илья

    написал Илья

    Среда, 12 Ноябрь 2014 21:21

    nocturna, если Вы описываете виртуальные хосты в отдельных файлах, то они должны иметь расширение *.conf

    То есть как у Вас в примере
    default.conf
    example.conf
    и т.д.

    Пожаловаться
  • Владимир Драч

    написал Владимир Драч

    Среда, 19 Ноябрь 2014 17:09

    Удостоверьтесь, что существует файл в /etc/sysconfig/nginx со следующим содержимым:

    NGINX=/usr/sbin/nginx
    CONFFILE=/etc/nginx/nginx.conf

    Пожаловаться
  • Елена

    написал Елена

    Вторник, 31 Май 2016 23:56

    Наверное тема уже изжила свое, но у меня возникла проблема, дистриб Centos 6. Собрано по такому же принципу nginx+php-fpm, обновляла php с 5.2 до 5.4.45 по статье, теперь в консоли php -v выдает версию 5.4.45 а в браузере phpinfo() выдает тот же 5.2, где правятся эти конфиги или пути fastcgi? В nginx конфиге?

    Пожаловаться
  • Анатолий

    написал Анатолий

    Суббота, 04 Июнь 2016 00:26

    Елена, скорее всего, менять надо настройки в панели на хостинге (ISPmanager, cPanel или что там у Вас?)

    Пожаловаться
  • Baddy

    написал Baddy

    Понедельник, 24 Октябрь 2016 05:21

    Отличная статья!

    Пожаловаться
  • Georgeusaks

    написал Georgeusaks

    Вторник, 03 Январь 2017 19:11

    Браво, эта блестящая мысль, придется как раз кстати!

    Пожаловаться
  • EverettEvaps

    написал EverettEvaps

    Четверг, 13 Январь 2022 11:55

    Домашнее хозяйство, даже в небольшой квартире-студии, требует постоянного внимания. В доме всегда есть что исправить или починить: поклеить обои, положить плитку или установить дверь. Для решения разных бытовых проблем, можете воспользоваться услугой
    на нашем сайте "БОЛЬШОЙ МАСТЕР" — работаем в Саранске и Мордовии.

    i
    a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,

    Пожаловаться
  • EverettEvaps

    написал EverettEvaps

    Пятница, 14 Январь 2022 21:18

    Домашнее хозяйство, даже в небольшой квартире-студии, требует постоянного внимания. В доме всегда есть что исправить или починить: поклеить обои, положить плитку или установить дверь. Для решения разных бытовых проблем, можете воспользоваться услугой
    на нашем сайте "БОЛЬШОЙ МАСТЕР" — работаем в Саранске и Мордовии.

    i
    a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,

    Пожаловаться
  • Janetamccead

    написал Janetamccead

    Суббота, 15 Январь 2022 17:14

    XEvil - лучший инструмент для решения капчи с неограниченным количеством решений, без ограничений по количеству потоков и высочайшей точностью!
    XEvil 5.0 поддерживает более 12 000 типов изображений-captcha, включая reCAPTCHA, Google captcha, Yandex captcha, Microsoft captcha, Steam captcha, SolveMedia, reCAPTCHA-2 и (ДА!!!) Рекапча-3 тоже.

    1.) Гибко: вы можете настроить логику для нестандартных капчей
    2.) Легко: просто запустите XEvil, нажмите кнопку 1 - и он автоматически примет капчи из вашего приложения или скрипта
    3.) Быстро: 0,01 секунды для простых капчей, около 20..40 секунд для рекапчи-2 и около 5...8 секунд для рекапчи-3

    Вы можете использовать XEvil с любым программным обеспечением SEO/SMM, любым анализатором проверки паролей, любым аналитическим приложением или любым пользовательским скриптом:
    XEvil поддерживает большинство известных сервисов антикапчи API: 2Captcha, RuCaptcha, AntiGate (Anti-Captcha.com), DeathByCaptcha, etc.

    Интересно? Просто найдите на YouTube "XEvil" для получения дополнительной информации
    Вы читаете это - значит, это работает! ;)))

    P.S. Новый XEvil 6.0 решит проблему hCaptcha, FunCaptcha и reCAPTCHA.

    Пожаловаться
  • EverettEvaps

    написал EverettEvaps

    Понедельник, 17 Январь 2022 02:24

    Домашнее хозяйство, даже в небольшой квартире-студии, требует постоянного внимания. В доме всегда есть что исправить или починить: поклеить обои, положить плитку или установить дверь. Для решения разных бытовых проблем, можете воспользоваться услугой
    на нашем сайте "БОЛЬШОЙ МАСТЕР" — работаем в Саранске и Мордовии.

    a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,i,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,
    i

    Пожаловаться
  • BrandonSArve

    написал BrandonSArve

    Понедельник, 17 Январь 2022 14:18

    самые низкие цены
    наш сайт:

    самые низкие цены на фксессуары для телефонов
    аксессуары по низкой цене

    Пожаловаться
  • translation

    написал translation

    Понедельник, 17 Январь 2022 20:30

    Рґ.
    Только перевод паспорта с нотариальным заверением может гарантировать иностранному гражданину, прибывшему в Россию из-за рубежа, адекватное отношение со стороны всех государственных структур.
    Нечасто, но встречаются заказы на перевод паспорта с нотариальным заверением с редких языков, таких как: тамильский, суахили или дзонгха.
    сделать перевод паспорта Позвоните заранее или отправьте свои документы в электронном виде и Ваш заказ будет выполнен в самый короткий срок.
    Чтобы сделать перевод документов с подобных языков, требуется привлекать специалистов на договорной основе.
    Важно понимать, что самостоятельная расшифровка не допускается, так как нотариус должен быть уверен в профессионализме переводчика.

    Пожаловаться
  • RichardBug

    написал RichardBug

    Вторник, 18 Январь 2022 02:33

    порно студенты геи

    порно студенты геи порно студенты геи порно студенты геи порно студенты геи порно студенты геи порно студенты геи порно студенты геи порно студенты геи порно студенты геи порно студенты геи

    порно студенты геи

    порно студенты геи порно студенты геи порно студенты геи порно студенты геи порно студенты геи порно студенты геи порно студенты геи порно студенты геи порно студенты геи порно студенты геи

    порно студенты геи

    Пожаловаться
  • BrandonSArve

    написал BrandonSArve

    Вторник, 18 Январь 2022 20:00

    интернет магазин чехлов для телефона
    наш сайт:

    товары для телефона
    распродажа чехлов для телефона

    Пожаловаться
  • PhilipTut

    написал PhilipTut

    Среда, 19 Январь 2022 06:47

    Клуб Азино777, основанный в 2015 году, входит в число популярнейших онлайн-платформ для гемблинга на постсоветском пространстве. Широкую известность среди любителей азарта платформа получила после серии рекламных роликов с российскими звездами, где завлекала аудиторию щедрыми бонусами и крупными выигрышами. Организаторы держат свое обещание по сей день, презентуя новым и постоянным пользователям бездепозитные бонусы, с помощью которых можно в Azino777 играть бесплатно, не рискуя собственным бюджетом.
    проститутки Москвы
    CP

    Пожаловаться

Оставить комментарий

Ваше мнение очень важно для нас! Обязательно выскажите Ваши мысли, пожелания и критику! Не стесняйтесь задавать вопросы. Скорее всего, ответ появится уже через 2-3 дня. Спасибо заранее.

Другие материалы в этой категории:

Дискуссия

Go to top