Установка web-сервера (Nginx+php-fpm+MySQL) на CentOS

В интернете много статей, где для установки Nginx приходится собирать не только сам веб-сервер, приходится собирать практически всё. В данной статье я опишу установку используя репозитории. Для статьи поставил специально виртуальную машину и на неё произвел установку и настройку Nginx в связке с php-fpm. Если соблюдать четко все пункты, думаю у новичков вопросов не возникнет. Удачи.

Установка Nginx:

Имеем установленную систему CentOS-6.2-i386-minimal, установленные пакеты

yum install openssh-server wget

и обновлённую систему:

yum -y update

В системе перед установкой подключенны следующие репозитарии

yum repolist

Добавляем репозитории :

EPEL

rpm -ihv http://mirror.yandex.ru/epel/6/i386/epel-release-6-6.noarch.rpm

Nginx

rpm -ihv http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

Remi

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

Устанавливаем пакет приоритета оригинальных пакетов RHEL перед пакетами из дополнительных репозиториев:

yum install yum-priorities

Устанавливаем приоритет для репозитория EPEL:

vi /etc/yum.repos.d/epel.repo

Тоже самое для репозиториев Nginx и Remi:

vi /etc/yum.repos.d/nginx.repo
vi /etc/yum.repos.d/remi.repo

Устанавливаем MySQL:

yum install mysql mysql-server

Добавляем MySQL в автозагрузку и запускаем:

chkconfig --levels 235 mysqld on
service mysqld start

 Настроим MySQL:

/usr/bin/mysql_secure_installation

Система просит нас ввести текущий пароль пользователя root. Нажимаем «Enter», пароля пока как бы нет )))

Вводим новый пароль и отключаем анонимного пользователя (нажимаем «Y» и «Enter»)

 Отключаем удаленное подключение для пользователя root  (нажимаем «Y» и «Enter»)

Удаляем тестовую базу данных (нажимаем «Y» и «Enter»)

Remove test database and access to it? [Y/n]

Сбрасываем все привилегии для баз  (нажимаем «Y» и «Enter»)

Reload privilege tables now? [Y/n]

Устанавливаем Nginx:

yum install nginx

Добавляем в автозагрузку и запускаем:

chkconfig --levels 235 nginx on
service nginx start

Для проверки веб-сервера и дальнейшей настройки временно отключим фаервол, настроим его в самом конце статьи

Вводим адрес (http://192.168.17.241) в web-браузер  (У вас скорее всего будет свой )

Устанавливаем PHP  и PHP-FPM:

PHP5 c Nginx будут работать через PHP-FPM (PHP — FastCGI Process Manager):

yum --enablerepo=remi install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-eaccelerator php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy

переходим в конфигурационный файл PHP:

vi /etc/php.ini

находим строку «cgi.fix_pathinfo = 1», снимаем с нее комментарий и меняем на «cgi.fix_pathinfo = 0»
было:

;cgi.fix_pathinfo = 1

стало:

cgi.fix_pathinfo = 0

Подробнее о cgi.fix_pathinfo можно почитать тут: http://www.php.net/manual/ru/ini.core.php#ini.cgi.fix-pathinfo

Добавляем в автозагрузку и запускаем:

chkconfig --levels 235 php-fpm on
/etc/init.d/php-fpm start

Настраиваем Nginx:

Делаем резервную копию конфига

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.default

Редактируем конфиг Nginx:

vi /etc/nginx/nginx.conf

Ищем в нём строку

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

и меняем на

server {
        listen       80;
        server_name  _;

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

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
        location ~ \.php$ {
            root           /usr/share/nginx/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
        }

Должно получится:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

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

    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.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

server {
        listen       80;
        server_name  _;

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

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
        location ~ \.php$ {
            root           /usr/share/nginx/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
        }
}

проверяем работу php

echo '<?php echo phpinfo(); ?>' > /usr/share/nginx/html/phpinfo.php

Вводим адрес (http://192.168.17.241/phpinfo.php) в web-браузер  (У вас скорее всего будет свой ). Если увидете такое окно то все ок, вы правильно настроили.

Настраиваем PHP-FPM:

До этого момента в настройках сервера мы использовали соединение TCP для нашего PHP-FPM пула (127.0.0.1:9000, 127.0.0.1:9001 и так далее). Теперь попробуем избежать расходы на TCP соединение и настроим на использование сокета Unix.

Делаем резервную копию конфига

cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.default

Редактируем

vi /etc/php-fpm.d/www.conf

В самом начале ищем

listen = 127.0.0.1:9000

и меняем на

listen = /tmp/php-fpm.sock

Перезагружаем php-fpm

/etc/init.d/php-fpm restart

Теперь настраиваем Nginx

vi /etc/nginx/nginx.conf

В секции

location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

меняем

fastcgi_pass 127.0.0.1:9000;

на

fastcgi_pass   unix:/tmp/php-fpm.sock;

Проверяем как ранее. Вводим адрес (http://192.168.17.241/phpinfo.php) в web-браузер.

всё

Настраиваем Iptables для Nginx:

iptables -I INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables-save > /etc/sysconfig/iptables

 

 

Возможные ошибки

No input file specified.

Исправляется или правами на папку веб-сервера или правильной настройкой конфига.

Остались или есть ещё вопросы? Задавайте!
(не забудьте указать ссылку на этот пост)




29 комментариев

  1. ttys Ukraine Mozilla Firefox Ubuntu Linux :

    последнее время все пытаются заюзать нжникс, не важно нужен он или нет.

    не разу ещё не сталкнулся с тем что бы апач не справился с МОИМИ задачами

    ЗЫ надо юзать то, что больше подходит — а не то что модно!!!

     

    Thumb up 0 Thumb down 0

    • Ну тут я думаю дело даже не в моде. Просто для сайтов с высокой нагрузкой он лучше.

      Хотя опять же...всё зависит от куда растут руки  ;)

      Thumb up 0 Thumb down 0

      • ёклмн

        создатель нжникса говорит, что для отдачи статики нжникс так же хорош как lighttp

        для СТАТИКИ а вообще можно лыбой сервер похерить при кривизне соответствующей

        это как MySQL PostgreSQL и Oracle

        при правильной настройке постгрес с ораклом отлично работают

        а при неправельной :-D

        один товарищ говорил, что хотели уже было NoSLQ заюзать но потом правильно посгрес настроили и было им счастье ;)

        Thumb up 0 Thumb down 0

  2. Доброе утро!

    Я сейчас играюсь с тестовым периодном VPS (голый CentrOS 6.3 86-64бит) — хочется быть готовым к смене сервера)

    Ваша инструкция единственная, выполняя которую хоть что-то получается  =)

    В процессе предварительной настройки не смог установить приоритет  репозитория EPEL, Nginx и Remi; продолжил дальше установку.

    Успешно запустил и настроил MySQL, установился nginx, но при запуске выдал ошибку такого вида:

    [root@vps96016 ~]# 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]

    Подскажите что можно сделать

    Thumb up 0 Thumb down 0

    • Чтобы установить пакет из нужного репозитория, без учета приоритета

      yum --enablerepo=remi install php-fpm

      по этому

      Starting nginx: nginx: [emerg] bind () to 0.0.0.0:80 failed (98: Address already in use)

      смотрите чем занять 80 порт

      узнать можно так

      [root@home ~]# lsof -i -P | grep *:80

      httpd      1705     root    4u  IPv6   10599      0t0  TCP *:80 (LISTEN)

      или 

      netstat -nlp | grep :80

      tcp        0      0 :::80                       :::*                        LISTEN      1705/httpd

      или ещё както 

       

      Thumb up 0 Thumb down 0

      •  

        на запрос # lsof -i -P | grep *:80

        выдаёт такой ответ

        httpd 15760 root 3u IPv4 33673196 TCP *:80 (LISTEN)

        httpd 15771 webmaster 3u IPv4 33673196 TCP *:80 (LISTEN)

        httpd 15987 webmaster 3u IPv4 33673196 TCP *:80 (LISTEN)

        а на # netstat -nlp | grep :80

        получается такой :

        tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 15760/httpd

        Чем мне это может помочь?

        Извините, если донимаю, просто я в этом деле даже не новичок :-D  

        Thumb up 0 Thumb down 0

  3. Всё правильно, у вас апатч занял 80 порт

    выключаем апатн

    service httpd stop

    включаем nginx

    service nginx start

    Thumb up 0 Thumb down 0

  4. Спасибо, помогли  *THUMBS UP* правда пришлось поставить MC коммандер для облегчения навигации и редактирования файлов, а то с vi я так и не разобрался...

    А в какую папку закидывать файлы движка CMS

    Thumb up 0 Thumb down 0

  5. ну а если возникают вопросы, то есть

     http://ask.xaxatyxa.ru/

    Thumb up 0 Thumb down 0

  6. При вводе команды:

    > yum --enablerepo=remi install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-eaccelerator php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy

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

    dedicatesupport.com/archives/45

    www.openlogic.com/wazi/bi...PHP-eAccelerator

    Thumb up 0 Thumb down 0

    • Lioplay Russian Federation Google Chrome Windows :

      аналогичная проблема и к тому же 2я ссылка не работает, а по первой не получается(скорее всего кривые руки и отсутствие навыков работы с с  любыми unix системами)

      пара вопросов:

      1) без  php-eaccelerator должна ли открыватся страница  phpinfo.php ? Ибо у меня браузер просто скачивает файл. Как я понимаю или php полность не работает или это из за  php-eaccelerator

      2)  если не удалось установить из репозиториев, есть ли более легкий способ установки php-eaccelerator или возможно аналога, без серьезных изменений в общем мануале, т.к. к моему стыду сложности я не потяну пока

       P.S. приму любые советы и помощь

      Thumb up 0 Thumb down 0

      • там проблемма в зависимостях, требуется одна версия пакета , а в репозитории другая

        как советовали до этого лучше собрать его руками 

        я даже гдето уже на процентов 70 написал пост по ентой проблеме и все руки не доходят выложить 

        пиши в личку постараюсь помочь 

        root[гав-гав]xaxatyxa.ru 

        Thumb up 0 Thumb down 0

  7. http://xaxatyxa.ru/_centos/oshibka-obnovlenii-php-common-php-eaccelerator.html

    Thumb up 0 Thumb down 0

  8. wbci Russian Federation Google Chrome Windows :

    Странно. Файлы php не открываются, а скачиваются... Делал все по инструкции, разве что не смог поставить eaccelerator :(

    Thumb up 0 Thumb down 0

  9. ande Russian Federation Google Chrome Linux :

    всё гуд правда include /etc/nginx/conf.d/*.conf; в nginx не менял а сделал так 

    root@centoswho:/# nano /etc/nginx/conf.d/default.conf

    далее раскоментировал строки     

    location ~ \.php$ {

    error_page 404 /404.html;

    fastcgi_intercept_errors on;

            root           html;

            fastcgi_pass   unix:/tmp/php-fpm.sock;

            fastcgi_index  index.php;

    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

            include        fastcgi_params;

        }

        location ~ /\.ht {

            deny  all;

        }

     

    и отсюда вопрос почему вы сделали конфиг в одном файле? в чем преимущества? или это для чайников чтобы не мучались с несколькими файлами? 

    Thumb up 0 Thumb down 0

    • и разделял конфиги по сайтам и делал всё в одном 

      каждый делает как удобнее, принципиальной разницы не вижу

      =)

      Thumb up 0 Thumb down 0

  10. Andrey Russian Federation Google Chrome Windows :

    а куда пропали репозитории ?? 

    404 Not Found

    Thumb up 0 Thumb down 0

  11. Alex Ukraine Mozilla Firefox Linux :

    Попалась инфа, что на сокете php-fpm работает хуже, чем на tcp :

    forum.nginx.org/read.php?25,90398

    (до проверки у меня дело пока не дошло).

    За пост Спасибо!

    Thumb up 0 Thumb down 0

  12. Обновленный EPEL репозиторий: rpm -ihv http://mirror.yandex.ru/epel/6/i386/epel-release-6-6.noarch.rpm  8)

    Thumb up 0 Thumb down 0

  13. А также я бы не рекомендовал устанавливать пакет php-eaccelerator:

    yum --enablerepo=remi install 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 

    ...дабы избежать глюков в дальнейшем 8)  

    Thumb up 0 Thumb down 0

  14. Фер Denmark Mozilla Firefox Windows :

    Открываю /etc/php.ini а там пусто, так должно быть или как?

    Thumb up 0 Thumb down 0

  15. rpm -ihv http://mirror.yandex.ru/epel/6/i386/epel-release-6-8.noarch.rpm

    Thumb up 0 Thumb down 0

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

Установка, настройка, мониторинг и администрирование linux, unix, windows систем