Файл настроек PHP — rpilot62.ru в *nix / PHP 5 / z1q — доступное сайтостроение

егодня займемся поднятием одной из наиболее востребованных ролей любого linux сервера, которые занимают в этом функциональном сегменте лидирующую роль. Настройка web сервера CentOS 7 на базе связки популярного http сервера apache, интерпретатора php и сервера баз данных mysql, или коротко — установка lamp. Данная связка является самой популярной конфигурацией на сегодняшний день среди веб хостинга. Хотя последнее время ей на пятки наступает та же компания, но на базе nginx, возможно уже и опередила, точных данных у меня нет на этот счет.

Web сервер на CentOS 7

Итак, наш веб сервер centos будет состоять из трех основных компонентов — http сервера apache, интерпретатора языка программирования php и сервера баз данных mysql. Познакомимся немного с каждым из них:

  1. Apache — http сервер или просто веб сервер апач. Является кросплатформенным ПО, поддерживающим практически все популярные операционные системы, в том числе и Windows. Ценится прежде всего за свою надежность и гибкость конфигурации, которую можно существенно расширить благодаря подключаемым модулям, которых существует великое множество. Из недостатков отмечают большую требовательность к ресурсам, по сравнению с другими серверами. Держать такую же нагрузку, как, к примеру, nginx, apache не сможет при схожих параметрах железа.
  2. PHP — язык программирования общего назначения, который чаще всего применяется в веб разработке. На сегодняшний день это самый популярный язык в этой области применения. Поддерживается практически всеми хостинг-провайдерами.
  3. Mysql — система управления базами данных. Завоевала свою популярность в среде малых и средних приложений, которых очень много в вебе. Так что, как и php, на сегодняшний день является самой популярной бд, использующейся на веб сайтах. Поддерживается большинством хостингов. В CentOS вместо mysql устанавливается mariadb — ответвление mysql. Они полностью совместимы, возможен в любой момент переход с одной субд на другую и обратно. Последнее время я встречал информацию, что mariadb пошустрее работает mysql и люди потихоньку перебираются на нее. На практике мне не довелось это наблюдать, так как никогда не работал с нагруженными базами данных. А в обычных условиях разница не заметна.

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

Если у вас еще нет сервера, то вам надо выполнить установку CentOS 7. А если сервер уже установлен, то не забудьте его настроить. Рекомендую обратить внимание именно на настройку, так как там много полезной информации, которую в рамках этой статьи я не даю — обновление системы, настройка фаервола, установка редактора и многое другое.

Настройка apache в CentOS 7

В CentOS служба apache называется httpd. Когда я только знакомился с этим дистрибутивом, мне было непривычно. В Freebsd и Debian, с которыми я до этого работал служба веб сервера называлась apache, хотя где-то я замечал, кажется во фрюхе, что файл конфигурации имеет имя httpd.conf. До сих пор я не знаю, почему распространились оба эти названия. Был бы рад, если бы со мной кто-то поделился информацией на этот счет в комментариях.

Теперь приступим к установке apache. В CentOS 7 это делается очень просто:

# yum install -y httpd

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

# systemctl enable httpd

Запускаем apache в CentOS 7:

# systemctl start httpd

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

# netstat -tulnp | grep httpd tcp6       0      0 :::80                   :::*                    LISTEN      21586/httpd

Все в порядке, повис на 80-м порту, как и положено. Уже сейчас можно зайти по адресу http://ip-address и увидеть картинку:

Теперь займемся настройкой apache. Я предпочитаю следующую структуру веб хостинга:

/web раздел для размещения сайтов
/web/site1.ru/www директория для содержимого сайта
/web/site1.ru/logs директория для логов сайта

Создаем подобную структуру:

# mkdir /web && mkdir /web/site1.ru && mkdir /web/site1.ru/www && mkdir /web/site1.ru/logs # chown -R apache. /web

Дальше редактируем файл конфигурации apache — httpd.conf по адресу /etc/httpd/conf. Первым делом проверим, раскомментированна ли строчка в самом конце:

IncludeOptional conf.d/*.conf

Если нет, раскомментируем и идем в каталог /etc/httpd/conf.d. Создаем там файл site1.ru.conf:

# mcedit /etc/httpd/conf.d/site1.ru.conf<VirtualHost *:80> ServerName site1.ru ServerAlias www.site1.ru DocumentRoot /web/site1.ru/www <Directory /web/site1.ru/www> Options FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog /web/site1.ru/logs/error.log CustomLog /web/site1.ru/logs/access.log common </VirtualHost>

Перезапуск apache в centos

Теперь делаем restart apache:

# systemctl restart httpd

Если возникли какие-то ошибки — смотрим лог apache /var/log/httpd/error_log. Если все в порядке, то проверим, нормально ли настроен наш виртуальный хост. Для этого создадим в папке /web/site1.ru/www файл index.html следующего содержания:

# mcedit /web/site1.ru/www/index.html<h1>Апач настроен!</h1># chown apache. /web/site1.ru/www/index.html

Дальше в винде правим файл hosts, чтобы обратиться к нашему виртуальному хосту. Добавляем туда строчку:

192.168.1.25 site1.ru

где 192.168.1.25 ip адрес нашего веб сервера.

Теперь в браузере набираем адрес http://site1.ru. Если видим картинку:

значит все правильно настроили. Если какие-то ошибки, то идем смотреть логи. Причем в данном случае не общий лог httpd, а лог ошибок конкретного виртуального хоста по адресу /web/site1.ru/logs/error.log.

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

Чтобы настроить ротацию логов виртуальных хостов, необходимо отредактировать файл /etc/logrotate.d/httpd. Он создается во время установки apache и включает в себя настройку ротации стандартного расположения логов. А так как мы перенесли логи каждого виртуального хоста в индивидуальную папку, необходимо добавить эти папки в этот файл:

# mcedit /etc/logrotate.d/httpd/web/*/logs/*.log /var/log/httpd/*log { missingok notifempty sharedscripts delaycompress postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript }

Мы добавили одну строку в самое начала файла. Теперь логи всех виртуальных хостов в папке /web будут ротироваться по общему правилу.

В принципе, простейший веб сервер уже готов и им можно пользоваться. Но вряд ли сейчас найдутся сайты со статическим содержимым, которым достаточно поддержки только html. Так что продолжим нашу настройку.

Если вам необходимо организовать работу сайта по протоколу https, то воспользуйтесь руководством по настройке ssl в apache.

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

Для поддержки динамического содержимого сайтов выполним следующий шаг. Установим php в CentOS 7:

# yum install -y php

И следом еще несколько полезных компонентов. Установим популярные модули для php:

# yum install -y php-mysql php-mbstring php-mcrypt php-devel php-xml php-gd

Выполним перезапуск apache:

# systemctl restart httpd

Создадим файл в директории виртуального хоста и проверим работу php:

# mcedit /web/site1.ru/www/index.php<?phpphpinfo();?># chown apache. /web/site1.ru/www/index.php

Заходим по адресу http://site1.ru/index.php

Вы должны увидеть вывод информации о php. Если что-то не так, возникли какие-то ошибки, смотрите лог ошибок виртуального хоста, php ошибки будут тоже там.

Где лежит php.ini

После установки часто возникает вопрос, а где хранятся настройки php?

Традиционно они находятся в едином файле настроек. В CentOS php.ini лежит в /etc, прямо в корне. Там можно редактировать глобальные настройки для все виртуальных хостов. Персональные настройки каждого сайта можно сделать отдельно в файле конфигурации виртуального хоста, который мы сделали раньше. Давайте добавим туда несколько полезных настроек:

# mcedit /etc/httpd/conf.d/site1.ru.conf

Добавляем в самый конец, перед </VirtualHost>

php_admin_value date.timezone ‘Europe/Moscow’ php_admin_value max_execution_time 60 php_admin_value upload_max_filesize 30M

Для применения настроек нужно сделать restart apache. Теперь в выводе phpinfo можно увидеть изменение настроек.

Обновление до php 5.6 в CentOS 7

В нашем примере мы установили на CentOS 7 php 5.4 из стандартного репозитория.

А что делать, если нам нужна более новая версия, например php 5.6? В таком случае нужно выполнить обновление php.

Для этого подключим remi репозиторий:

# wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm # rpm -Uvh remi-release-7*.rpm

Теперь обновляем php 5.4 до php 5.6:

# yum —enablerepo=remi,remi-php56 install php php-common php-mysql php-mbstring php-mcrypt php-devel php-xml php-gd

Перезапускаем apache:

# systemctl restart httpd

И идем смотреть вывод phpinfo — http://site1.ru/index.php

Отлично, мы обновили php до версии 5.6.

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

Как я уже писал ранее, сейчас все большее распространение получает форк mysql — mariadb. Она имеет полную совместимость с mysql, так что можно смело пользоваться. Я предпочитаю использовать именно ее.

Устанавливаем mariadb на CentOS 7:

# yum install -y mariadb mariadb-server

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

# systemctl enable mariadb.service

Запускаем mariadb:

# systemctl start mariadb

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

# netstat -tulnp | grep mysqld tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      22276/mysqld

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

# /usr/bin/mysql_secure_installation

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

Файл настроек mysql/mariadb лежит в /etc/my.cnf. Для обычной работы достаточно настроек по-умолчанию. Но если вы решите изменить их, не забудьте перезапустить службу баз данных.

Перезапуск mariadb/mysql в CentOS 7:

# systemctl restart mariadb

На этом все. Базовый функционал web сервера на CentOS 7 настроен.

Если вам нужен phpmyadmin воспользуйтесь моим подробным руководством по установке и настройке phpmyadmin на centos 7.

В вашем терминале / консоли (только Linux, в окнах вам нужна Putty )

И он покажет вам что-то вроде этого .

АЛЬТЕРНАТИВНЫЙ МЕТОД:

Вы можете сделать php-файл на своем веб-сайте, который запускается: , и вы можете увидеть расположение php.ini в строке: «Загруженный файл конфигурации» .

Вы можете найти путь к в выводе . См. Раздел «Загруженный файл конфигурации».

В большинстве случаев вы можете найти его здесь:

тоже будет работать!

В этом посте мы разберем процесс установки сервера на основе Nginx на Ubuntu 14.04

Данное руководство наиболее полно отражает процесс настройки LEMP сервера на базе хостинга от DigitalOcean, счастливым клиентом которого я недавно стал и вам советую.

Вводная

LEMP — аббревиатура, обозначающая комплекс программ для развертывания полного серверного окружения.

Название формируется из входящих компонентов:

 

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

 

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

Итак, предполагается что в качестве Linux-дистрибутива у нас установлен Ubuntu 14.04, приступаем к работе:

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

Для установки всего комплекса ПО мы будем использовать репозитории самого Ubuntu и стандартный менеджер пакетов apt

Откроем консоль в Ubuntu и установим Nginx, предварительно обновив источники пакетов:

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

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

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

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

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

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

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

Теперь, когда у нас есть веб-сервер, нам необходимо установить MySQL — базу данных, где будет храниться информация для нашего сайта.

 

Сделать это достаточно просто, открываем консоль и вбиваем:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Их нужно раскомментировать.

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

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

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

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

Больше интересных материалов на Блоге очередного вебмастера

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

Обновлено: Опубликовано:

Термины по теме: NGINX, CentOS

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

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

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

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

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

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

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

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

firewall-cmd —permanent —add-port=80/tcp

firewall-cmd —permanent —add-port=443/tcp

* в данном примере добавлены порты 80 и 443. Первый используется в NGINX по умолчанию.

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

Перезапускаем firewalld:

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

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

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

Должна загрузиться тестовая страница, наприимер:

NGINX + PHP + PHP-FPM

В чистом виде, веб-сервер NGINX используется редко.

Настроим связку с PHP и его обработчиком — PHP-FPM.

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

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

Готово.

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

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

vi /etc/nginx/conf.d/default.conf

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

    location / {
        root   /usr/share/nginx/html;
        index  index.php;
    }

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

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

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

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

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

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

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

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

<?php phpinfo(); ?>

Перезапускаем nginx:

Открываем сайт — мы должны увидеть сводную информацию по серверу и работе PHP.

* Если требуется установить PHP версии 7, читайте инструкцию Установка PHP 7 на Linux CentOS 7.

Совместная работа NGINX и PHP-FPM через сокет

В конфигурационном файле NGINX меняем эту строчку:

fastcgi_pass 127.0.0.1:9000;

На эту:

fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;

Открываем настройки php-fpm:

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

Меняем:

На:

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

Перезапускаем nginx и php-fpm:

systemctl restart php-fpm

# Серверы# Интернет# UNIX# Linux# CentOS

Была ли полезна вам эта инструкция?

Да            Нет

Руководство для начинающих

В этом руководстве даётся начальное введение в nginx и описываются некоторые простые задачи, которые могут быть решены с его помощью. Предполагается, что nginx уже установлен на компьютере читателя. Если нет, см. Установка nginx. В этом руководстве описывается, как запустить и остановить nginx и перезагрузить его конфигурацию, объясняется, как устроен конфигурационный файл, и описывается, как настроить nginx для раздачи статического содержимого, как настроить прокси-сервер на nginx, и как связать nginx с приложением FastCGI.

У nginx есть один главный и несколько рабочих процессов. Основная задача главного процесса — чтение и проверка конфигурации и управление рабочими процессами. Рабочие процессы выполняют фактическую обработку запросов. nginx использует модель, основанную на событиях, и зависящие от операционной системы механизмы для эффективного распределения запросов между рабочими процессами. Количество рабочих процессов задаётся в конфигурационном файле и может быть фиксированным для данной конфигурации или автоматически устанавливаться равным числу доступных процессорных ядер (см. worker_processes).

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

Запуск, остановка, перезагрузка конфигурации

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

nginx -s сигнал

Где сигнал может быть одним из нижеследующих:

  •  — быстрое завершение
  •  — плавное завершение
  •  — перезагрузка конфигурационного файла
  •  — переоткрытие лог-файлов

Например, чтобы остановить процессы nginx с ожиданием окончания обслуживания текущих запросов рабочими процессами, можно выполнить следующую команду:

nginx -s quit

Команда должна быть выполнена под тем же пользователем, под которым был запущен nginx.

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

nginx -s reload

Получив сигнал, главный процесс проверяет правильность синтаксиса нового конфигурационного файла и пытается применить конфигурацию, содержащуюся в нём.

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

Посылать сигналы процессам nginx можно также средствами Unix, такими как утилита . В этом случае сигнал отправляется напрямую процессу с данным ID. ID главного процесса nginx записывается по умолчанию в файл в каталоге или . Например, если ID главного процесса равен 1628, для отправки сигнала QUIT, который приведёт к плавному завершению nginx, нужно выполнить:

kill -s QUIT 1628

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

ps -ax | grep nginx

Дополнительную информацию об отправке сигналов процессам nginx можно найти в Управление nginx.

Структура конфигурационного файла

nginx состоит из модулей, которые настраиваются директивами, указанными в конфигурационном файле. Директивы делятся на простые и блочные. Простая директива состоит из имени и параметров, разделённых пробелами, и оканчивается точкой с запятой (). Блочная директива устроена так же, как и простая директива, но вместо точки с запятой после имени и параметров следует набор дополнительных инструкций, помещённых внутри фигурных скобок ( и ). Если у блочной директивы внутри фигурных скобок можно задавать другие директивы, то она называется контекстом (примеры: events, http, server и location).

Директивы, помещённые в конфигурационном файле вне любого контекста, считаются находящимися в контексте main. Директивы и располагаются в контексте ,  — в , а  — в .

Часть строки после символа считается комментарием.

Раздача статического содержимого

Одна из важных задач конфигурации nginx — раздача файлов, таких как изображения или статические HTML-страницы. Рассмотрим пример, в котором в зависимости от запроса файлы будут раздаваться из разных локальных каталогов: , который содержит HTML-файлы, и , содержащий файлы с изображениями. Для этого потребуется отредактировать конфигурационный файл и настроить блок server внутри блока http с двумя блоками location.

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

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

http { server { } }

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

В блок добавьте блок следующего вида:

location / { root /data/www; }

Этот блок задаёт “” в качестве префикса, который сравнивается с URI из запроса. Для подходящих запросов добавлением URI к пути, указанному в директиве root, то есть, в данном случае, к , получается путь к запрашиваемому файлу в локальной файловой системе. Если есть совпадение с несколькими блоками , nginx выбирает блок с самым длинным префиксом. В блоке выше указан самый короткий префикс, длины один, и поэтому этот блок будет использован, только если не будет совпадения ни с одним из остальных блоков .

Далее, добавьте второй блок :

location /images/ { root /data; }

Он будет давать совпадение с запросами, начинающимися с ( для них тоже подходит, но указанный там префикс короче).

Итоговая конфигурация блока должна выглядеть следующим образом:

server { location / { root /data/www; } location /images/ { root /data; } }

Это уже работающая конфигурация сервера, слушающего на стандартном порту 80 и доступного на локальном компьютере по адресу . В ответ на запросы, URI которых начинаются с , сервер будет отправлять файлы из каталога . Например, на запрос nginx отправит в ответ файл . Если же этот файл не существует, nginx отправит ответ, указывающий на ошибку 404. Запросы, URI которых не начинаются на , будут отображены на каталог . Например, в результате запроса в ответ будет отправлен файл .

Чтобы применить новую конфигурацию, запустите nginx, если он ещё не запущен, или отправьте сигнал главному процессу nginx, выполнив:

nginx -s reload

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

Настройка простого прокси-сервера

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

Мы настроим базовый прокси-сервер, который будет обслуживать запросы изображений из локального каталога и отправлять все остальные запросы на проксируемый сервер. В этом примере оба сервера будут работать в рамках одного экземпляра nginx.

Во-первых, создайте проксируемый сервер, добавив ещё один блок в конфигурационный файл nginx со следующим содержимым:

server { listen 8080; root /data/up1; location / { } }

Это будет простой сервер, слушающий на порту 8080 (ранее директива не указывалась, потому что использовался стандартный порт 80) и отображающий все запросы на каталог в локальной файловой системе. Создайте этот каталог и положите в него файл . Обратите внимание, что директива помещена в контекст . Такая директива будет использована, когда директива , выбранная для выполнения запроса, не содержит собственной директивы .

Далее, используйте конфигурацию сервера из предыдущего раздела и видоизмените её, превратив в конфигурацию прокси-сервера. В первый блок добавьте директиву proxy_pass, указав протокол, имя и порт проксируемого сервера в качестве параметра (в нашем случае это ):

server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data; } }

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

location ~ \.(gif|jpg|png)$ { root /data/images; }

Параметром является регулярное выражение, дающее совпадение со всеми URI, оканчивающимися на , или . Регулярному выражению должен предшествовать символ . Соответствующие запросы будут отображены на каталог .

Когда nginx выбирает блок , который будет обслуживать запрос, то вначале он проверяет директивы location, задающие префиксы, запоминая с самым длинным подходящим префиксом, а затем проверяет регулярные выражения. Если есть совпадение с регулярным выражением, nginx выбирает соответствующий , в противном случае берётся запомненный ранее .

Итоговая конфигурация прокси-сервера выглядит следующим образом:

server { location / { proxy_pass http://localhost:8080/; } location ~ \.(gif|jpg|png)$ { root /data/images; } }

Этот сервер будет фильтровать запросы, оканчивающиеся на , или , и отображать их на каталог (добавлением URI к параметру директивы ) и перенаправлять все остальные запросы на проксируемый сервер, сконфигурированный выше.

Чтобы применить новую конфигурацию, отправьте сигнал nginx’у, как описывалось в предыдущих разделах.

Существует множество других директив для дальнейшей настройки прокси-соединения.

Настройка проксирования FastCGI

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

Базовая конфигурация nginx для работы с проксируемым FastCGI-сервером включает в себя использование директивы fastcgi_pass вместо директивы , и директив fastcgi_param для настройки параметров, передаваемых FastCGI-серверу. Представьте, что FastCGI-сервер доступен по адресу . Взяв за основу конфигурацию прокси-сервера из предыдущего раздела, замените директиву на директиву и измените параметр на . В PHP параметр используется для определения имени скрипта, а в параметре передаются параметры запроса. Получится следующая конфигурация:

server { location / { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; } location ~ \.(gif|jpg|png)$ { root /data/images; } }

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

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

Закрыть меню