centos настройка php nginx

Установка Nginx в CentOS 7

Кроме функции веб-сервера, программа может работать в качестве обратного прокси, прокси для TCP/UDP или почты, а также в качестве балансировщика нагрузки. Nginx используется для обеспечения работы огромного количества сайтов в сети интернет, а также известна, как самый высокопроизводительный веб-сервер. В этой статье мы рассмотрим, как выполняется установка Nginx CentOS 7, а также как выполнить первоначальную настройку программы.

Установка Nginx в CentOS 7

Веб-сервер Nginx есть в официальных репозиториях дистрибутива, та версия уже устарела, и если вы хотите получить новую версию с современными возможностями, вам придётся использовать репозиторий EPEL. Для его добавления в систему выполните:

yum install epel-release

Затем можно установить Nginx:

Чтобы запустить сервис Nginx, выполните:

systemctl start nginx

Затем необходимо добавить программу в автозагрузку:

systemctl enable nginx

Далее надо разрешить трафик для веб-сервера в брандмауэре системы:

И перезагрузить брандмауэр:

Если все было сделано правильно, то, открыв адрес сервера, на который вы устанавливали Nginx, вы увидите страницу по умолчанию:

Настройка расположения файлов сайта

Установка Nginx CentOS 7 завершена, теперь будет рассмотрена настройка Nginx. Нам нужно сообщить Nginx, где будут находится файлы нашего сайта. В конфигурационном файле /etc/nginx.conf, уже настроен один виртуальный хост. Его мы и будем использовать. Здесь указана опция default_server, поэтому он будет открываться для всех запросов к Nginx:

Сначала нужно создать само расположение файлов. Создайте папку /var/www/html/default, в которой будут храниться наши файлы сайтов, и дайте на неё права пользователю nginx:

mkdir /var/www/html/default
chown nginx:nginx /var/www/html/default

Также можно создать файл index.html в этой папке для теста веб-сервера с таким текстом:

It words!

Этот файл тоже должен принадлежать пользователю Nginx. Далее в конфигурационном файле /etc/nginx/nginx.conf найдите секцию server и замените значение параметра root на /var/www/html/default:

Теперь Nginx будет брать файлы сайта из этого каталога при всех запросах. Перезапустите Nginx:

systemctl restart nginx

Затем откройте снова адрес сервера в браузере, чтобы посмотреть, работает ли наше расположение файлов. Если всё было сделано правильно, вы увидите сообщение it works:

Если возникает ошибка, убедитесь, что у Nginx есть права для доступа к этому файлу, а также, что SELinux отключён или правильно настроен.

Настройка PHP-FPM Nginx CentOS

Если вам нужен Nginx, то скорее всего, вам нужно также настроить его для работы с интерпретатором PHP. Дальше будет разобрана настройка php-fpm Nginx CentOS 7. Прочитать более подробно про установку PHP 7 в CentOS можно в отдельной статье, а в этой статье мы будем работать с версией, доступной в официальных репозиториях. Для Nginx нам необходимо установить пакет php-fpm:

yum install php-fpm

Затем запустите службу php-fpm командой:

systemctl start php-fpm

Откройте конфигурационный файл php-fpm, который находится по адресу /etc/php-fpm.d/www.conf и посмотрите, на каком порту ожидает соединений запущенная служба. По умолчанию это 9000:

Далее нам осталось только связать Nginx с новой службой. Для этого в секцию server добавьте такой код:

Здесь очень важно значение этого параметра:

Оно должно соответствовать тому, которое мы видели в файле /etc/php-fpm.d/www.conf. Это адрес и порт на котором ожидает подключения служба php-fpm. Всё остальное можно оставить как есть и модифицировать при необходимости. Затем перезагрузите Nginx:

sudo systemctl reload nginx

Опция reload позволяет перечитать конфигурацию без перезагрузки веб-сервера. Осталось создать тестовый файл с таким содержимым:

Затем откройте адрес сервера на который был установлен Nginx плюс phpinfo.php в браузере:

Теперь вы увидите, что php-fpm nginx настроен полностью и корректно работает.

Выводы

В этой статье мы разобрали, как установить Nginx CentOS 7, а также как настроить первый веб-сайт и подключить обработку скриптов с помощью интерпретатора php-fpm. В следующих статьях разберёмся с настройкой виртуальных хостов для Nginx и SSL-сертификатов.

Оцените статью:

Об авторе

Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.

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

А зачем php в статье про nginx? мб стоит как то более подробно расписать возможности nginx, например stream проксирование, либо возможность разным сайтам работать под разными пользователями. Подобных этой статей слишком много уже.

Я полчаса потратил на ковыряние конфигов, только после твоего коммента дошло! Сайт нормальный вроде, но авторы косячат иногда!

Подскажите, пожалуйста, какие права должны быть на директорию /home/test, если нужно настроить http сервер так, чтобы он отображал содержимое домашнего каталога пользователя test командой curl localhost или по IP сервера.

Источник

Nginx + php-fpm на CentOS 7

Установка nginx на CentOS 7

Ставим непосредственно web сервер:

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

Проверяем, запустился ли:

Теперь можно зайти на тестовую страничку, чтобы убедиться, что nginx работает:

Не забудьте открыть 80-й порт на фаерволе.

Читайте также:  монтелар монтелукаст или сингуляр что лучше

Установка mysql на CentOS 7

Практически ни один web сервер сейчас не обходится без mysql. В centos 7 вместо mysql устанавливается mariadb, которая имеет полную совместимость с mysql, в том числе понимает все ее команды. Так что ставим на сервер:

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

Проверяем, запустилась ли mysql:

Теперь воспользуемся скриптом безопасности, который позволит задать пароль root и произвести некоторые настройки:

Установка php-fpm на CentOS 7

Устанавливаем php-fpm и некоторые модули, которые скорее всего пригодятся в дальнейшей работе:

На все вопросы просто жмем enter, выбирая параметры по-умолчанию.

Теперь отредактируем /etc/php.ini как нам рекомендует инсталлятор:

Задаем параметр cgi.fix_pathinfo=0 и добавляем в конце строку extension=apc.so
Заодно установим сразу же часовой пояс: date.timezone = «Europe/Moscow»

Создадим файл настроек APC:

Добавляем php-fpm в автозагрузку:

Настройка nginx и php-fpm на CentOS 7

Теперь отредактируем конфиги для совместной работы. Приводим конфиг nginx к следующему виду:

Более подробно о том, как выполнить базовую настройку nginx читайте в отдельной обширной статье.

Теперь правим конфиг php-fpm, приводим его к следующему виду:

Создаем необходимые каталоги:

Теперь все готово, можно проверять. Создаем в папке /web/sites/site1.ru/www тестовый файл:

Заходим по адресу: http://site1.ru/ и если наблюдаем информацию о php, то все сделано правильно.

Если нет, то идем в логи и смотрим, в чем ошибка.

Установка phpmyadmin на CentOS 7

Для удобства управления базами веб сайтов я всегда использую phpmyadmin. Установим ее:

Копируем файлы панели в наш виртуальный домен, созданный ранее:

Заходим по адресу http://pma.site1.ru/ и проверяем, все ли в порядке.

У меня при первом запуске в браузере открылся просто белый лист. Начал разбираться в чем дело. В логе ошибок nginx этого виртуального хоста увидел ошибку:

*43 FastCGI sent in stderr: «PHP message: PHP Fatal error: Call to undefined function __() in /web/sites/pma.site1.ru/www/libraries/core.lib.php on line 245» while reading response header from upstream, client: 77.47.234.119, server: pma.site1.ru, request: «GET /index.php HTTP/1.1», upstream: «fastcgi://unix:/var/run/php-fpm/php5-fpm.sock:», host: «pma.site1.ru»

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

После этого загрузилась панель phpmyadmin:

Более подробную информацию об установке и настройке phpmyadmin смотрите в отдельной статье.

На этом все, настройка nginx + php-fpm на CentOS7 закончена.

Онлайн курс Внедрение и работа в DevSecOps

Помогла статья? Подписывайся на telegram канал автора

Автор Zerox

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

Добрый день!
Вы тут в пункте «Настройка nginx и php-fpm на CentOS 7» связали nginx и php-fpm но php 5.4
где можно найти связку nginx и php-fpm 7.1?

нашёл ссылку Вашу https://serveradmin.ru/ustanovka-i-nastroyka-nginx-php-fpm-php7-1-na-centos-7/
там установка nginx и php-fpm 7.1 есть но связки не нашёл(а может только их установка хватит)

Zerox, огромное спасибо за статью!
Сможете подсказать, возможно ли настроить и если возможно, то как это сделать)
Есть сервер mysql на Windows 2012 R2, к нему привязано несколько других сервесов. Необходимо использовать его для работы с Сайтом.
Как это настроить?
Если делать по инструкции, то будет использоваться mariadb, что распологается локально.
Буду признателен, если сможете подсказать и/или направить в нужное русло.

Так ничего делать и не надо. Создайте базу на текущем сервере и подключайтесь к ней удаленно. В больших проектах так чаще всего и бывает, что сервер с базой данных это отдельный сервер.

Источник

CentOS → Настраиваем web-сервер на CentOS ( Nginx + php-fpm + MySQL )

В этой статье я расскажу как настроить Web сервер на CentOS, эта ОС является одной из самых популярных и только недавно она уступила лидерство Debian, что как-бы намекает. Она имеет довольно большое сообщество и информация о ее настройке будет весьма полезна людям, да и не понятно как это я ее обошел своим вниманием, в общем, этот досадный недостаток нужно исправить, чем я сейчас и займусь.

Предполагается что система установлена и настроена как вам нужно.
Устанавливаем Nginx
Первым делом нам необходимо добавить родной репозиторий Nginx, сделать это можно двумя путями:
1) Скачать пакет который добавит настройки репозитория в конфигурационные файлы
2) Руками поправить файлы конфигурации

мы буем использовать стабильный релиз для CentOS 6.0
Любое из решений имеет право на жизнь, как это сделать можно прочитать на сайте Nginx nginx.org/en/linux_packages.html#stable
Мы сделаем более просто, качнем пакет он сам все добавит в конфиги.

Качнем файл с настройками репозитория Nginx и сразу установим его:

Переходим к установке Nginx, тут все просто:

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

Если мы попытаемся подключиться к Nginx, то у нас ничего не получится т.к. правила фаерволла блокируют доступ к 80му порту.
Добавим правила для Nginx:

Содержимое файла примерно следующее:

Читайте также:  Subnautica below zero что делать после теплицы маргарет

Тут видно что разрешен доступ к порту 22, остальные порты заблокированы, возьмем за основу данное правило и немного переделаем его, чтобы оно открывало доступ к порту 80

И добавим его под разрешающее правило для SSH
Тогда содержимое примет вид:

Применим правила, чтобы Nginx стал доступен для подключения:

Проверяем, зайдя по адресу httр://IP_вашего_серрвера
Видим приветственную страницу Nginx, значит web-сервер доступен для внешних подключений:

Немножко «допилим» Nginx, чтобы он не выдавал информацию о себе.
Для примера, попробуем перейти по адресу httр://ip_адрес_сервера/test
Сервер выдаст страницу с ошибкой, в низу которой будет видна версия nginx, что не очень хорошо.
нам нужно ее скрыть, а для этого мы идем в:

и в секции http мы добавим директиву server_tokens off;

Сразу под записью #tcp_nopush on; заодно сняв с нее комментарий, чтобы директивы имели вид:

Сохраним изменения и перезапустим Nginx

Обновляем страницу с ошибкой и видим что версия Nginx больше не отображается.

Создадим пользователя для работы с виртуальным хостом
Назовем его example:
При создании пользователя, отключим ему доступ к шеллу, так безопаснее.

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

Придумаем для пользователя example пароль:

Создадим необходимые, для работы WEB сайта, директории:

Предоставляем пользователю example права на них:

Предоставим Nginx доступ в домашнюю директорию пользователя example, добавив пользователя nginx в группу example

А также предоставим группе example, в которую входит пользователь nginx, права на чтение и выполнение внутри домашней директории пользователя example:

Создадим виртуальный хост Nginx

Настаиваем первый виртуальный хост Nginx, назовем его example.org

С содержимым:
(Здесь я привожу только базовые настройки, чтобы работало, если нужно добавить что-то дополнительно, то вы сделаете это сами, исходя из ваших задач )

Сохраняем изменения и выходим

Переходим к установке php-fpm

Переходим к конфигурационном файлу:

находим строку ;cgi.fix_pathinfo=1 и снимаем с нее комментарий, это закрывает уязвимость с произвольным выполнением кода, чтобы выглядело:

Нам также требуется перенастроить php-fpm на работу по пользователя Nginx т.к. у пользователя nginx, который входит в в группу example, есть права на выполнение скриптов, но для этого нам требуется изменить пользователя и группу под которой работает php-fpm, по умолчанию, это группа и пользователь apache нам это надо изменить, переходим к файлу:

Меняем apache на nginx чтобы выглядело

Сохраняем изменения и выходим

Добавим php-fpm в автозагрузку и запустим:

Создадим тестовый файл, чтобы проверить работоспособность PHP5:

Чтобы подключиться к нашему серверу по имени example.org требуется иметь настроенную DNS ону для данного домен, но можно просто добавить запись в файл hosts.

переходим по адресу httр://example.org/test.php
Получаем вот такую страницу, нас интересует строка Server API (на скриншоте подчеркнуто красным) там видно кто обработал данный файл.

Все отлично PHP обрабатывается, сайт открывается, переходим к установке MySQL

Устанавливаем Mysql сервер

На этом, с настройкой основного функционала web сервера на CentOS, можно и закончить, если есть вопросы прошу в комментарии, нашли ошибку, пишите в личку.

Источник

NGINX на CentOS 7 — установка и настройка

Для получения последней версии NGINX создаем файл с настройками нового репозитория:

И приводим его к следующему виду:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

Обновляем систему и список пакетов:

* если система запросит подтверждение, отвечаем Y.

Устанавливаем NGINX следующей командой:

По умолчанию, в CentOS работает брандмауэр, поэтому необходимо добавить рабочие порты 80 (http) и 443 (https) в правила на исключение:

* в данном примере добавлены порты 80 и 443. Первый используется в NGINX по умолчанию. Если планируется использовать другой, необходимо добавить его. Или наоборот — если не запланирована работа по безопасному протоколу https, можно его не включать.

Теперь добавляем NGINX в автозапуск при загрузке CentOS

systemctl enable nginx

И запускаем веб-сервер:

systemctl start nginx

Для проверки запустите браузер на другом компьютере и введите в адресную строку IP-адрес сервера, который был настроен. Должна загрузиться тестовая страница, наприимер:

NGINX + PHP + PHP-FPM

В чистом виде, веб-сервер NGINX используется редко. Настроим связку с PHP и его обработчиком — PHP-FPM.

Для начала, устанавливаеми тот и другой следующими командами:

yum install php-fpm

Разрешаем автозапуск php-fpm и запускаем его:

systemctl start php-fpm

systemctl enable php-fpm

Настройка NGINX для работы с PHP и PHP-FPM

Открываем настройки сайта по умолчанию:

Редактируем секцию location:

location / <
root /usr/share/nginx/html;
index index.php;
>

* здесь мы поменяли index.html на index.php. Эта настройка позволит автоматически искать и запускать файл index.php, если путь к скрипту не указан явно.

Приводим к следующему виду секцию server:

* где /usr/share/nginx/html — корневой путь по умолчанию для хранения сайта; 9000 — порт, на котором работает php-fpm.

Переименовываем индексный файл для текущего сайта по умолчанию:

mv /usr/share/nginx/html/index.html /usr/share/nginx/html/index.php

Читайте также:  перивентрикулярный очаг головного мозга что это

Отредактируем его (содержимое заменим на это):

Источник

Установка и оптимальная настройка Nginx + LAMP (CentOS 7)

Недавно приняли решение переехать с хостинга на VPS, будем использовать: CentOS 7, Nginx, Apache, PHP, MySQL. Несмотря на большое количество статей на эту тему, многие аспекты не упоминаются, поэтому выкладываем эту статью чтобы услышать мнение знающих и опытных людей. Настраивать сервер как Вы уже поняли будем первый раз, поэтому о актуальности статьи можно будет судить из комментариев. Nginx будет отдавать статику, а динамику Apache (скрипты PHP), чтобы снизить нагрузку на сервер.

Все настройки будем применять на рабочем сервере нашего проекта с конфигурацией сервера: CPU — 2 × 2000 МГц и RAM — 2048 МБ.

Для начала работы находим подходящий VPS с предустановленной CentOS 7, к серверу будем подключаться по SSH через PuTTY.

Вводим название хоста и порт, нажимаем Open:

Далее вводим логин [Enter], потом пароль (обратите внимание, ввод пароля не отображается) [Enter]:

Обновить систему, при этом сохранить устаревшие версии пакетов:

Создаём файловую структуру и пользователей под сайты.

Создаём каталог (папку) для файлов под все сайты:

Под каждый отдельный сайт выполните такие действия.

Содержимое каждого сайта будет находиться в собственном каталоге, поэтому создаём нового пользователя и отдельный каталог для разграничения прав доступа:
-b папка в которой будет создан каталог пользователя
-m создать каталог
-U создаём группу с таким же именем как у пользователя
-s /bin/false отключаем пользователю shell

]# chmod 755 /website/name.site

Инструкции по установке приведены на официальном сайте Nginx.

Для настройки репозитория yum в CentOS создаём файл /etc/yum.repos.d/nginx.repo:

]# cd /etc/yum.repos.d
[root@test

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1

]# systemctl start nginx.service

]# systemctl stop nginx.service

Устанавливаем Apache и PHP.

Устанавливаем Apache (в CentOS — httpd):

]# systemctl start httpd.service

]# systemctl stop httpd.service

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

]# systemctl enable nginx.service

user nginx;
worker_processes 2;
pid /var/run/nginx.pid;

events <
worker_connections 1024;
multi_accept on;
>

http <
error_log /var/log/nginx/error.log warn;
access_log off;

charset utf-8;
server_tokens off;

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

reset_timedout_connection on;
client_header_timeout 15;
client_body_timeout 30;
send_timeout 15;
keepalive_timeout 5;
keepalive_requests 30;
client_max_body_size 8m;

limit_rate_after 30M;
limit_rate 500K;

open_file_cache max=10000 inactive=3m;
open_file_cache_min_uses 2;
open_file_cache_valid 1m;

sendfile on;
tcp_nodelay on;
tcp_nopush on;

open_file_cache max=10000 inactive=3m;

Для каждого сайта создаём виртуальный хост Nginx.

Чтобы Nginx получил доступ к файлам сайта, добавим пользователя nginx в группу name.site:

server <
listen 80;
server_name name.site www.name.site;
#access_log /website/name.site/logs/nginx_access.log;
error_log /website/name.site/logs/nginx_error.log;

* \.(css|js|png|gif|jpg|jpeg|ico)$ <
root /website/name.site/www;
expires 1d;
>

error_page 500 502 503 504 /50x.html;
location = /50x.html <
root /usr/share/nginx/html;
>
>

* \.(css|js|png|gif|jpg|jpeg|ico)$ <
root /serves/name.site/www;
expires 1d;
>

Посмотрите какой именно модуль Apache у вас установлен. У меня — apache2-mpm-prefork (один процесс с одним потоком будет обрабатывать одно соединение, рекомендуется как безопасный совместно с PHP):

ServerRoot «/etc/httpd»
DocumentRoot «/website»
Include conf.modules.d/*.conf

User apache
Group apache

Listen 127.0.0.1:8080
ServerName 127.0.0.1:8080
ServerAdmin root@localhost

ServerSignature Off
ServerTokens Prod

RLimitMEM 786432000
TimeOut 250

AddDefaultCharset utf-8
DefaultLanguage ru

KeepAlive Off
ContentDigest Off
EnableSendfile off

ErrorLog «logs/error_log»
LogLevel error

DirectoryIndex index.php
AllowOverride none
Require all denied

StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 30
MaxRequestsPerChild 2500

Require all denied

Для каждого сайта создаём виртуальный хост Apache.

Добавляем пользователя apache в группу каждого сайта:

ServerName name.site
ServerAlias www.name.site

AllowOverride None
Require all granted

ErrorLog /website/name.site/logs/error.log
CustomLog /website/name.site/logs/requests.log combined

Блок VirtualHost, указывается какой порт слушать:

CustomLog /website/name.site/logs/requests.log combined

Проверка Nginx и Apache.

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

]# systemctl enable httpd.service

]# touch /website/name.site/www/index.php
[root@test

]# cp /etc/httpd/conf.d/php.conf /etc/httpd/sites-enabled/php.conf

]# systemctl start nginx.service
[root@test

]# systemctl start httpd.service

engine = On
expose_php = Off
short_open_tag = Off
zlib.output_compression = Off
disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source, etc

display_startup_errors = Off
display_errors = Off
log_errors = On
error_log = «/usr/local/zend/var/log/php.log»
ignore_repeated_errors = Off
ignore_repeated_source = Off
html_errors = On

implicit_flush = Off
output_buffering = 4K
realpath_cache_size = 2M
realpath_cache_ttl = 1800
zend.enable_gc = On

max_input_time = 200
max_execution_time = 30
file_uploads = On

memory_limit = 256M
post_max_size = 8M
upload_max_filesize = 2M
max_file_uploads = 4

extension_dir = «/usr/local/zend/lib/php_extensions»
date.timezone = Europe/Moscow
default_mimetype = «text/html»
default_charset = «UTF-8»

variables_order = «CGPS»
register_argc_argv = Off
auto_globals_jit = On
enable_dl = Off

allow_url_fopen = On
allow_url_include = Off

disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source, etc

Устанавливаем и настраиваем MySQL.

Немного про безопасность.

Под root заходить нежелательно, поэтому создаём нового пользователя:

]# service sshd restart

P.S. Можно использовать Nginx с php-fpm, но есть такое мнение, что при правильно настроенном Apache особой разницы в производительности не наблюдается.

Особое внимание хотелось обратить на безопасность и производительность сервера, поэтому если вы нашли ошибки или недочёты, просим написать это в комментариях и в случае необходимости мы внесём изменения в статью.

Источник

Образовательный портал