Установка 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.

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

Share

You may also like...

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

  1. ttys:

    последнее время все пытаются заюзать нжникс, не важно нужен он или нет.
    не разу ещё не сталкнулся с тем что бы апач не справился с МОИМИ задачами
    ЗЫ надо юзать то, что больше подходит — а не то что модно!!!
     

    • Ну тут я думаю дело даже не в моде. Просто для сайтов с высокой нагрузкой он лучше.
      Хотя опять же….всё зависит от куда растут руки  😉

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

        это как MySQL PostgreSQL и Oracle
        при правильной настройке постгрес с ораклом отлично работают
        а при неправельной 😀
        один товарищ говорил, что хотели уже было NoSLQ заюзать но потом правильно посгрес настроили и было им счастье 😉

  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]
    Подскажите что можно сделать

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

      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


      или ещё както 

       

      •  
        на запрос # 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
        Чем мне это может помочь?
        Извините, если донимаю, просто я в этом деле даже не новичок 😀  

  3. Всё правильно, у вас апатч занял 80 порт
    выключаем апатн
    service httpd stop
    включаем nginx
    service nginx start

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

  5. ну а если возникают вопросы, то есть
     http://ask.xaxatyxa.ru/

  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. Поэтому из вышестоящей строки его убрал, но позже дополнительно поставил из исходников согласно этих статей:
    http://dedicatesupport.com/archives/45
    http://www.openlogic.com/wazi/bid/221168/Improve-PHP-performance-with-PHP-eAccelerator

    • Lioplay:

      аналогичная проблема и к тому же 2я ссылка не работает, а по первой не получается(скорее всего кривые руки и отсутствие навыков работы с с  любыми unix системами)
      пара вопросов:
      1) без  php-eaccelerator должна ли открыватся страница  phpinfo.php ? Ибо у меня браузер просто скачивает файл. Как я понимаю или php полность не работает или это из за  php-eaccelerator
      2)  если не удалось установить из репозиториев, есть ли более легкий способ установки php-eaccelerator или возможно аналога, без серьезных изменений в общем мануале, т.к. к моему стыду сложности я не потяну пока
       P.S. приму любые советы и помощь

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

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

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

  7. wbci:

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

  8. и разделял конфиги по сайтам и делал всё в одном 
    каждый делает как удобнее, принципиальной разницы не вижу
    =)

  9. Да вроде как всё работает
    локальная проблемкас 😉  

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

  11. А также я бы не рекомендовал устанавливать пакет 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)  

  12. Фер:

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

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

Добавить комментарий для XaXaTyXa Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *