Php nginx

nginx-php-fpm-mysql-debian-000.pngNginx — простой, но в тоже время быстрый и надежный веб-сервер, не перегруженный лишними функциями и отлично подходящий для работы в высоконагруженных системах. Особую популярность он завоевал как кеширующий прокси, позволяя существенно снизить нагрузку, на стоящий за ним веб-сервер, чаще всего Apache, но сегодня он все чаще используется как самостоятельный сервер. В нашей статье мы расскажем, как настроить Nginх для работы с PHP-приложениями при помощи менеджера процессов PHP-FPM на платформе Debian/Ubuntu.

Сразу охладим некоторые горячие головы — бытует мнение что Nginx быстрее Apache и вообще является чуть ли не панацеей от всех проблем. Но это не так. Nginx первоначально разрабатывался как кеширующий прокси и поэтому отлично справляется со своей основной задачей — кешированием и отдачей статического содержимого, что в общем-то и является основной задачей веб-сервера. В силу своей архитектуры он показывает выдающуюся производительность при множественных запросах даже в условиях ограниченных ресурсов.

В тоже время Nginx не умеет обрабатывать динамическое содержимое, для этого он должен отдать запрос серверу приложений одним из поддерживаемых способов, например, через FastCGI, дождаться и получить ответ, а затем уже отдать его клиенту. В среднем, что касается производительности PHP, то FastCGI будет в среднем в 10-15% медленнее, чем Apache + mod-php. Поэтому, если производительность вашего сервера упирается в производительность PHP, то никакой Nginx вам не поможет, а наоборот, только усугубит ситуацию.

Кроме того, работа с Nginx более сложна, чем с Apache, если с последним все популярные веб-движки работают из коробки, то для полноценной работы с Nginх может потребоваться дополнительная настройка. Исходя из этого мы не рекомендуем использовать Nginx, как самостоятельный веб-сервер, начинающим веб-мастерам, так как при отсутствии опыта и квалификации довольно трудно понять, связана ошибка с веб-приложением или веб-сервером. Да и на форумах для новичков вам вряд ли кто-нибудь подскажет по такой связке, а там, где «тусуются» работающие с Nginx специалисты подобные вопросы обычно не поднимаются, так как участники давно их «переросли».

Если вам нужен просто работающий веб-сервер, и вы не готовы глубоко вникать в тему, то лучше обратите свое внимание на Apache, если же вы готовы потратить некоторое время и силы на изучение и настройку, а также готовы самостоятельно решать возникающие проблемы, то добро пожаловать!

Установка Nginx

Несмотря на то, что Nginх присутствует в репозиториях основных дистрибутивов, мы рекомендуем использовать версию от разработчиков, это позволит более оперативно получать новые версии и новые возможности. Существует две ветки Nginx, основная и стабильная, первая имеет нечетную, вторая четную нумерацию. Разработка происходит следующим образом, все изменения основной ветки, скажем 1.7 фиксируются и переходят в стабильную 1.8, которая перестает разрабатываться и получает только обновления безопасности, основная ветка после этого получает номер 1.9 и в нее вносятся все изменения.

Сами разработчики рекомендуют использовать основную ветку, если только нет каких-то особых требований по совместимости. По своему опыту можем сказать, что основная ветка достаточно стабильна и может быть использована на рабочих серверах.

Для подключения репозиториев Nginx создадим в папке /etc/apt/sources.list.d файл nginx.list:

touch /etc/apt/sources.list.d/nginx.list

Потом добавим в него строки. Для Debian:

deb http://nginx.org/packages/mainline/debian/ codename nginx
deb-src http://nginx.org/packages/mainline/debian/ codename nginx

Для Ubuntu

deb http://nginx.org/packages/mainline/ubuntu/ codename nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ codename nginx

где codename — кодовое имя дистрибутива, например, jessie для Debian 8 или trusty для Ubuntu 14.04. Если вам не нужны исходные тексты, то репозитории deb-src можно не подключать (т.е. не добавлять эти строки).

Затем скачаем и установим PGP-ключ, необходимый для проверки подлинности:

cd
wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key

После чего можно обновить список пакетов и установить nginx:

apt-get update
apt-get install nginx

Теперь, если набрать в браузере адрес нашего сервера, вы увидите стандартную заглушку Nginx.

nginx-php-fpm-mysql-debian-001.pngТакже проверить состояние веб-сервера можно командой:

service nginx status

nginx-php-fpm-mysql-debian-002.pngТеперь перейдем к настройке. Для этого перейдем в папку /etc/nginx и откроем файл nginx.conf, мы будем перечислять настройки в порядке их нахождения в файле, если данной опции нет — ее следует добавить.

Прежде всего изменим пользователя, от имени которого работает nginx, в Debian/Ubuntu веб-сервер работает от пользователя www-data и чтобы избежать в будущем возможных коллизий с правами доступа приведем строку к виду:

user www-data;

Затем укажем количество рабочих процессов, рекомендуется выбирать их количество по числу доступных процессорных ядер, в нашем случае 2:

worker_processes 2;

Приведем секцию events к виду:

events {
worker_connections 1024;
use epoll;
}

Первая опция задает количество соединений на рабочий процесс, вторая задает метод обработки соединений, явно укажем наиболее эффективный для Linux.

Теперь перейдем в секцию http и после строки

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

зададим следующие опции:

client_header_timeout 30;
client_body_timeout 30;
reset_timedout_connection on;

Они задают таймаут (в секундах) на чтение клиентом тела и заголовка запроса, последняя опция разрешает сброс соединений по таймауту.

client_max_body_size 32m;
client_body_buffer_size 128k;

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

sendfile on;
tcp_nopush on;

Также разрешим передачу файлов и оптимизируем этот процесс.

Изменим параметр:

keepalive_timeout 30;

Он задает таймаут постоянных (keep-alive) соединений, которые позволяют повысить производительность протокола HTTP/1.1, но незакрытое соединений впустую использует ресурсы сервера и поэтому такие соединения следует принудительно завершать.

Ниже зададим параметры gzip-сжатия:

gzip on;
gzip_disable "msie6";
gzip_proxied any;
gzip_min_length 1024;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript application/atom+xml application/rdf+xml;

Первая опция включает gzip-сжатие, затем отключаем его для младших версий IE (6 и ниже), если такие вдруг зайдут на наш сервер, разрешим сжимать проксированные запросы, это нужно для сжатия динамического содержимого, затем укажем минимальный размер сжимаемого ответа, чтобы не тратить ресурсы сервера на сжатие коротких ответов. Ниже задается уровень сжатия и типы сжимаемых данных.

В самом конце, после

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

добавим

include /etc/nginx/sites-enabled/*;

Это позволит подключать конфигурации виртуальных хостов из папки sites-enabled.

Сохраним и проверим конфиг командой:

nginx -t

После чего можно перезапустить nginx:

service nginx restart

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

mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled

В первой будут хранится настройки сайтов, а во второй мы будем создавать символьные ссылки для того, чтобы подключить настройки сайта к конфигурационному файлу nginx.

Перед тем как описывать виртуальные хосты, создадим структуру папок для их хранения:

mkdir /var/www
mkdir /var/www/example.org

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

touch /etc/nginx/sites-available/example.org.conf

Какого-либо стандарта по названию файлов у nginx нет, поэтому можете придерживаться своей системы, главное, чтобы вам было понятно, какой файл за какой сайт отвечает. Теперь откроем его и внесем следующий текст:

server {
listen 80;

server_name example.org;
charset utf-8;

root /var/www/example.org;
index index.html index.htm index.php;

access_log /var/log/nginx/example.org_access.log;
error_log /var/log/nginx/example.org_error.log;
}

server {

listen 80;

server_name www.example.org;
rewrite ^(.*) http://example.org$1 permanent;
}

Его синтаксис достаточно прост и понятен, первая секция server задает основные параметры сайта, его имя, кодировку, расположение корневой директории и файлов логов. Вторая секция нужна для перенаправления сайта с www на без www.

Если вы хотите сделать данный виртуальный хост сайтом по умолчанию, т.е. тем на который будут переадресовываться все запросы, для которых nginx не нашел подходящего виртуального хоста или без имени сервера вообще, например, по IP-адресу, то добавьте к директиве listen опцию default, начиная с версии 0.8.1 можно использовать опцию default_server:

 listen 80 default;

Директива index указывает индексные файлы, которые будет искать в данном расположении веб-сервер в порядке их перечисления, так если в директории имеются одновременно index.html и index.php — использоваться всегда будет первый. Указанная конструкция универсальна, но на практике лучше указать один тип индексного файла, тот что реально используется.

Сохраняем конфигурацию и подключаем ее к nginx:

ln -s /etc/nginx/sites-available/example.org.conf /etc/nginx/sites-enabled/

Проверяем конфигурацию и заставим nginx ее перечитать:

nginx -t
service nginx reload

Теперь поместим в корневую директорию сайта файл index.html со следующим содержимым:

<body><h1>OK!</h1></body>

Теперь набираем в браузере имя нашего сайта и убеждаемся, что все работает.

nginx-php-fpm-mysql-debian-003.pngУстанавливаем PHP-FPM

Для работы с современными веб-приложениями вам потребуется поддержка популярного скриптового языка PHP, Nginx поддерживает работу через FastCGI, но не имеет собственного менеджера процессов, поэтому мы будем использовать для этой цели PHP-FPM.

Важно! В современных дистрибутивах используется более новая версия PHP 7, чтобы работать с новой версией языка вместо php5 в приведенных ниже командах следует указывать php7.0, например, вместо php5-imagick нужно набрать php7.0-imagick

Установим его:

apt-get install php5-fpm

Все необходимые пакеты и интерпретатор PHP будут установлены по зависимостям. Также имеет смысл сразу установить некоторые модули PHP, например, для работы с графикой:

apt-get install php5-gd php5-imagick

Настройки PHP-FPM по умолчанию достаточно оптимальны и никаких вмешательств в них не требуется, однако следует подправить некоторые опции PHP, для этого откроем /etc/php5/fpm/php.ini и найдем там следующие опции:

post_max_size = 8M

этот параметр задает максимальный размер данных загружаемых методом POST, влияет, например, на размер загружаемых средствами PHP файлов. По умолчанию 8 МБ, можем изменить по собственным потребностям.

Если вы будете использовать PHP-приложения (CMS) работающие в кодировке отличной от UTF-8, то приведите к следующему виду опцию:

default_charset = ""

Затем раскоменнтируйте и установите опцию:

cgi.fix_pathinfo=0

Это закроет возможную уязвимость в PHP.

Еще ниже надо найти и увеличить размер максимально загружаемого файла:

upload_max_filesize = 8M

Данное значение должно быть больше или равно значению post_max_size, иначе вы будете ограничены в загрузке файлов меньшим из указанных в этих опциях размером.

Сохраним изменения и перезапустим PHP-FPM:

service php5-fpm restart

Теперь следует научить Nginx работать с PHP-FPM, для этого в файл конфигурации виртуального хоста нужно добавить настройки, которые будут перенаправлять (проксировать) все запросы к динамическому содержимому на FastCGI-шлюз.

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

Создадим директорию для хранения шаблонов:

mkdir /etc/nginx/templates

После чего создадим в ней шаблон для работы с PHP-FPM:

touch /etc/nginx/templates/php-fpm.conf

Откроем его и добавим следующий текст:

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

Указанный нами блок location будет обрабатывать все запросы к php-файлам, первая директива в нем проверяет наличие запрошенного файла, в противном случае отдавая ошибку 404. Вторая устанавливает параметры соединения с FastCGI-шлюзом, в нашем случае с PHP-FPM, соединение устанавливается через UNIX-сокет, как наиболее производительный способ соединения. Затем указывается индексный файл и подгружаются настройки Nginx для FastCGI.

Важно! Обратите внимание, что PHP 7 имеет иной путь к UNIX-сокету, поэтому следует указывать /var/run/php/php7.0-fpm.sock

В принципе этого уже достаточно, чтобы работать с динамическим содержимым, но не будем спешить и добавим в файл еще несколько блоков.

location ~ /.ht {
deny all;
}

Несмотря на то, что Nginx не использует htaccess-файлы, они, вместе с файлами htpasswd могут находиться в директории сайта, особенно если до этого он работал на Apache и будет правильно запретить доступ к ним в целях безопасности.

Также следует настроить кэширование статического содержимого:

location ~* .(gif|jpeg|jpg|txt|png|tif|tiff|ico|jng|bmp|doc|pdf|rtf|xls|ppt|rar|rpm|swf|zip|bin|exe|dll|deb|cur)$ {
expires 168h;
}

Данная конструкция включает кэширование на стороне браузера, сообщая тому, что «срок годности» указанных файлов — 168 часов (1 неделя) и при последующих обращениях на ваш сайт данные файлы следует брать из локального кэша. Мы привели примерный список, вы можете самостоятельно добавить в него нужные расширения файлов.

Также зададим кэширование для скриптов и стилей:

location ~* .(css|js)$ {
expires 180m;
}

Для них установим срок кэширования в 3 часа, что позволит соблюсти баланс между скоростью применения возможных изменений в этих файлах и уменьшением количества запросов к вашему сайту.

Теперь откроем файл конфигурации виртуального хоста и в конце первой секции server добавим строку подключения шаблона:

include /etc/nginx/templates/php-fpm.conf;

Сохраним все настройки, проверим конфигурацию и перезапустим Nginx.

nginx -t
service nginx reload

Чтобы проверить работу PHP создадим в корневой директории сайта файл test.php со следующим содержимым:

<?php
phpinfo();
?>

Теперь, если обратиться к данному файлу через браузер вы должны увидеть стандартную страницу с информацией о PHP.

interface31.ru

Здравствуйте!

Apache – король веб-серверов, если можно так сказать. Но на пятки ему наступает даже не IIS от Microsoft, не lighttpd, а nginx (произносится как Энджин-Икс, engine с английского мотор, двигатель) нашего соотечественника Сысоева.

Чем он хорош? Говорят, что статика отдаётся гораздо быстрее, чем у Апача, да и динамика я думаю тоже. Он жрёт меньше ресурсов, что может быть критически важно для нагруженных серверов. Раньше мнгоие применял связку nginx+Apache – nginx для отдачи статики (рисунков, js/css etc.), а Апач – для отдачи динамики (PHP/Perl/Python/Ruby etc.). Но теперь nginx можно применять без Апача, так как для него появилось куча плагинов и дополнений, поэтому вместо связки nginx+Apache+PHP (мы тут говорим о PHP-среде) легко настроить просто nginx+php-fpm. Ладно, об нём написано куча литературы, не буду повторяться, опишу лишь процесс установки nginx+php-fpm под Виндовс (Windows).

Хотя, конечно, nginx органичней всего чувствует себя в FreeBSD и Linux (любой Unix-среде, наверное), под Винду он тоже неплохо работает, по крайней мере я его у себя на домашнем компе установил, чтобы тестировать некоторые штуки.

Итак, процесс установки/первичной настройки. Этот процесс расписан здесь: http://nginx.org/ru/docs/windows.html
я приведу лишь выжимку.

Смотрим доступные версии nginx под windows здесь: http://nginx.org/en/download.html
Сейчас есть версия 1.8.0, несколько месяцев назад я устанавливал 1.6.2, которая и сейчас у меня работает.
Итак, скачиваем текущую версию под windows: http://nginx.org/download/nginx-1.8.0.zip

Для удобства примем то, что я пользую сейчас:
Создаём папку C:usr. Заходим в неё и распаковываем nginx-1.8.0.zip здесь (это можно проделать через GUI-интерфэйс).
Затем запускам териминал и заходим:

Тут Виньда может выкинуть окошко с предупреждением (см. скриншот), что nginx пытается получить доступ в сеть. Мы конечно же разрешаем.

allow nginx to network

Проверяем, запущен ли nginx и видим результат:

Остановим nginx нормально: nginx -s quit. Есть ещё несколько полезных команд для nginx:
nginx -s stop – останов nginx в любом случае (применяется, если nginx -s quit не сработает).
nginx -s reload – перезагрузка .conf файлов (конфигурации)
nginx -s reopen – переоткрытие .log файлов (полезна, если мы удалили или переместили логи при работающем nginx).

Итак, мы остановили nginx сейчас, так как прежде чем его запускать, надо правильно настроить .conf файлы. Они расположены в папке conf. Стандартный файл настройки – nginx.conf, из него директивой include могут подсоединяться другие файлы из этой (впрочем, и из любой другой) папки.
Например, директива include mime.types; в секции http присоединит файл mime.types, в котором находится определения всех стандартных MIME-типов. Впрочем, сам конфиг я обсуждать здесь не буду, о нем много написано в инете, приведу лишь пример своего конфига с краткими пояснениями.

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

  worker_processes 1;    error_log logs/error.log;  #error_log logs/error.log notice;  #error_log logs/error.log info;    events {   worker_connections 1024;  }      http {   include 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 logs/access.log main;     # sendfile on;   #tcp_nopush on;      keepalive_timeout 65;     # Сжатие gzip на лету   gzip on;     server {   # listen 801;   server_name localhost;  				autoindex on; # allow dir listing  				root E:/sites;  				   #charset koi8-r;   #access_log logs/host.access.log main;    	#   # запретим доступ ко всем файлам, начинающимся с точки   	#   location ~ /. {   deny all;   }     location / {   root E:/sites;   index index.html index.htm index.php;   }     #error_page 404 /404.html;     # redirect server error pages to the static page /50x.html   #   error_page 500 502 503 504 /50x.html;   location = /50x.html {   root html;   }    	#   # передаем все PHP скрипты серверу FastCGI, слушающему на 127.0.0.1:9123   #   location ~ .php$ {   root E:/sites;   fastcgi_pass 127.0.0.1:9123;   fastcgi_index index.php;   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;   include fastcgi_params;   }   }  }    

Итак, в этом конфиге большинство настроек оставлено по умолчанию, а корень сайтов у нас в E:sites, что в первую очередь делает команда root E:/sites. Обратите внимание на прямые слэши в стиле Unix в пути к папкам и файлам – это требование nginx, даже для Windows-версии.

Теперь можно запускать nginx (start nginx), если мы его останавливали перед этим, либо применить команду nginx -s reload, чтобы сервер перечитал конфиги без остановки своей работы, что полезно при работающем внешнем сайте.

Итак, теперь надо настроить PHP-FPM для Windows. Учтите, что мы уже в нашем конфиге сделали его поддержку на порту 9123 (под-секция location ~ .php$)

1. Скачиваем свежий (или версию по выбору) .zip-архивчик с http://windows.php.net/download/. Архивчик должен быть VC11/VC9, что содержит в себе FastCGI-файл (phpcgi.exe).
2. Создаем папку в C:usr, например с именем php-5.6.9 и распаковываем в неё содержимое архива.
3. Редактируем файл php.ini в соотв. со своими предпочтениями, единственное, убедиться, что у нас есть такая строка:

  # nginx security setting  cgi.fix_pathinfo=0  

Она закрывает одну из старых уязвимостей nginx. Далее можно подключить PHP-модули по вкусу, расскоментировав их в соотв. секции и произвести другие настройки.

4. Теперь создадим .bat-файл, например php-fpm-start.bat с таким содержимым:

и запустим его. Если мы его запускаем из GUI, то появится окно консоли и останется открытым, придётся с этим смириться.

Всё, наш сервер мы уже давно настроили на соединение с этим PHP процессом.

Для проверки создаём файл index.php в папке E:sites с таким содержимым:

Теперь направляем наш любимый браузер на http://localhost и видим такую примерно картину:

phpinfo() начало

phpinfo

phpinfo() с версией nginx

phpinfo nginx

Здесь же можно посмортеь переменные среды и подключаемые модули. Для совместимости nginx создет переменные среды, совместимые с апачевскими, например _SERVER[“SERVER_NAME”], _SERVER[“DOCUMENT_ROOT”], _SERVER[“REQUEST_URI”], _SERVER[“SCRIPT_NAME”] и т.д., и мы можем использовать их в своих PHP-сценариях, как делали это в случае с Апачем.

До свидания!

atzar.ru

Немного теории о Nginx php-fpm

В веб-сервере Apache php является подключаемым модулем, такая связка работает медленно и потребляет много ресурсов. Из-за этой неудачной архитектуры, Apache обычно не может обработать более 200-300 запросов в секунду даже на очень мощном сервере. В Nginx же применена другая архитектура — сам веб-сервер Nginx обрабатывает только запросы на статику (картинки, css и прочее), а выполнение php отдает другому программному серверу — php-fpm. Php-fpm (FastCGI Process Manager) — это полностью самостоятельное программное обеспечение, его можно установить на одном сервере с Nginx (для небольших проектов), либо вынести на отдельный сервер. Большие проекты обычно обслуживают по несколько серверов с Nginx, php-fpm и базами данных. 

Заменяя сервер Apache на Nginx php-fpm, вы сможете ускорить обработку запросов пользователей и сильно сэкономить на «железе». Веб проект с посещаемостью до 10000 уникальных посетителей в день вполне сможет жить на самом дешевом виртуальном сервере от DigitalOcean за 5$ в месяц. Кстати, если вы перейдете по этой ссылке — DigitalOcean, вы получите 10$ при регистрации, а это 2 месяца использования виртуального сервера. Никаких дополнительных условий при этом там нет.

Но перейдем к делу. Я буду описывать процесс установки и настройки на примере CentOS 6.x, но он не сильно будет отличаться и для других дистрибутивов Linux.

Установка Nginx: 

  • /var/run/php5-fpm.sock уже должен присутствовать на сервере? в ubuntu 16.04 не нашел такого файла в /var/run
  • Эмулятор Андроид, установка и настройка в Windows
  • Установка MySQL на Linux: подробная инструкция
  • Настройка айфона, нужна инструкция
  • 1. Установка репозитария Nginx: в стандартных дистрибутивах Linux по умолчанию нет дистрибутива Nginx, поэтому добавим его в систему.

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

    Далее нажмите i для перехода в режим редактирования редактора vi и вставьте:

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

    Далее нажмите «:wq» и Enter для сохранения и выхода. Все, теперь Nginx доступен для автоматической установки через менеджер пакетов yum. Если вы используете другой дистрибутив Linux — перейдите на эту страницу для получения инструкций именно для вашей системы.

    2. Установка Nginx из репозитария: теперь просто выполните команду установки.

    yum install nginx

    Установка php-fpm:

    Php-fpm доступен по всех современных дистрибутивах по умолчанию, поэтому просто выполните установку:

    yum install php-fpm

    При этом будут установлен сам сервер и все вспомогательные пакеты. Если что-то не получается, можно собрать php-fpm из исходников самостоятельно, для подробных инструкций перейдите сюда.

    Настройка и запуск Nginx php-fpm:

    1. Начнем с php-fpm: откройте файл конфигурации

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

    и пропишите там работу через сокет (так будет работать быстрее):

    listen = /var/run/php5-fpm.sock

    измените существующую строчку «listen =» или добавьте новую и удалите старую.

    2. Теперь перейдем к Nginx: создайте файл конфигурации для своего первого сайта (site1 замените на название сайта, хотя будет работать и так)

    vi /etc/nginx/conf.d/site1.conf

    Ниже приведена минимальная конфигурация, можете просто ее скопировать. Все что надо заменить, выделено красным. В данной конфигурации настроена отдача статических файлов и доступ к одному php-файлу — index.php. Все современные CMS запускаются одним файлом, поэтому такая конфигурация подойдет для большинства задач. Если вам надо запускать другие php-файлы, пропишите их отдельно. В данной конфигурации файлы сайта надо положить в папку /home/mysite/public_html/

    server {
            listen [ip адрес сервера]:80;
            server_name voprosoff.net;
            resolver 8.8.8.8;
            error_log /var/log/nginx/voprosoff_net_error.log warn;
            root /home/voprosoff_net/public_html;
            access_log /var/log/nginx/voprosoff_net-access.log;
            charset utf-8;
            index index.php;
            location ~ .*(gif|jpg|jpeg|png|ico|swf|txt|pdf|doc|docx|exe|xls|xlsx|strings|zip|rar|7z)$ {
                expires 1y;
            }
            
            location ~ .*(html|htm|js|css)$ {
                expires 1y;
            }

            location ~ ^/index.php {
                    fastcgi_pass unix:/var/run/php5-fpm.sock;
                    fastcgi_param SCRIPT_FILENAME /home/voprosoff_net/public_html/index.php;
                    include /etc/nginx/fastcgi_params;
                    fastcgi_param SCRIPT_NAME /index.php;
            }    

    }    

    Теперь положите файлы вашего первого сайта в папку /home/site1/public_html/ и мы готовы к запуску.

    3. Запуск nginx  php-fpm:

    service nginx start

    service php-fpm start

    Если вы все сделали правильно и нигде не ошиблись, результат будет такой:

    Первый запуск nginx и php-fpm

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

    Я всегда рад помочь!

    Удачи вам!

    voprosoff.net

    Вводная

     

    • Linux — операционная система Linux;
    • Nginx(читается EnginX) — веб-сервер;
    • MariaDB / MySQL — СУБД;
    • PHP — язык программирования, используемый для создания веб-приложений (помимо PHP могут подразумеваться другие языки, такие как Perl и Python).

     

    Шаг первый — установка веб-сервера Nginx

    sudo apt-get update  sudo apt-get install nginx  

    Теперь сервер Nginx установлен.
    Проверить его работу, можно открыв браузер и перейдя на IP адрес того компьютера на котором устанавливали Nginx: http://server_domain_name_or_IP

    Если это ваш локальный компьютер то достаточно набрать http://localhost

    Вы должны увидеть стартовую страницу Nginx:

    Php nginx
    Страница приветствия Nginx

    Старт и остановка сервера осуществляется командами:

    sudo service nginx start  sudo service nginx stop  

    Так как у меня первоначально стоял Apache2, пришлось сначала остановить его и затем запустить Nginx:

    sudo service apache2 stop  sudo service nginx start  

    Шаг второй — устанавливаем базу данных MySQL

     

    sudo apt-get install mysql-server

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

    Все, MySQL установлен, но еще не настроен до конца.
    Во-первых, необходимо создать первичную структуру для хранения данных самой MySQL. Мы можем это сделать командой:

    sudo mysql_install_db

    Далее нам необходимо запустить сценарий безопасности, который изменит некоторые настройки идущие по умолчанию:

    sudo mysql_secure_installation

    Вам нужно будет ввести пароль администратора MySQL, который Вы выбрали во время установки.

    Далее, вам будет предложено изменить его. Если в этом нет необходимости, введите «N» и нажмите «ENTER». После этого вам будет предложено удалить некоторых тестовых пользователей и базы данных. Вы должны просто нажимать «ENTER» при появлении вопросов, чтобы удалить опасные настройки по умолчанию.

    После того, как сценарий завершиться, MySQL готов к использованию.

    Шаг третий — установка PHP

    После установки сервера Nginx и MySQL нам необходимо связующее звено — серверный язык/ который будет отрабатывать динамические запросы.
    Поскольку Nginx не содержит встроенной обработки PHP как и некоторые другие веб-серверы, нам нужно установить php5-fpm (Менеджер процессов FastCGI). Благодаря ему Nginx сможет обрабатывать PHP запросы.

    Помимо самого модуля, нам потребуется вспомогательный пакет, который позволит PHP общаться с нашей базы данных.

    Давайте произведем установку, набрав в консоли:

    sudo apt-get install php5-fpm php5-mysql

    Повышаем безопасность PHP-FPM

    Для повышения безопасности работы с PHP нам надо произвести донастройку.
    Отроем на редактирование файл:

    sudo nano /etc/php5/fpm/php.ini

    после чего, найдем строчку содержащую «cgi.fix_pathinfo», которая по-умолчанию выглядит так:

    ;cgi.fix_pathinfo = 1

    раскомментируем ее и изменим значение, должно получиться так:

    cgi.fix_pathinfo = 0

    Сохраните измененный файл.
    Это призвано устранить опасность неправильно трактования (и возникающей уязвимости) запросов вида «/image.gif/foo.php»

    Шаг четвертый — настройка работы NGINX с PHP

    Теперь у нас есть все составляющие сервера. Нам необходимо лишь связать NGINX и PHP для того чтоб он мог отрабатывать динамический контент.
    Сделаем настройку так называемых серверных блоков(то же самое что виртуальные хосты у Apache)

    sudo nano /etc/nginx/sites-available/default

    Без комментов этот блок смотрится примерно так:

    server {   listen 80 default_server;   listen [::]:80 default_server ipv6only=on;     root /usr/share/nginx/html;   index index.html index.htm;     server_name localhost;     location / {   try_files $uri $uri/ =404;   }  }  

    В него нужно внести небольшие изменения.

    Во-первых, нужно внести index.php как первое значение директивы index, чтобы индексные файлы PHP обслуживались при запросе каталога.

    На месте директивы server_name, надо указать доменное имя или общедоступный IP сервера.

    Конфигурационный файл включает в себя несколько закомментированных строк, которые определяют процедуры обработки ошибок. Их нужно раскомментировать.

    Также нужно будет раскомментировать часть другого раздела и добавить директиву try_files, чтобы убедиться, что Nginx не передает подозрительные запросы на процессор PHP.

    В приведенном ниже блоке кода изменения выделены красным:

    server {   listen 80 default_server;   listen [::]:80 default_server ipv6only=on;     root /usr/share/nginx/html;   index index.php index.html index.htm;     server_name server_domain_name_or_IP;     location / {   try_files $uri $uri/ =404;   }     error_page 404 /404.html;   error_page 500 502 503 504 /50x.html;   location = /50x.html {   root /usr/share/nginx/html;   }     location ~ .php$ {   try_files $uri =404;   fastcgi_split_path_info ^(.+.php)(/.+)$;   fastcgi_pass unix:/var/run/php5-fpm.sock;   fastcgi_index index.php;   include fastcgi_params;   }  }  

    Вот и все — мы настроили сервер на основе NGINX для нашей Ubuntu 14.04.

    Теперь перезагрузите его, чтобы все наши изменения вступили в силу:

    sudo service nginx restart

    Php nginx

    newwebmaster.ru

    You May Also Like

    Добавить комментарий

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

    Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.