Php

Php nginx настройка: Установка Linux, Nginx, MySQL, PHP (набора LEMP) в Ubuntu 18.04

Содержание

Как подключить NGINX к PHP-FPM — детальное руководство

Веб-сервер NGINX (в качестве обратного прокси-сервера) обслуживает приложения PHP через протокол FastCGI (в качестве внутреннего сервера приложений). NGINX использует PHP-FPM (FastCGI Process Manager), альтернативную реализацию PHP FastCGI, которая работает в фоновом режиме в качестве демона, слушая запросы CGI. Он поставляется с дополнительными функциями, предназначенными для работы с загруженными веб-сайтами или веб-приложениями, но его можно использовать для сайтов любого размера.

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

Чтобы принимать запросы FastCGI от NGINX, PHP-FPM может прослушивать сокет TCP/IP или UNIX сокет. Какой бы адрес вы ни выбрали, это то, что NGINX использует для подключения (запросы прокси) к PHP-FPM, используя директиву fastcgi_pass.

В этом руководстве объясняется, как настроить NGINX для серверных приложений PHP с использованием PHP-FPM. Он описывает, когда использовать сокет TCP/IP или сокет UNIX для подключения NGINX к PHP-FPM и почему.

В этом руководстве предполагается, что в вашей системе Linux установлены NGINX и PHP-FPM.

 

Что я должен использовать: сокет UNIX или сокет TCP/IP?

Сокеты UNIX (или IPC) являются средством межпроцессного взаимодействия (IPC), которое обеспечивает эффективный обмен данными между процессами, работающими в одной и той же операционной системе, в то время как сокеты TCP / IP (или интернет-домена) позволяют процессам обмениваться данными по сети.

В отличие от сокета TCP/IP, который идентифицирует сервер по IP-адресу и порту (например, 127. 0.0.1:9000), вы можете привязать сервер к сокету UNIX, используя путь к файлу (например, /run /php-fpm/www.sock), который виден в файловой системе.

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

Таким образом, сокет UNIX является безопасным, поскольку его могут использовать только процессы на локальном хосте. Сокет TCP/IP может быть доступен из Интернета, и это может представлять угрозу безопасности, если не будут приняты дополнительные меры безопасности, такие как брандмауэр.

Важно отметить, что использование сокета UNIX — это не то же самое, что использование сокета TCP/IP с точки зрения производительности. Несколько тестов и тестов производительности показали, что сокеты UNIX работают быстрее. Основным недостатком сокетов UNIX является то, что они менее масштабируемы, они поддерживают только межпроцессное взаимодействие в одной и той же операционной системе (ОС).

 

Где я могу настроить адрес прослушивания PHP-FPM?

Вы можете настроить адрес, который прослушивает PHP-FPM, в файле конфигурации пула ресурсов. Обратите внимание, что с PHP-FPM вы можете запускать несколько пулов процессов с разными настройками. Пул по умолчанию называется www.

Расположение файла конфигурации пула ресурсов зависит от способа установки PHP и PHP-FPM в системе Linux (будь то версия по умолчанию/одна версия или несколько версий одновременно).

Например, в CentOS 8 с одной версией все файлы конфигурации PHP находятся в каталоге /etc, а файл конфигурации пула PHP-FPM по умолчанию (www) — /etc/php-fpm.d/www.conf:

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

# ls /etc/php/*

 

В Ubuntu 20.04 файлы конфигурации PHP находятся в каталоге /etc/php/<php-version>/, а файл конфигурации пула PHP-FPM (www) по умолчанию —/etc/php/<php-version>/fpm /pool.d/www.conf:

$ ls /etc/php/7.4/

 

 

Настройка PHP-FPM для прослушивания на сокете UNIX

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

# vim /etc/php-fpm.d/www.conf #CentOS/RHEL/Fedora
OR
$ sudo vim /etc/php/7.4/fpm/pool.d/www.conf #Ubuntu/Debian

 

Затем найдите директиву listen и задайте для нее путь к файлу сокета UNIX следующим образом. Обратите внимание, что в большинстве установок по умолчанию используется сокет UNIX.

listen = /run/php/php7.4-fpm.sock #Ubuntu/Debian
ИЛИ
listen = /run/php-fpm/www.sock #CentOS/RHEL/Fedora

 

Если вы используете сокет UNIX, вам также необходимо установить соответствующие разрешения на чтение/запись для файла, чтобы разрешить подключения с веб-сервера NGINX. По умолчанию NGINX работает как пользователь и группа nginx в CentOS/RHEL/Fedora и www-data в Ubuntu и Debian.

 

Итак, найдите параметры listen.owner и listen.group и установите их соответствующим образом. Также установите режим на 0660, используя параметр listen.mode.

------------- On Debian and Ubuntu -------------
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

------------- On CentOS/RHEL and Fedora -------------
listen. owner = nginx
listen.group = nginx
listen.mode = 0660

 

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

 

 

Настройка

PHP-FPM для прослушивания через сокет TCP/IP

Хотя сокет UNIX быстрее сокета TCP/IP, он менее масштабируем, поскольку он может поддерживать межпроцессное взаимодействие только в одной и той же ОС. Если NGINX и внутренний сервер приложений (PHP-FPM) работают в разных системах, вам придется настроить PHP-FPM для прослушивания сокетов TCP/IP для удалленого подключения.

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

listen = 127.0.0.1:8880

 

 

Настройка NGINX для работы с сервером приложений PHP-FPM

После того, как вы настроили адрес, который прослушивает PHP-FPM, вам нужно настроить NGINX для запроса прокси к нему через этот адрес, используя параметр конфигурации fastcgi_pass, в файле конфигурации блока виртуального сервера.

Например, если файл конфигурации для вашего сайта — /etc/nginx/conf.d/example.com.conf, откройте его для редактирования.

# vim /etc/nginx/conf.d/example.com.conf

 

Найдите блок местоположения для обработки файлов .php и установите параметр fastcgi_pass следующим образом, если вы настроили PHP-FPM для прослушивания на сокете UNIX.

fastcgi_pass unix:/run/php/php7.4-fpm.sock #Ubuntu/Debian
OR
fastcgi_pass unix:/run/php-fpm/www.sock #CentOS/RHEL/Fedora

 

 

Или используйте адрес TCP/IP, если вы настроили PHP-FPM для прослушивания сокета TCP/IP. Если внутренний сервер приложений (PHP-FPM) работает на отдельном сервере (замените 10.42.0.10 на IP-адрес компьютера, на котором работает сервер PHP-FPM FastCGI).

fastcgi_pass 10.42.0.10:3000;

 

 

Важное замечание: В CentOS 8 PHP-FPM определен как вышестоящий сервер в файле /etc/nginx/conf.d/php-fpm.conf внутри вышестоящего блока с именем php-fpm.

Здесь вы можете внести соответствующие изменения в зависимости от адреса, который PHP-FPM настроил для прослушивания, в файле конфигурации пула. Конфигурация по умолчанию указывает на сокет UNIX.

upstream php-fpm {
server unix:/run/php-fpm/www.sock;
}

 

 

и в файле блока сервера вашего сайта просто установите параметр fastcgi_pass, как показано.

fastcgi_pass php-fpm;

 

 

После внесения изменений в конфигурации PHP-FPM и NGINX проверьте правильность синтаксиса их конфигурации следующим образом.

------------- On Debian and Ubuntu -------------
$ sudo php-fpm -t
$ sudo nginx -t

------------- On CentOS/RHEL and Fedora -------------
# php-fpm -t
# nginx -t

 

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

------------- On Debian and Ubuntu -------------
$ sudo systemctl restart nginx
$ sudo systemctl restart php7.4-fpm

------------- On CentOS/RHEL and Fedora -------------
# systemctl restart nginx
# systemctl restart php-fpm

 

 

Если вы получили какие-либо ошибки, вы можете проверить файлы журналов NGINX и PHP-FPM с помощью команды cat.

------------- On Debian and Ubuntu -------------
$ cat /var/log/nginx/error.log
$ cat /var/log/php7.4-fpm.log

------------- On CentOS/RHEL and Fedora -------------
$ cat /var/log/nginx/error. log
$ cat /var/log/php-fpm/www-error.log

 

 

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

 

Спасибо за уделенное время на прочтение статьи!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности,  полный курс по кибербезопасности, курсы DevNet (программируемые сети) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

 

Курсы Cisco и Linux с трудоустройством!

Спешите подать заявку! Осталось пару мест. Группы стартуют 22 июля, а следующая 19 августа, 23 сентября, 21 октября, 25 ноября, 16 декабря, 20 января, 24 февраля.

Что Вы получите?

  • Поможем стать экспертом в сетевом администрировании и получить международные сертификаты Cisco CCNA Routing & Switching или Linux LPI.
  • Предлагаем проверенную программу и учебник экспертов из Cisco Networking Academy и Linux Professional Institute, сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и сделать карьеру. 100% наших выпускников трудоустраиваются.

Как проходит обучение?

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

А еще поможем Вам:

  • отредактировать резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроим на работу в Cisco по программе Cisco Incubator, New Graduate и Experienced. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.

Чтобы учиться на курсах Cisco CCNA Routing & Switching и Linux LPI, подайте заявку или получите бесплатную консультацию.

Phalcon Documentation

In order for the routing of the Phalcon application to work, you will need to set up your web server to process the redirects properly. Setup instructions for popular web servers are:

PHP-FPM

PHP-FPM (FastCGI Process Manager) обычно используется для управления процессом обработки PHP файлов. В настоящее время PHP-FPM идёт в комплекте с любым дистрибутивом PHP в Unix.

На Windows PHP-FPM поставляется вместе с пакетом PHP, как файл php-cgi.exe. Вы можете запустить его с этом скриптом. Windows не поддерживает Unix сокеты, скрипт запускает fast-cgi в TCP режиме на порте 9000.

Создайте файл php-fcgi.bar с данным текстом:

@ECHO OFF
ECHO Starting PHP FastCGI. ..
set PATH=C:\PHP;%PATH%
c:\bin\RunHiddenConsole.exe C:\PHP\php-cgi.exe -b 127.0.0.1:9000

Встроенный в PHP веб-сервер (для разработки)

Чтобы ускорить разработку вашего Phalcon-приложения, самым простым способом его запуска является использование встроенного в PHP веб-сервера. Мы рекомендуем использовать встроенный в PHP веб-сервер исключительно на стадии разработки. Ниже рассмотрены типичные конфигурации для Nginx и Apache, которые вам вероятнее всего подойдут.

Настройка Phalcon

Для включения ЧПУ без Apache или Nginx (которые необходимы для Phalcon), вы можете использовать файл-роутер:
.htrouter.php

If you created your application with Phalcon-Devtools this file should already exist in the root directory of your project and you can start the server with the following command:

$(which php) -S localhost:8000 -t public .htrouter.php

The anatomy of the command above:

  • $(which php) — will insert the absolute path to your PHP binary
  • -S localhost:8000 — invokes server mode with the provided host:port
  • -t public — defines the servers root directory, necessary for php to route requests to assets like JS, CSS, and images in your public directory
  • . htrouter.php — the entry point that will be evaluated for each request

Откройте свой браузер и перейдите по адресу http://localhost:8000/, чтобы убедиться, что всё работает.

Nginx

Nginx — это свободный, с открытым исходным кодом, высокопроизводительный HTTP-сервер и прокси-сервер, а также IMAP/POP3 прокси-сервер. В отличие от традиционных серверов Nginx не использует потоки для обработки запросов. Вместо этого он использует гораздо более масштабируемую, управляемую событиями (асинхронную) архитектуру. Эта архитектура под высокой нагрузкой использует небольшой, и главное, предсказуемый объем памяти.

Связка Phalcon + Nginx + PHP-FPM предоставляет мощный набор инструментов, который позволяет добиться максимальной производительности ваших PHP приложений.

Установка Nginx

Официальный сайт Nginx

Настройка Phalcon

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

server {
    # Port 80 will require Nginx to be started with root permissions
    # Depending on how you install Nginx to use port 80 you will need
    # to start the server with `sudo` ports about 1000 do not require
    # root privileges
    # listen      80;

    listen        8000;
    server_name   default;

    ##########################
    # In production require SSL
    # listen 443 ssl default_server;

    # ssl on;
    # ssl_session_timeout  5m;
    # ssl_protocols  SSLv2 SSLv3 TLSv1;
    # ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    # ssl_prefer_server_ciphers   on;

    # These locations depend on where you store your certs
    # ssl_certificate        /var/nginx/certs/default. (.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }

        fastcgi_param PATH_INFO       $fastcgi_path_info;
        # fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        # and set php.ini cgi.fix_pathinfo=0

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires       max;
        log_not_found off;
        access_log    off;
    }
}

Запуск Nginx

Обычно запуск производится командой service start nginx. Но это зависит от метода установки веб-сервера и системного менеджера вашей операционной системы.

Apache

Apache — это популярный веб-сервер, доступный на большинстве современных платформ.

Настройка Phalcon

Следующие инструкции позволят настроить Apache для корректной работы с Phalcon. These notes are primarily focused on the configuration of the mod_rewrite module allowing to use friendly URLs and the router component. ((?s).*)$ index.php?_url=/$1 [QSA,L]
</Directory>

</IfModule>

Виртуальные хосты

В этом заключительном примере конфигурации, мы разрешаем установку Phalcon-приложения в виртуальный хост:

<VirtualHost *:80>

    ServerAdmin    [email protected]
    DocumentRoot   "/var/vhosts/test/public"
    DirectoryIndex index.php
    ServerName     example.host
    ServerAlias    www.example.host

    <Directory "/var/vhosts/test/public">
        Options       All
        AllowOverride All
        Require       all granted
    </Directory>

</VirtualHost>

Cherokee

Cherokee is a high-performance web server. It is very fast, flexible and easy to configure.

Конфигурация Phalcon

Cherokee имеет удобный графический интерфейс для настройки практически всех параметров, доступных в веб-сервере.

Чтобы запустить администрирование сервера, нужно выполнить команду /путь-к-cherokee/sbin/cherokee-admin с правами суперадмина (root).

Создайте новый виртуальный хост, для этого кликните на vServers, затем добавьте виртуальный сервер:

Добавленный виртуальный хост должен появиться на панели слева. На вкладке Behaviors вы можете увидеть набор правил для данного сервера. Нажмите кнопку Rule Management. Снимите галочки с Directory /cherokee_themes и Directory /icons:

Add the PHP Language behavior using the wizard. This behavior allows you to run PHP applications:

Обычно такое решение не требует дополнительной настройки. Добавьте еще одно правило, на этот раз в разделе Manual Configuration. В списке Rule Type выберите File Exists, и убедитесь что опция Match any file включена:

На вкладке ‘Handler’ выберите обработчик List & Send:

Отредактируйте правило Default для включения возможностей URL-перезаписи. (.*)$:

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

Запустите приложение в браузере:

Настройка nginx для приложения на Laravel


Ромчик

0

Доброго времени суток. Не так давно пришлось мне настраивать веб-сервер для работы Laravel. В качестве веб-сервера был выбран nginx. Что такое nginx вы можете прочитать на официальном сайте. Задача стояла простая: установить nginx, настроить виртуальный хост, на котором разместить приложение Laravel. Задача простая, но в ходе настроек возникли трудности, поэтому я и решил подробно описать процесс настройки. В качестве сервера выступает Ubuntu 18.04

Ну, что поехали.

Установка nginx.

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



sudo apt-get install nginx


Ждем. На момент написания статьи была nginx версии 1. 14.0

Все nginx установили, теперь мы можем приступить к настройке самого nginx.

Настройка nginx.

Файлы конфигурации nginx находятся /ete/nginx

Основной файл конфигурации nginx.conf. Давайте посмотрим его.

  • user – указывает от чьего имени запускается nginx
  • worker_processes – устанавливается в auto или указывается число равное числу процессоров системы
  • pid тут все понятно
  • include /etc/nginx/module-enabled/*.conf – где хранятся подключаемые модули.
  • worker_connections – максимальное количество соединений на один процесс. Максимальное число обслуживания клиентов равно worker_processes * worker_connections

Дальше идет секция http:

  • sendfile – позволяет отправлять данные в сеть минуя адресное пространство приложения, что сказывается на быстродействии. В большинстве случаев лучше ставить on
  • tcp_nodelay – при включении данной опции заставляет сокет отправлять данные в буфер вне зависимости от размера пакета
  • tcp_nopush – работает как противоположность tcp_nodelay, но реализована только во FreeBSD
  • keepalive_timeout – устанавливает максимальное количество времени для поддержания соединения, если по нему не передаются данные. Так, например, если мы используем статичные страницы, то данный параметр можно уменьшить (ведь данные мы отдали и все)
  • type_hash_max_size – устанавливает максимальный размер хэш таблиц
  • include /etc/nginx/mime.types – устанавливает путь к файлу со списком mime-type
  • default_type – устанавливат mime-type по умолчанию
  • ssl_protocols – список поддерживаемых ssl протоколов
  • ssl_prefer_server_ciphers – включенный параметр заставляет соблюдать все настройки по ssl
  • access_log и error_log – указываем где будут хранится логи
  • gzip – ставим on, тем самым включаем режим сжатия
  • include /etc/nginx/conf.d/*.conf – указываем где будет хранится конфигурация для виртуальных хостов
  • include /etc/nginx/sites-enabled/* — указываем где будут хранится виртуальные хосты

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

Настройка виртуального хоста в nginx

Напомню, что виртуальный хост мы настраиваем для работы с Laravel (по большому счету, это не имеет большого значения)

Переходим /etc/nginx/sites-available. Для этого в консоли вводим команду:



cd /etc/nginx/sites-available


Теперь копируем файл default:



sudo cp ./default laravel.loc


Проверяем:



ls


Файл для виртуального хоста laravel.loc скопирован.  Открываем его на редактирование и помещаем в него следующий код:



server {

listen 80;

server_name laravel.loc;

root /var/www/laravel.loc;

&nbsp;

index index.html index.htm index.php;

&nbsp;

charset utf-8;

&nbsp;

location / {

try_files $uri $uri/ /index.php?$query_string;

}

&nbsp;

location = /favicon.ico { access_log off; log_not_found off; }

location = /robots.txt  { access_log off; log_not_found off; }

&nbsp;

access_log off;

error_log  /var/log/nginx/laravel. (.+\.php)(/.+)$;

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

fastcgi_index index.php;

include fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

}

&nbsp;

location ~ /\.ht {

deny all;

}

}


Сохраняем.

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



sudo ln -s /etc/nginx/sites-available/Laravel.loc /etc/nginx/sites-enabled/


Все. Проверяем конфигурацию, для этого выполните следующую команду:



sudo nginx -t


Все можем запускать nginx.

Команды для управления nginx

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

  • service nginx start – запуск nginx
  • service nginx stop – остановка nginx
  • service nginx restart – перезапуск nginx
  • service nginx reload – перечитывание конфигурационного файла без перезапуска nginx
  • service nginx status – проверка статуса nginx

Заключение.

Мы с вами:

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

Понравилась статья? Поделись с друзьями.

Советы по настройке и оптимизации Nginx и PHP-FPM — PEKTOP

От переводчика:
Речь пойдет о тонкостях настройки связки Nginx + PHP-FPM в виде небольшого сборника советов. Перевод вольный. Ориентированно на пользователей Linux.

Советы по настройке и оптимизации Nginx

Совет №1 — Организация файлов конфигурации Nginx

Обычно файлы конфигурации Nginx хранятся в /etc/nginx.

Один из удобных способов организации файлов конфигурации в стиле Debian/Ubuntu Apache:

## Главный файл конфигурации
/etc/nginx/nginx.conf

## Файлы конфигурации вируальных хостов (virtualhost) ##
/etc/nginx/sites-available/
/etc/nginx/sites-enabled/

## Другие файлы конфигурации (если необходимы) ##
/etc/nginx/conf. d/



## Главный файл конфигурации

/etc/nginx/nginx.conf

 

## Файлы конфигурации вируальных хостов (virtualhost) ##

/etc/nginx/sites-available/

/etc/nginx/sites-enabled/

 

## Другие файлы конфигурации (если необходимы) ##

/etc/nginx/conf.d/

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

Не забудьте добавить следующие строки в файл nginx.conf:

## Загрузка файлов конфигарации виртуальных хостов ##
include /etc/nginx/sites-enabled/*;

## Загрузка других конфигов из conf. d/ ##
include /etc/nginx/conf.d/*;



## Загрузка файлов конфигарации виртуальных хостов ##

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

 

## Загрузка других конфигов из conf.d/ ##

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

Совет №2 — Определить Nginx worker_processes и worker_connections

Настройки по умолчанию  хороши, но их стоит немного оптимизировать: max_clients = worker_processes * worker_connections.

Базовые настройки Nginx могут обрабатывать сотни одновременных соединений:

worker_processes 1;
worker_connections 1024;



worker_processes 1;

worker_connections 1024;

Обычно 1000 одновременных соединений на один сервер это хорошо, но порою другие части, например жесткий диск могут оказаться медленными и это приведет к тому, что Nginx будет заблокирован на операции ввода-вывода (I/O). Чтобы избежать блокировки используйте, например, следующие настройки: одни worker_process на ядро процессора:

Worker Processes

worker_processes = [число ядер процессора];



worker_processes = [число ядер процессора];

Чтобы определить сколько ядер имеет ваш процессор, введите:

$ cat /proc/cpuinfo | grep processor
processor : 0
processor : 1
processor : 2
processor : 3



$ cat /proc/cpuinfo | grep processor

processor   : 0

processor   : 1

processor   : 2

processor   : 3

В данном случае у меня четыре ядра, поэтому окончательный парамерт worker_processes устанавливаем как 4:

Worker Connections

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

Окончательные настройки выглядят седующим образом:

Совет №3 — Скрыть токены Nginx / Скрыть номер версии Nginx

Это хорошо из соображений безопасности — скрыть токены Nginx и скрыть номер версии Nginx, тем более если вы используете устаревшую версию Nginx. Это очень легко сделать — достаточно добавить в секцию http/server/location файла конфигурации следующую строку:

Совет №4 — Ограничение на размер передаваемых данных сервером Nginx

Если вы хотите разрешить пользователям загружать файлы, то вы должны увеличить размер сообщения. Это может быть сделано с помощью значения client_max_body_size, которое находится в секции http/server/location файла конфигурации. По умолчанию он равен 1 Мб, но его можно увеличить, например, до 20 Мб, а также увеличить размер буфера:

client_max_body_size 20m;
client_body_buffer_size 128k;



client_max_body_size 20m;

client_body_buffer_size 128k;

Если вы получаете сообщение об ошибке, то вы знаете, что client_max_body_size слишком мало:

«Request Entity Too Large» (413)

Совет №5 — Управление кешем для статических файлов

Кэш браузера сохранит ресурсы и пропускную способность вашего сервера. Это несложная настройка Nginx позволит выключить ведение логов (access log и not found log), и установить срок истечения заголовка в 360 дней.

location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires 360d;
}



location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {

    access_log        off;

    log_not_found     off;

    expires           360d;

}

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

Совет №6 — Проксируйте PHP запросы к PHP-FPM

Вы можете использовать по умолчанию стек tcp/ip или соединение через Unix-сокет. Также необходимо установить PHP-FPM слушать точно такой же ip:port или Unix-сокет. Вот очень простой пример конфигурации (вариант с Unix-сокетом  закоментирован):

# Pass PHP scripts to PHP-FPM
location ~* \.php$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
#fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}



# Pass PHP scripts to PHP-FPM

location ~* \.php$ {

    fastcgi_index   index.php;

    fastcgi_pass    127.0.0.1:9000;

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

    include         fastcgi_params;

    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;

    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;

}

Это дает возможность запуска PHP-FPM другим сервером.

Совет №7 — Предотвращение (запрет) доступа к скрытым файлам

Это очень распространено, когда корень сервера или другие публичные каталоги имеют скрытые файлы, которые начинаются с точки (.) И, как правило, они не предназначены для пользователей сайта. Публичный каталог может содержать файлы системы контроля версий: .git, .svn; файлы IDE: .idea; .htaccess файлы. Настройки запещают доступ к скрытым файлам и отключают ведение логов:

location ~ /\. {
access_log off;
log_not_found off;
deny all;
}



location ~ /\. {

    access_log off;

    log_not_found off;

    deny all;

}

 Советы по настройке и оптимизации PHP-FPM

Совет №1 — Файлы конфигурации PHP-FPM

Обычно конфигурации PHP-FPM расположенны в файле /etc/php-fpm. conf и в каталоге /etc/php-fpm.d/. Весь пулл конфигов расопложен в дикертории /etc/php-fpm.d/. Чтобы это работало, вы должны добавить следующую строку в php-fpm.conf:

include=/etc/php-fpm.d/*.conf



include=/etc/php-fpm.d/*.conf

Совет №2 — Глобальная конфигурация PHP-FPM

Настройки emergency_restart_thresholdemergency_restart_interval и process_control_timeout по умолчанию выключены, но я считаю что их стоит влючить, например, со следующими значениями:

emergency_restart_threshold 10
emergency_restart_interval 1m
process_control_timeout 10s



emergency_restart_threshold 10

emergency_restart_interval 1m

process_control_timeout 10s

Что это значит? Если 10 дочерних процессов PHP-FPM завершатся с помощью SIGSEGV или SIGBUS в течении 1 минуты, то PHP-FPM перезагрузится автоматически. А также дочерним процессам  установлен лимит времени реакции в 10 секунд на сигнал от мастера.

Совет №3 — Конфигурация пулов PHP-FPM

В PHP-FPM возможно использовать отденьные пулы для каждого сайта и точно распределять ресурсы, а также использовать разных пользователей и разные группы для каждого пула. Приведем примеры конфигураци трех различнх сайтов (или фактически три части одного сайта):

/etc/php-fpm.d/site.conf
/etc/php-fpm.d/blog.conf
/etc/php-fpm.d/forums.conf

Примеры конфигурации каждого пула:
/etc/php-fpm.d/site.conf

[site]
listen = 127.0.0.1:9000
user = site
group = site
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slowlog-site.log
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 5
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 200
listen.backlog = -1
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

[site]

listen = 127. 0.0.1:9000

user = site

group = site

request_slowlog_timeout = 5s

slowlog = /var/log/php-fpm/slowlog-site.log

listen.allowed_clients = 127.0.0.1

pm = dynamic

pm.max_children = 5

pm.start_servers = 3

pm.min_spare_servers = 2

pm.max_spare_servers = 4

pm.max_requests = 200

listen.backlog = -1

pm.status_path = /status

request_terminate_timeout = 120s

rlimit_files = 131072

rlimit_core = unlimited

catch_workers_output = yes

env[HOSTNAME] = $HOSTNAME

env[TMP] = /tmp

env[TMPDIR] = /tmp

env[TEMP] = /tmp

/etc/php-fpm.d/blog.conf

[blog]
listen = 127.0.0.1:9001
user = blog
group = blog
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slowlog-blog.log
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 4
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 200
listen. backlog = -1
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

[blog]

listen = 127.0.0.1:9001

user = blog

group = blog

request_slowlog_timeout = 5s

slowlog = /var/log/php-fpm/slowlog-blog.log

listen.allowed_clients = 127.0.0.1

pm = dynamic

pm.max_children = 4

pm.start_servers = 2

pm.min_spare_servers = 1

pm.max_spare_servers = 3

pm.max_requests = 200

listen.backlog = -1

pm.status_path = /status

request_terminate_timeout = 120s

rlimit_files = 131072

rlimit_core = unlimited

catch_workers_output = yes

env[HOSTNAME] = $HOSTNAME

env[TMP] = /tmp

env[TMPDIR] = /tmp

env[TEMP] = /tmp

/etc/php-fpm. d/forums.conf

[forums]
listen = 127.0.0.1:9002
user = forums
group = forums
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slowlog-forums.log
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 400
listen.backlog = -1
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

[forums]

listen = 127.0.0.1:9002

user = forums

group = forums

request_slowlog_timeout = 5s

slowlog = /var/log/php-fpm/slowlog-forums. log

listen.allowed_clients = 127.0.0.1

pm = dynamic

pm.max_children = 10

pm.start_servers = 3

pm.min_spare_servers = 2

pm.max_spare_servers = 4

pm.max_requests = 400

listen.backlog = -1

pm.status_path = /status

request_terminate_timeout = 120s

rlimit_files = 131072

rlimit_core = unlimited

catch_workers_output = yes

env[HOSTNAME] = $HOSTNAME

env[TMP] = /tmp

env[TMPDIR] = /tmp

env[TEMP] = /tmp

Это просто примеры как настроить несколько различных пулов.

Совет №4 — Конфигурация менеджера процессов (Pool Process Manager) PHP-FPM

Лучший способ использовать менеджер процессов PHP-FPM — это донамическое управление процессами, поэтому PHP-FPM запускает процессы только при необходимости. Это почти такой же подход как в Nginx с параметрами worker_processes и worker_connections. Таким образом большие значения не обеспечивают хорошего результата. Каждый процесс ест определнное количество памяти и, конечно, если у сайта очень большой трафик  и много оперативной памяти на сервере, то высокие значения — это правильный выбор. Но такие серверы как VPS обычно имеют ограниченное количество памяти: 256 Мб, 512 Мб, 1024 Мб. Такого небольшого объема ОЗУ достаточно даже для очень большого трафика (даже десятки запросов в секунду), если эту память использовать с умом.

Проверим сколько процессов PHP-FPM позволит легко справляться серверу с нагрузкой. Сначала запустим Nginx и PHP-FPM и загрузим несколько страниц PHP, желательно самые тяжелые. Затем проверим сколько использует памяти процесс PHP-FPM — в Linux можно воспользоваться утилитами top или htop. Предположим что наш сервер имеет 512 Мб оперативной памяти и 220 Мб может быть использованно PHP-FPM, каждый процесс использует 24 Мб оператичной памяти (некоторые CMS с плагинами могут легко кушать 20-40 Мб на один запрос или даже больше). Затем просто вычислим значние max_children для сервера:

220 / 24 = 9.17

Приемлемым значнием pm.max_children будет 9. Это значние основанно на среднем значении и возможно далее его необходимо будет изменить, когда вы заметите длительное время использования памяти процессом. После быстрого тестирования несложно выбрать значния pm.start_servers value, pm.min_spare_servers и pm.max_spare_servers.

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

pm.max_children = 9
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 200



pm.max_children = 9

pm.start_servers = 3

pm.min_spare_servers = 2

pm.max_spare_servers = 4

pm. max_requests = 200

Максималоное количество запросов на процесс по умолчанию не ограничено, но хорошо бы установить какое-нибудь небольшое значение, например 200, и избежать проблем с памятью. Такого вида настрока может обрабарывать большое количество запросов, даже если значение параметра невелико.

У вас проблемы с натройкой Nginx или PHP-FPM или есть еще советы?

Не стесняйтеся писать замечания, вопросы и советы в комментариях.

Оригинальный пост на английском языке

Тонкая настройка Nginx. Защита, оптимизация.

Выделенный Web-сервер на основе nginx – отличный способ повышения производительности Web-сайтов. В скорости обработки статического контента ему просто нет равных: он легко выдерживает несколько тысяч одновременных соединений и может быть легко оптимизирован и подогнан под любую конфигурацию. Однако? выступая в качестве фронт-энда для Apache, nginx оказывается наиболее уязвимым местом всей Web-инфраструктуры, поэтому безопасности nginx необходимо уделить особое внимание.

Эта статья – своего рода ликбез, или, если хочешь, резюме всех техник повышения безопасности nginx. В ней не будет теории, описания основ настройки Web-сервера и прочей воды. Вместо этого ты получишь исчерпывающий практический материал, описывающий все основные шаги, которые необходимо проделать для того, чтобы получить по-настоящему защищенный Web-сервер.

 

 

Установка

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

 

Измени строку приветствия Web-сервера

Скачай исходники nginx, открой файл src/http/ngx_http_header_filter_module.c и найди следующие две строки:

static char ngx_http_server_string[] = "Server: nginx" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

Замени их на что-то вроде этого:

static char ngx_http_server_string[] = "Server: ][ Web Server" CRLF;
static char ngx_http_server_full_string[] = "Server: ][ Web Server" CRLF;

 

Удали все неиспользуемые тобой nginx-модули

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

Выполни сборку с помощью следующих команд:

# ./configure --without-http_autoindex_module --without-http_ssi_module
# make

# make install

Так ты получишь nginx с заранее отключенными (и в большинстве случаев бесполезными) модулями SSI (Server Side Includes) и Autoindex. Чтобы узнать, какие модули можно безболезненно выбросить из Web-сервера, запусти скрипт configure с флагом ‘—help’.

 

Препарируем nginx.conf

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

 

Отключи показ версии сервера на всех ошибочных страницах

Добавь в файл nginx.conf строку “server_tokens off”. Это заставит nginx скрывать информацию о типе и версии Web-сервера на страницах, генерируемых в ответ на ошибочный запрос клиента.

 

Настрой защиту от срыва стека

Добавь в секцию server следующие строки:

# vi /etc/nginx/nginx.conf

# Максимальный размер буфера для хранения тела запроса клиента
client_body_buffer_size 1K;
# Максимальный размер буфера для хранения заголовков запроса клиента
client_header_buffer_size 1k;
# Максимальный размер тела запроса клиента, прописанный в поле Content-Length заголовка. Если сервер должен поддерживать загрузку файлов, это значение необходимо увеличить
client_max_body_size 1k;
# Количество и размер буферов для чтения большого заголовка запроса клиента
large_client_header_buffers 2 1k;

Обрати внимание на директиву large_client_header_buffers. По умолчанию, для хранения строки URI nginx выделяет четыре буфера, размер каждого из которых равен размеру страницы памяти (для x86 это 4 Кб). Буферы освобождаются каждый раз, когда по окончанию обработки запроса соединение переходит в состояние keep-alive. Два буфера по 1 Кб могут хранить URI длиной только 2 Кб, что позволяет бороться с ботами и DoS-атаками.

Для повышения производительности добавь следующие строки:

# vi /etc/nginx/nginx.conf

# Таймаут при чтении тела запроса клиента
client_body_timeout 10;
# Таймаут при чтении заголовка запроса клиента
client_header_timeout 10;
# Таймаут, по истечению которого keep-alive соединение с клиентом не будет закрыто со стороны сервера
keepalive_timeout 5 5;
# Таймаут при передаче ответа клиенту
send_timeout 10;

 

Контролируй количество одновременных соединений

Для защиты Web-сервера от перегрузки и попыток осуществить DoS-атаку добавь в конфиг следующие строки:

# vi /etc/nginx/nginx.conf

# Описываем зону (slimits), в которой будут храниться состояния сессий. Зона размером 1 Мб может хранить около 32000 состояний, мы устанавливаем ее размер равным 5 Мб
limit_zone slimits $binary_remote_addr 5m;
# Задаем максимальное количество одновременных соединений для одной сессии. По сути, это число задает максимальное количество соединений с одного IP
limit_conn slimits 5;

Первая директива должна находиться в секции HTTP, вторая – в секции location. Когда количество соединений выйдет за пределы лимитов, клиент получит сообщение «Service unavailable» с кодом 503.

 

Разреши коннекты только к своему домену

Взломщики могут использовать ботов для сканирования подсетей и поиска уязвимых Web-серверов. Обычно боты просто перебирают диапазоны IP-адресов в поисках открытых 80 портов и посылают запрос HEAD для получения информации о веб-сервере (или главной странице). Ты можешь легко предотвратить такой скан, запретив обращение к серверу по IP-адресу (добавить в подсекцию location):

# vi /etc/nginx/nginx. (GET|HEAD|POST)$ ) {
return 444;
}

 

Отшивай ботов

Другой способ блокирования ботов, сканеров и прочей нечисти основан на определении типа клиента (user-agent). Он не слишком эффективен, потому как большинство ботов косят под вполне легитимные браузеры, но в ряде случаев остается полезным:

# vi /etc/nginx/nginx.conf

# Блокируем менеджеры загрузки
if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
return 403;
}
# Блокируем некоторые типы ботов
if ($http_user_agent ~* msnbot|scrapbot) {
return 403;
}

 

Блокируй Referrer-спам

Если твой сайт публикует Web-логи в общедоступном виде, ты легко можешь стать жертвой Referrer-спама (когда спам-боты обращаются к твоему серверу, указывая в заголовке referrer – адрес рекламируемого сайта). Такой вид спама может легко испортить SEO-рейтинги интернет-страницы, поэтому его необходимо блокировать в обязательном порядке. Один из способов сделать это – занести наиболее частые слова, встречающиеся в адресах рекламируемых сайтов, в черный список.

# vi /etc/nginx/nginx.conf

# Секция server
if ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) )
{
return 403;
}

 

Блокируй хотлинк

Хотлинк – это включение в страницу изображения (или иного контента) с другого сайта. По сути, это воровство, потому как изображение, на которое ты потратил не один час своего свободного времени, не только свободно используется другими, но и создает нагрузку на твой Web-сервер, не приводя на него посетителей. Для борьбы с хотлинками достаточно сделать так, чтобы изображения отдавались клиенту только в том случае, если он запросил их, уже находясь на сайте (другими словами, заголовок referrer-запроса должен содержать имя твоего сайта). Добавь в секцию server конфигурационного файла nginx.conf следующие строки (host.com – это адрес твоего сайта):

# vi /etc/nginx/nginx.conf

location /images/ {
valid_referers none blocked www. /images/uploads.*\.(gif|jpg|jpeg|png)$ http://www.host.com/banned.jpg last

 

Защищай важные каталоги от посторонних

Как и любой другой Web-сервер, nginx позволяет регулировать доступ к каталогам на основе IP-адресов и паролей. Эту возможность можно использовать для закрытия некоторых частей сайта от посторонних глаз. Например, для отрезания URI от внешнего мира:

# vi /etc/nginx/nginx.conf

location /uploads/ {
# Разрешаем доступ только машинам локальной сети
allow 192.168.1.0/24;
# Отшиваем всех остальных
deny all;
}

Теперь к документам каталога uploads будут иметь доступ только пользователи локальной сети. Для установки пароля придется проделать более сложные действия. Сначала необходимо создать приватный для nginx-файл паролей и добавить в него необходимых пользователей (в качестве примера добавим пользователя admin):

# mkdir /etc/nginx/.htpasswd
# htpasswd -c /etc/nginx/.htpasswd/passwd admin

Далее открой файл nginx. conf и впиши в него следующие строки:

# vi /etc/nginx/nginx.conf

location /admin/ {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd/passwd;
}

Новых пользователей можно добавить с помощью следующей команды:

# htpasswd -s /etc/nginx/.htpasswd/passwd пользователь

 

Используй SSL

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

Для настройки SSL-шифрования средствами nginx достаточно выполнить несколько простых шагов. Сначала ты должен создать сертификат с помощью следующей последовательности команд:

# cd /etc/nginx
# openssl genrsa -des3 -out server.key 1024
# openssl req -new -key server. key -out server.csr
# cp server.key server.key.org
# openssl rsa -in server.key.org -out server.key
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Затем описать сертификат в конфигурационном файле nginx:

# vi /etc/nginx/nginx.conf

server {
server_name host.com;
listen 443;
ssl on;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
access_log /etc/nginx/logs/ssl.access.log;
error_log /etc/nginx/logs/ssl.error.log;
}

После этого можно перезагрузить Web-сервер:

# /etc/init.d/nginx reload

Естественно, без поддержки со стороны самого Web-сайта это делать бессмысленно.

 

Другие способы

 

Установи правильные значения системных переменных

Открой файл /etc/sysctl.conf и помести в него следующие строки:

# vi /etc/sysctl.conf

# Защита от smurf-атак
net. ipv4.icmp_echo_ignore_broadcasts = 1
# Защита от неправильных ICMP-сообщений
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Защита от SYN-флуда
net.ipv4.tcp_syncookies = 1
# Запрещаем маршрутизацию от источника
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Защита от спуфинга
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Мы не маршрутизатор
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# Включаем ExecShield
kernel.exec-shield = 1
kernel.randomize_va_space = 1
# Расширяем диапазон доступных портов
net.ipv4.ip_local_port_range = 2000 65000
# Увеличиваем максимальный размер TCP-буферов
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1

 

Размести корневой каталог Web-сервера на выделенном разделе

Поместив корневой каталог Web-сервера в выделенный раздел и запретив на нем размещение любых исполняемых файлов и файлов-устройств, ты обезопасишь остальную часть системы от тех, кто сможет получить доступ к корню Web-сервера. При этом запись в файле /etc/fstab должна иметь примерно такой вид:

/dev/sda5 /nginx ext4 defaults,nosuid,noexec,nodev 1 2

 

Помести nginx в chroot/jail-окружение

Любая современная *nix-система позволяет запереть приложение в изолированной среде исполнения. В Linux для этого можно использовать технологии KVM, Xen, OpenVZ и VServer, во FreeBSD – Jail, в Solaris – Zones. Если ни одна из этих технологий не доступна, ты можешь поместить nginx в классический chroot, который хоть и намного более хрупок, но большинство взломщиков остановить сможет.

 

Установи правила SELinux для защиты nginx

Хорошей альтернативой изолированным средам исполнения являются локальные системы обнаружения и предотвращения вторжений, такие как SELinux или AppArmor. Будучи правильно настроенными, они смогут предотвратить попытки взлома Web-сервера. По дефолту ни одна из них не настроена для работы в связке с nginx, однако в рамках проекта SELinuxNginx (http://sf. net/projects/selinuxnginx/) были созданы правила для SELinux, которые может использовать любой желающий. Остается только скачать и установить:

# tar -zxvf se-ngix_1_0_10.tar.gz
# cd se-ngix_1_0_10/nginx
# make
# /usr/sbin/semodule -i nginx.pp

 

Настрой брандмауэр

Обычно nginx устанавливают на выделенных машинах, готовых к высокой нагрузке, поэтому зачастую он остается единственным сетевым сервисом, работающим на сервере. Чтобы обезопасить сервер, достаточно создать совсем небольшой набор правил, которые будут открывать 80, 110 и 143-й порты (если, конечно, nginx должен работать еще и как IMAP/POP3-прокси) и закрывать от внешнего мира все остальное.

 

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

Для не слишком нагруженного Web-сайта хорошей идеей будет ограничить количество попыток соединений с одного IP-адреса в минуту. Это сможет уберечь тебя от некоторых типов DoS-атак и брутфорса. В Linux это можно сделать с помощью стандартного iptables/netfilter-модуля state:

# iptables -A INPUT -p tcp --dport 80 -i eth0 \
-m state --state NEW -m recent --set
# iptables -A INPUT -p tcp --dport 80 -i eth0 \
-m state --state NEW -m recent --update \
--seconds 60 --hitcount 15 -j DROP

Правила урезают лимит на количество подключений с одного IP в минуту до 15. То же можно сделать и с помощью pf:

# vi /etc/pf.conf

webserver_ip="1.1.1.1"
table <abuse> persist
block in quick from <abuse>
pass in on $ext_if proto tcp to $webserver_ip \
port www flags S/SA keep state \
(max-src-conn 100, max-src-conn-rate 15/60, \
overload <abusive_ips> flush)

Кроме лимита на количество последовательных подключений (15 в минуту), данное правило устанавливает дополнительный лимит на количество одновременных подключений равный 100.

 

Настрой PHP

Если ты используешь nginx в связке с PHP, не забудь настроить и его. Вот как должен выглядеть конфигурационный файл /etc/php/php.ini защищенного сервера:

# vi /etc/php/php.ini

# Отключаем опасные функции
disable_functions = phpinfo, system, mail, exec
# Максимальное время исполнения скрипта
max_execution_time = 30
# Максимальное время, которое может потратить скрипт на обработку данных запроса
max_input_time = 60
# Максимальное количество памяти, выделяемое каждому скрипту
memory_limit = 8M
# Максимальный размер данных, отсылаемых скрипту с помощью метода POST
post_max_size = 8M
# Максимальный размер загружаемых файлов
upload_max_filesize = 2M
# Не показывать ошибки PHP-скриптов пользователям
display_errors = Off
# Включаем Safe Mode
safe_mode = On
# Включаем SQL Safe Mode
sql. safe_mode = On
# Позволяем выполнять внешние команды только в этом каталоге
safe_mode_exec_dir = /путь/к/защищенному/каталогу
# Защищаемся от утечки информации о PHP
expose_php = Off
# Ведем логи
log_errors = On
# Запрещаем открытие удаленных файлов
allow_url_fopen = Off

 

Выводы

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

 

О герое дня

Nginx – один самых производительных и популярных Web-серверов в мире. Согласно данным Netcraft, он используется для поддержки более чем 12 миллионов Web-сайтов по всему миру, включая таких мастодонтов как Rambler, Yandex, Begun, WordPress.com, Wrike, SourceForge.net, vkontakte.ru, megashara.com, Либрусек и Taba.ru. Грамотная архитектура, основанная на мультиплексировании соединений с помощью системных вызовов select, epoll (Linux), kqueue (FreeBSD) и механизме управления памятью на основе пулов (небольших буферов от 1 до 16 Кб), позволяет nginx не проседать даже под очень высокими нагрузками, выдерживая свыше 10000 одновременных соединений (так называемая проблема C10K). Изначально написан Игорем Сысоевым для компании Rambler и открыт в 2004 году под BSD-подобной лицензией.

 

Взято с xakep.ru

Вконтакте

Facebook

Twitter

Google+

LiveJournal

LinkedIn

Одноклассники

E-mail

Pinterest

Мой мир

Настройка VDS с нуля на Centos 7, Nginx, PHP-fpm без Apache — Mac и Linux

 Здесь собраны все необходимые процедуры для настройки сервера с нуля на основе Centos 7. x без использования Apache для экономии серверных ресурсов. Apache заменяет Nginx с модулем PHP-FPM 5.6. В качестве базы данных используется MariaDB.

1. Nginx

2. PHP 5.6

3. php.ini

4. PHP-FPM

5. Настроить конфиги php-fpm и nginx

6. Пользователей, кроме root, сменить пароль root

7. Firewall или iptables

8. Папки сайтов и логов

9. MariaDB

Очистка старого SSH ключа на локальной машине

ssh-keygen -R *ip_address_or_hostname*

cat /etc/centos-release — проверка версии centos

Апдейт

yum clean all

yum update

yum autoremove

Package 1:nginx-1.10.2-1.el7.x86_64 already installed and latest version

Package php-fpm-5.6.30-1.el7.remi.x86_64 already installed and latest version

Package php-mysql-5.4.45-13.el7.remi.x86_64 is obsoleted by php-mysqlnd-5.6.30-1.el7.remi.x86_64 which is already installed

Package 1:mariadb-server-5.5.52-1.el7.x86_64 already installed and latest version

Package unzip-6. 0-16.el7.x86_64 already installed and latest version

Firewall

systemctl status firewalld — проверка статуса файрволла

firewall-cmd —list-ports

Меняем порт SSH

$ sudo firewall-cmd —zone=public —add-port=974/tcp —permanent

$ sudo firewall-cmd —reload

firewall-cmd —zone=public —remove-port=22/tcp

systemctl restart firewalld.service

nano /etc/ssh/sshd_config

systemctl restart sshd.service

nano /etc/sysconfig/selinux — проверить disable

Устанавливаем NGINX

yum install epel-release

yum install nginx

systemctl start nginx

systemctl status nginx

If you are running a firewall, run the following commands to allow HTTP and HTTPS traffic:

sudo firewall-cmd —permanent —zone=public —add-service=http

sudo firewall-cmd —permanent —zone=public —add-service=https

nginx -V

check

http://server_domain_name_or_IP/ проверить IP — ip addr

You should now put your content in a location of your choice and edit the root configuration directive in the nginx configuration file /etc/nginx/nginx. conf.

Start every boot

systemctl enable nginx

Default Server Root

The default server root directory is /usr/share/nginx/html. Files that are placed in there will be served on your web server. This location is specified in the default server block configuration file that ships with Nginx, which is located at /etc/nginx/nginx.conf.

Server Block Configuration

Any additional server blocks, known as Virtual Hosts in Apache, can be added by creating new configuration files in /etc/nginx/conf.d. Files that end with .conf in that directory will be loaded when Nginx is started.

Nginx Global Configuration

The main Nginx configuration file is located at /etc/nginx/nginx.conf. This is where you can change settings like the user that runs the Nginx daemon processes, and the number of worker processes that get spawned when Nginx is running, among other things.

Версия PHP

php -v

Обновление до PHP 5.6

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

# rpm -Uvh remi-release-7*.rpm

В CentOS php.ini лежит в /etc, прямо в корне.

We will change both of these conditions by uncommenting the line and setting it to «0» like this:

/etc/php.ini excerpt

cgi.fix_pathinfo=0

Установка PHP-FPM

sudo nano /etc/yum.repos.d/remi.repo

удаляем 5.5 и ставим enabled=1 для remi и remi-php56

Теперь обновляем 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 php-fpm

Запускаем

systemctl start php-fpm

systemctl enable php-fpm

Создаём конфиг php-fpm

nano /etc/nginx/default.d/php-fpm.conf

And add the following content to it:

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

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;

}

Next, open the php-fpm configuration file www.conf:

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

Find the line that specifies the listen parameter, and change it so it looks like the following:

127.0.0.1 заменить на

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

Next, find the lines that set the listen.owner and listen.group and uncomment them. They should look like this:

listen.owner = nobody

listen.group = nobody

Lastly, find the lines that set the user and group and change their values from «apache» to «nginx»:

user = nginx

group = nginx

Then save and quit.

Now, we just need to start our PHP processor by typing:

sudo systemctl start php-fpm

This will implement the change that we made.

Next, enable php-fpm to start on boot:

sudo systemctl enable php-fpm

systemctl restart php-fpm

systemctl restart nginx

Узнать версию MySql

rpm -qa | grep mysql

Пакеты MySql

Пакеты MySql

yum list installed | grep mysql

Просмотр установленных пакетов

yum list installed

Установка MariaDB

yum install -y mariadb mariadb-server

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

# systemctl enable mariadb. service

Запускаем mariadb:

# systemctl start mariadb

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

# systemctl restart mariadb

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

# netstat -tulnp | grep mysqld

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

# /usr/bin/mysql_secure_installation

Установка Zabbix + nginx+php-fpm + mariaDB в Unix/Linux

Я описывал статью как можно установить zabbix на различные Linux системы. Но по дефолту, заббикс юзает  апач для фронтенда. Но я люблю nginx + php-fpm и данная статья покажет как это сделать.

Установка Zabbix + nginx+php-fpm + mariaDB в Unix/Linux

Я расскажу как установить все эти компоненты, но начнем с самого элементарного.

Установка nginx в Unix/Linux

Полезное чтиво:

Установка PHP 7(php-fpm) с nginx 1.9 в Debian 8

Виртуальный хост для отдельного пользователя с PHP-FPM и nginx

Установка Nginx, PHP-FPM, MariaDB на CentOS 7 / RHEL 7

Уcтановка nginx, MySQL, PHP (LEMP) stack на Debian/Ubuntu

Установка и настройка nginx c PHP5, PHP-FPM и MySQL на Fedora

Установка php-fpm в Unix/Linux

Полезное чтиво:

Настройка «process manager(dynamic/static/ondemand)» для php-fpm в Unix/Linux

Установка mariaDB в Unix/Linux

Полезное чтиво:

Установка MariaDB 5. 5 на RHEL / CentOS / Fedora Linux

Установка MariaDB 10 на CentOS 7

Установка MariaDB на Debian

Установка MariaDB в Ubuntu

Установка Zabbix в Unix/Linux

Полезное чтиво:

Установка Zabbix на RedHat/CentOS/Fedora

Установка Zabbix на Debian/Ubuntu/Linux Mint

Настройка Zabbix + nginx+php-fpm + mariaDB в Unix/Linux

Если есть необходимость использовать nginx, то вот конфиг:

# vim /etc/nginx/conf.d/zabbix.conf

И получаем следующее:

server {
 	listen 80;
 	server_name zabbix.local.server;
 	access_log /var/log/nginx/access-zabbix.local.server.log;
 	error_log /var/log/nginx/error-zabbix.local.server.log info;
 	root /usr/share/zabbix;
 	index index.php index.html;
 	auth_basic "Nagios Restricted Access";
 	auth_basic_user_file /etc/zabbix/passwd;
	
	location / {
		root   /usr/share/zabbix;
		index  index.php index.html;
		}
	
	location ~ \. php$ {
		fastcgi_pass php-fpm;
		fastcgi_index index.php;
                fastcgi_param PHP_VALUE "
                 max_execution_time = 300
                 memory_limit = 128M
                 post_max_size = 16M
                 upload_max_filesize = 2M
                 max_input_time = 300
                 date.timezone = Europe/Kiev
                 always_populate_raw_post_data = -1
                ";
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		try_files $uri =404;
		include fastcgi_params;
	}
 	location = /favicon.ico {
        	log_not_found off;
        	access_log off;
	}
	location ~* ".+\.(?:ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|css|swf|js|atom|jpe?g|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$" {
		access_log  off;
		log_not_found       off;
		expires             max;
		}
	
        location ~* ^/(conf|api|include)($|\/) {
                 deny all;
         }
        location ~ /\. ht {
                deny all;
        }
        location ~ /\. {
                deny all;
        }
}

Хочу отметить следующее, что заббикс по деволту использует apache и если использовать nginx, то необходимо сменить права:

# chown -R nginx. /etc/zabbix/web
# chown -R nginx. /usr/share/zabbix

Так же, я запускаю php-fpm от nginx пользователя ( я создал ему отдельный файл):

# vim /etc/php-fpm.d/zabbix.conf

И прописал в него:

[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000
 
listen.allowed_clients = 127.0.0.1
listen.owner = nginx
listen.group = nginx
listen.mode = 0666
pm = dynamic
pm.start_servers = 30
pm.min_spare_servers = 30
pm.max_spare_servers = 45
pm.process_idle_timeout = 30s
pm.max_requests = 500000000
 
pm.status_path = /status
request_terminate_timeout = 600s
slowlog = /var/log/php-fpm/www-slow. log
rlimit_files = 65535
chdir = /
security.limit_extensions = .php .php3 .php4 .php5
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_flag[display_errors] = off
php_admin_value[error_reporting] = 0
php_admin_value[error_log] = /var/log/php-fpm/php5-fpm.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 128M
php_admin_flag[log_errors] = on
php_admin_flag[display_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session

Выставляем права на сессии:

# chown -R nginx. /var/lib/php/session

И для супер-пупер секурити, создаем:

# htpasswd -c /etc/zabbix/passwd zabbix

Прописываем пароль, для пользователя zabbix.

Перезапускаем службы:

# service nginx restart
# service php-fpm restart
# service mysql restart

Если mysql установлен, то еще необходимо создать пользователя, который будет управлять данной БД. Для начала, подключаемся к серверу:

# mysql -proot -p

Создаем базу и пользователя с паролем:

> create database zabbix character set utf8 collate utf8_bin;
> grant all privileges on zabbix.* to 'zabbix'@'127.0.0.1' IDENTIFIED BY 'passwd_user_zabbix';
> flush privileges;

У меня используется:

  • zabbix — База данных.
  • zabbix — пользователь.
  • passwd_user_zabbix — пароль для пользователя.

Импортируем данные в созданную БД:

# zcat /usr/share/doc/zabbix-server-mysql-3.2.6/create.sql.gz | mysql -u zabbix -p zabbix

Настройка zabbix-server

Открываем:

# vim /etc/zabbix/zabbix_server.conf

И производим настройку, у меня данный файл имеет вид:

ListenPort=10051
SourceIP=192.168.13.66
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=passwd_user_zabbix 
DBPort=3306
JavaGatewayPort=10052
SNMPTrapperFile=/var/log/snmptrap/snmptrap. log
CacheSize=8M
HistoryCacheSize=16M
HistoryIndexCacheSize=4M
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
Include=/usr/local/etc/zabbix_server.conf.d/*.conf

Создаем папку:

# mkdir /usr/local/etc/zabbix_server.conf.d

Запускаем сервер:

# service zabbix-server restart

Проверяем соединения:

# netstat -tulpn|grep zabbix

Разрешаем автозапуск (centOS 7):

$ systemctl enable zabbix-server.service

Или (centOS 5-6):

# chkconfig --levels 235 zabbix-server on

Идем дальше.

Настройка zabbix-agent

Открываем:

# vim /etc/zabbix/zabbix_agentd.conf

И производим настройку, у меня данный файл имеет вид:

PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.13.66
ListenPort=10050
ListenIP=0. 0.0.0
ServerActive=192.168.13.66
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agentd.d/*.conf

Запускаем агент:

# service zabbix-agent restart

Проверяем соединения:

# netstat -tulpn|grep zabbix

Разрешаем автозапуск (centOS 7):

$ systemctl enable zabbix-agent.service

Или (centOS 5-6):

# chkconfig --levels 235 zabbix-agent on

Идем дальше.

Настройка файрвола 

Для корректной работы, нужно пробросить 10050 и 10051.

Пример использования systemctl (пример для centos 7):

# firewall-cmd --permanent --add-port=10050/tcp
# firewall-cmd --permanent --add-port=10051/tcp

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

# systemctl restart firewalld

Пример использования SELinux (пример для centos 7):

# setsebool -P httpd_can_connect_zabbix=1

Пример использования iptables (пример для centos 5-6):

# iptables -A INPUT -p tcp -m tcp --dport 10050 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 10051 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 10052 -j ACCEPT

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

iptables -A INPUT -p tcp -s 172. 22.221.100 --dport 10050 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -s 172.22.221.100 --dport 10051 -m state --state NEW,ESTABLISHED -j ACCEPT

Сохраняем правила:

# iptables-save > /etc/iptables.up.rules

Работа с zabbix

Выполняем установку через веб-интерфейс. Вводим данные которые были созданы выше( zabbix — база данных, zabbix — пользователь, passwd_user_zabbix — его пароль). После установки, можно будет зайти в админ панель:

Пользователь — Admin
Пароль для пользователя — zabbix

После установки, залогинились в админ-панель и приступим к настройке. Первое что нужно сделать — это создать нового пользователя и дать ему права администратора:

— Открываем «Administration» -> «Users». Нажимаем на «Create user» и прописываем ему нужные параметры. Я создал суперпользователя ( взял все от юзера zabbix). После чего, удалил пользователя zabbix ( т.к он не безопасный). 

— Открываем «Administration» -> «Media types». Нажимаем на «email» и вводим нужные параметры. Я не буду заострять внимание на этом. Я расскажу как настроить данную вкладку в следующих статьях.

Я, хочу мониторить сам сервер, и сейчас я, включу данную функцию:

— Открываем «Administration» -> «Hosts». Нажимаем на чекбокс с «Zabbix server» и после чего, клацаем на «enable». Вот скриншот:

Чтобы убедится что все работает и собираются данные — переходим:

— Открываем «Monitoring» -> «Latest data». Выбираем наш сервер, какие данные чекать.

Собственно — это все. Минимальная настройка уже имеется. Как работать с заббиксом и заббикс-агентами, будет немного позже.

Установка и подключения других агентов

Опишу в следующей статье.

А на этом, у меня все. Тема «» завершена.

Настройка веб-сервера (Symfony Docs)

Предпочтительный способ разработки вашего приложения Symfony — использовать
Локальный веб-сервер Symfony.

Однако при запуске приложения в производственной среде вам потребуется
использовать полнофункциональный веб-сервер. В этой статье описывается несколько способов использования
Symfony с Apache или Nginx.

При использовании Apache вы можете настроить PHP как
Модуль Apache или FastCGI с использованием
PHP FPM.FastCGI также является предпочтительным способом
использовать PHP с Nginx.

Добавление правил перезаписи

Самый простой способ — установить apache Symfony pack
выполнив следующую команду:

 $ композитору требуется symfony / apache-pack
 

Этот пакет устанавливает файл .htaccess в общедоступном каталоге /, который содержит
правила перезаписи, необходимые для обслуживания приложения Symfony.

На производственных серверах следует переместить .htaccess в основную
Файл конфигурации Apache для повышения производительности. Для этого скопируйте
.htaccess содержимое внутри конфигурации , связанной с
каталог приложения Symfony public / (и замените AllowOverride All
по AllowOverride Нет ):

 
    # ...
    DocumentRoot / var / www / project / public

    <Каталог / var / www / project / public>
        AllowOverride Нет

        # Копировать.содержимое htaccess здесь
    

 

Apache с mod_php / PHP-CGI

Минимальная конфигурация для запуска вашего приложения под Apache:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20 
 
    ServerName domain.tld
    ServerAlias ​​www.domain.tld

    DocumentRoot / var / www / project / public
    <Каталог / var / www / project / public>
        AllowOverride All
        Заказать разрешить, запретить
        Разрешить от всех
    

    # раскомментируйте следующие строки, если вы устанавливаете ресурсы как символические ссылки
    # или возникнут проблемы при компиляции ресурсов LESS / Sass / CoffeeScript
    # 
    # Options FollowSymlinks
    # 

    Журнал ошибок / var / log / apache2 / project_error. бревно
    CustomLog /var/log/apache2/project_access.log в сочетании

 

Подсказка

Если ваша система поддерживает переменную APACHE_LOG_DIR , вам может потребоваться
использовать $ {APACHE_LOG_DIR} / вместо жесткого кодирования / var / log / apache2 / .

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21 год
22
23
24
25
26
27
28
29
30
31 год
32
33
34
35 год
36 
 
    ServerName домен.tld
    ServerAlias ​​www.domain.tld

    DocumentRoot / var / www / project / public
    DirectoryIndex /index.php

    <Каталог / var / www / project / public>
        AllowOverride Нет
        Заказать разрешить, запретить
        Разрешить от всех

        FallbackResource /index. php
    

    # раскомментируйте следующие строки, если вы устанавливаете ресурсы как символические ссылки
    # или возникнут проблемы при компиляции ресурсов LESS / Sass / CoffeeScript
    # 
    # Options FollowSymlinks
    # 

    # опционально отключить резервный ресурс для каталогов активов
    # что позволит Apache возвращать ошибку 404, когда файлы
    # не найден вместо передачи запроса в Symfony
    <Каталог / var / www / project / public / bundles>
        DirectoryIndex отключен
        FallbackResource отключен
    
    Журнал ошибок / var / log / apache2 / project_error.бревно
    CustomLog /var/log/apache2/project_access.log в сочетании

    # необязательно установить значение переменных среды, используемых в приложении
    #SetEnv APP_ENV prod
    #SetEnv APP_SECRET 
    #SetEnv DATABASE_URL "mysql: // db_user: [электронная почта защищена]: 3306 / db_name"

 

Осторожно

Используйте FallbackResource на Apache 2. 4.25 или новее из-за ошибки, которая была
исправлено в этом выпуске, приводившее к зависанию root /.

Подсказка

Если вы используете php-cgi , Apache не передает базовое имя пользователя HTTP и
пароль к PHP по умолчанию. Чтобы обойти это ограничение, вы должны использовать
следующий фрагмент конфигурации:

 RewriteRule. * - [E = HTTP_AUTHORIZATION:% {HTTP: Authorization}]
 

Использование mod_php / PHP-CGI с Apache 2.4

В Apache 2.4, Order Allow, Deny заменен на Require all grant .Следовательно, вам необходимо изменить настройки разрешений Directory следующим образом:

 
    Требовать все предоставлено
    # ...

 

Дополнительные параметры конфигурации Apache см. В официальной документации Apache.

Apache с PHP-FPM

Чтобы использовать PHP-FPM с Apache, вы сначала должны убедиться, что у вас есть
менеджер процессов FastCGI php-fpm двоичный и модуль Apache FastCGI
установлен (например, в системе на основе Debian вам необходимо установить
libapache2-mod-fastcgi и php7. 1-fpm пакетов).

PHP-FPM использует так называемые пулы для обработки входящих запросов FastCGI. Вы можете
настроить произвольное количество пулов в конфигурации FPM. В бассейне
вы настраиваете либо сокет TCP (IP и порт), либо сокет домена Unix для
слушай дальше. Каждый пул также может запускаться под другим UID и GID:

.

; пул под названием www
[www]
пользователь = www-data
группа = www-данные

; использовать сокет домена unix
слушайте = /var/run/php/php7.1-fpm.носок

; или слушать TCP-сокет
слушайте = 127.0.0.1:9000
 

Использование mod_proxy_fcgi с Apache 2.4

Если вы используете Apache 2.4, вы можете использовать mod_proxy_fcgi для передачи входящих
запросы к PHP-FPM. Настройте PHP-FPM для прослушивания сокета TCP или Unix, включите
mod_proxy и mod_proxy_fcgi в вашей конфигурации Apache и используйте
SetHandler директива для передачи запросов на файлы PHP в PHP FPM:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21 год
22
23
24
25
26
27
28
29
30
31 год
32
33
34
35 год
36
37
38
39
40
41 
 
    ServerName домен.  / (./path-to-app/(.*\.php(/.*)?)$ fcgi: //127.0.0.1: 9000 / var / www / project / public / $ 1

    DocumentRoot / var / www / project / public
    <Каталог / var / www / project / public>
        # включить перезапись .htaccess
        AllowOverride All
        Требовать все предоставлено
    

    # раскомментируйте следующие строки, если вы устанавливаете ресурсы как символические ссылки
    # или возникнут проблемы при компиляции ресурсов LESS / Sass / CoffeeScript
    # 
    # Options FollowSymlinks
    # 

    Журнал ошибок / var / log / apache2 / project_error.бревно
    CustomLog /var/log/apache2/project_access.log в сочетании

 

PHP-FPM с Apache 2.2

В Apache 2.2 или ниже вы не можете использовать mod_proxy_fcgi . Вы должны использовать
вместо этого используйте директиву FastCgiExternalServer. Следовательно, ваша конфигурация Apache
должно выглядеть примерно так:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21 год
22
23
24
25
26 
 
    ServerName домен. tld
    ServerAlias ​​www.domain.tld

    AddHandler php7-fcgi .php
    Действие php7-fcgi / php7-fcgi
    Псевдоним / php7-fcgi / usr / lib / cgi-bin / php7-fcgi
    FastCgiExternalServer / usr / lib / cgi-bin / php7-fcgi -host 127.0.0.1:9000 -pass-header Авторизация

    DocumentRoot / var / www / project / public
    <Каталог / var / www / project / public>
        # включить перезапись .htaccess
        AllowOverride All
        Заказать разрешить, запретить
        Разрешить от всех
    

    # раскомментируйте следующие строки, если вы устанавливаете ресурсы как символические ссылки
    # или возникнут проблемы при компиляции ресурсов LESS / Sass / CoffeeScript
    # 
    # Options FollowSymlinks
    # 

    Журнал ошибок / var / log / apache2 / project_error.бревно
    CustomLog /var/log/apache2/project_access.log в сочетании

 

Если вы предпочитаете использовать сокет Unix, вы должны использовать опцию -socket
вместо:

 FastCgiExternalServer / usr / lib / cgi-bin / php7-fcgi -socket /var/run/php/php7.  / index \.(. + \. php) (/.*) $;
        включить fastcgi_params;

        # необязательно установить значение переменных среды, используемых в приложении
        # fastcgi_param APP_ENV prod;
        # fastcgi_param APP_SECRET ;
        # fastcgi_param DATABASE_URL "mysql: // db_user: [электронная почта защищена]: 3306 / db_name";

        # Когда вы используете символические ссылки, чтобы связать корень документа с
        # текущую версию вашего приложения, вы должны передать настоящую
        # путь к приложению вместо пути к символической ссылке на PHP
        # FPM.# В противном случае OPcache PHP может некорректно обнаруживать изменения в
        # ваши файлы PHP (см. https://github.com/zendtech/ZendOptimizerPlus/issues/126
        # для дополнительной информации).
        # Предостережение: когда PHP-FPM размещен на машине, отличной от nginx
        # $ realpath_root может не разрешиться так, как вы ожидали! В этом случае попробуйте использовать
        # $ document_root вместо этого. 
        fastcgi_param SCRIPT_FILENAME $ realpath_root $ fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $ realpath_root;
        # Предотвращает URI, включающие передний контроллер.Это будет 404:
        # http: //domain.tld/index.php/some-path
        # Удалите внутреннюю директиву, чтобы разрешить такие URI
        внутренний;
    }

    # вернуть 404 для всех остальных файлов php, не соответствующих переднему контроллеру
    # это предотвращает доступ к другим php-файлам, к которым вы не хотите быть доступными.
    расположение ~ \ .php $ {
        возврат 404;
    }

    error_log /var/log/nginx/project_error.log;
    access_log /var/log/nginx/project_access.log;
}
 

Примечание

В зависимости от конфигурации PHP-FPM, fastcgi_pass также может быть
Астрахань-Ашхабад 127.0.0.1: 9000 .

Подсказка

Это выполняет только index.php в общедоступном каталоге. Все остальные файлы
с окончанием на «. php» будет отказано.

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

Осторожно

После развертывания в производственной среде убедитесь, что не может получить доступ к index.php
сценарий (т.е. http://example.com/index.php ).

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

Базовая конфигурация PHP 7 и Nginx в Ubuntu 16.04 Linux

Nginx быстро обгоняет Apache в качестве любимого веб-сервера. Для веб-приложений, созданных на таких языках, как Rails и Python, он практически повсеместен, но немного медленнее приживается в мире PHP. Отчасти это связано с тем, насколько легко PHP и Apache сочетаются друг с другом.Однако PHP и Nginx могут взаимодействовать почти так же легко, и с выпуском PHP 7 их объединение может стать довольно быстрым вариантом.

Пакеты

Перво-наперво. Обновите Ubuntu и получите пакеты Nginx и PHP.

 # sudo apt-get update && sudo apt-get -y upgrade
# sudo apt-get -y install nginx php7.0 php7.0-fpm 

Когда установка будет завершена, все пакеты должны быть на месте и фактически запущены. Чтобы убедиться, что это так, вы можете проверить, что и Nginx, и службы PHP-FPM работают в Systemd.

 # sudo systemctl status nginx
# sudo systemctl status php7.0-fpm 

Если Systemd подтверждает, что обе службы запущены, сервер действительно должен быть включен, и вы сможете увидеть страницу приветствия Nginx по умолчанию, перейдя на localhost в браузере.

Конфигурация

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

Nginx.conf

Основной файл конфигурации для Nginx — это nginx.conf . Откройте его в любом текстовом редакторе. Для этого потребуются права root, поэтому текстовый редактор, такой как Vim, вероятно, будет лучшим. Конфигурация по умолчанию в основном подходит. Очевидно, что есть вещи, которые можно сделать для повышения скорости и безопасности системы, но большая часть этого выходит за рамки этого базового руководства.Если вы хотите повысить производительность, прокомментированные параметры Gzip помогут со сжатием и могут ускорить процесс. Что касается безопасности, добавление следующих трех строк поможет предотвратить вредоносную активность.

 add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; режим = блок"; 

ПОДПИСАТЬСЯ НА НОВОСТИ И RSS
Подпишитесь на RSS и НОВОСТНОЙ БЮЛЛЕТЕНЬ и получайте последние новости Linux, вакансии, советы по карьере и учебные пособия.



Конфигурация сайта

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

Используя текстовый редактор, создайте файл по адресу / etc / nginx / sites-available / yoursite .Этот файл будет содержать любую конфигурацию для вашего нового веб-сайта PHP 7. Следующий пример содержит разбивку комментариев о том, что делает каждая строка. Это довольно простая конфигурация, но она справится со своей задачей.


server {

#Nginx должен прослушивать порт 80 для запросов к yoursite.com
слушать 80;
имя_сервера yoursite.com;

# Создание журналов доступа и ошибок в / var / log / nginx
access_log /var/log/nginx/yoursite.access_log main;
error_log / var / log / nginx / ваш сайт. error_log info;

#Nginx должен искать ваш сайт в / var / www / yoursite
корень / var / www / yoursite /;
# Домашняя страница вашего сайта - это файл с именем index.php
индекс index.php;

# Указывает, что Nginx ищет файлы .php
расположение ~ \ .php $ {
# Если файл не найден, 404
try_files $ uri = 404;
# Включить конфигурацию fastcgi Nginx
включить /etc/nginx/fastcgi.conf;
# Найдите FastCGI Process Manager в этом месте
fastcgi_pass unix: / запустить / php / php7.0-fpm.sock;
}
}

 

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

 # cd / etc / nginx / с поддержкой сайтов
# sudo ln -s / etc / nginx / sites-available / yoursite 

Безопасность PHP.ini

Безопасность — подвижная цель, и невозможно опередить все возможные угрозы, но всегда полезно заблокировать установка любого нового сервера в максимально возможной степени.Есть несколько простых настроек, которые можно внести в файл конфигурации php.ini , которые помогут защитить PHP. В текстовом редакторе откройте /etc/php/7.0/fpm/php.ini . Это огромный файл. Опять же, Vim или что-то еще с функцией поиска, вероятно, лучше всего.

Сначала найдите disable_functions и добавьте phpinfo, system, mail, exec в конец строки функций, которые уже существуют. Затем найдите file_uploads и установите для него значение Off .Затем найдите sql.safe_mode и переключите его с на . Наконец, найдите allow_url_fopen и установите для него значение Off . Перед закрытием файла добавьте еще одну строку в конец.

 register_globals = Off 

Когда все будет готово, сохраните и закройте. Перезагрузите сервер, и он должен быть готов к работе.

 # sudo systemctl перезапуск php7.0-fpm
# sudo systemctl restart nginx 

Куда идти дальше

Как видно, сервер Ubuntu должен иметь возможность запускать большинство веб-сайтов PHP.Любые файлы PHP, помещенные в / var / www / yoursite , будут запускаться сервером. Сначала он будет искать файл index.php , и веб-сайт может разветвляться оттуда. Конечно, есть гораздо больше того, что можно сделать для настройки PHP и Nginx для обеспечения скорости, безопасности и практически любых особых ситуаций, но теперь у вас есть хорошая отправная точка.

FreeBSD установить PHP 7.2 с FPM для Nginx

Как установить PHP 7.2 с FPM для веб-сервера Nginx, работающего в операционной системе FreeBSD?

Введение: PHP — это аббревиатура от «PHP: препроцессор гипертекста.«Это язык сценариев общего назначения с открытым исходным кодом. PHP удобен для веб-разработки и запуска популярных программ, таких как MediaWiki, WordPress и других. PHP прост в освоении и позволяет на лету писать динамически генерируемые веб-страницы. На этой странице показано, как установить PHP 7.2 в системе Unix FreeBSD v11.x вместе с веб-сервером Nginx.

FreeBSD устанавливает PHP 7.2 с FPM для Nginx

Процедура установки PHP 7.2 на FreeBSD следующая:

  1. Обновление дерева портов FreeBSD
  2. Установите PHP 7.2 бинарный пакет: pkg install nginx
  3. Установите двоичный пакет Nginx
  4. Настроить Nginx и PHP 7.2
  5. Включите службу PHP-fpm во FreeBSD
  6. Проверить установку

Разберем все шаги подробно.

1. Обновление дерева портов FreeBSD

Вы должны использовать команду portsnap
# portsnap fetch update

2. Установите PHP 7.2 на FreeBSD

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

Метод портов

# cd / usr / ports / lang / php72 /
# make install clean

Метод двоичного пакета

Запустите команду pkg, чтобы установить его:
# pkg install php72

Для проверки проверьте версию PHP, введите:
php -v
php --version

3. Установите расширения PHP 7.2 на FreeBSD

Опять же, расширения PHP можно установить с помощью портов или метода pkg.Используйте любой из следующих способов.

Чтобы установить порт, выполните следующую команду и выберите необходимые расширения:
# cd / usr / ports / lang / php72-extensions / && make install clean

ИЛИ добавьте двоичный пакет:
# pkg install php72- extension

Другой вариант — установка отдельных расширений PHP в соответствии с потребностями вашего веб-приложения или программного проекта. Можно искать расширения PHP 7.2 с помощью команды pkg и команды grep / egrep.
# pkg search php72 | grep gd
# pkg search php72 | egrep -i --color 'gd | mysqli | openssl'
# pkg search php72 | egrep --color -i - '- (gd | mysqli | openssl | memcached | opcache | json | mbstring | imagick | xml | zip | composer | igbinary) -'

Просто установите его:
# pkg install php72 -composer php72-gd php72-json
### OR ###
# pkg install php72-composer-1.6.5 php72-gd-7.2.10 php72-json-7.2.10 php72-mbstring-7.2.10 php72-mysqli-7.2.10 php72-opcache-7.2.10 php72-openssl-7.2.10 php72-pecl-imagick-3.4 .3_2 php72-pecl-memcached-3.0.4 php72-xml-7.2.10 php72-zip-7.2.10 php72-pecl-igbinary-2.0.7

4. Настройте PHP-FPM

Отредактируйте файл /usr/local/etc/php-fpm.d/www.conf
# vi /usr/local/etc/php-fpm.d/www.conf
Найдите строку:
listen = 127.0 .0.1: 9000
Обновите его следующим образом:
listen = / var / run / php72-fpm.sock
Раскомментируйте следующую строку:
listen.owner = www
listen.group = www
listen.mode = 0660

Сохраните и закройте файл. Включить службу php-fpm:
# sysrc php_fpm_enable = YES
Команды для запуска, остановки, перезапуска службы php-fpm на сервере FreeBSD:
# service php-fpm stop
# service php-fpm start
# service php-fpm restart
# service php-fpm status

Примечание о конфигурации PHP 7

Вам необходимо установить php.ini с помощью команды php:
# cp -v /usr/local/etc/php.ini-production /usr/local/etc/php.ini
/usr/local/etc/php.ini -production -> /usr/local/etc/php.ini

Затем мы собираемся защитить PHP и настроить его:
# vi /usr/local/etc/php/99-custom.ini
Добавьте следующий конфиг:

 display_errors = Выкл.
safe_mode = Выкл.
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
expose_php = Выкл.
log_errors = Вкл.
error_log = / var / log / nginx / php.scripts.log
register_globals = Выкл.
cgi.force_redirect = 0
file_uploads = Вкл.
allow_url_fopen = Выкл.
sql.safe_mode = Выкл.
disable_functions = show_source, system, shell_exec, passthru, proc_open, proc_nice, exec
max_execution_time = 60
memory_limit = 60 МБ
upload_max_filesize = 2 млн
post_max_size = 2 млн
cgi.fix_pathinfo = 0
sendmail_path = / usr / sbin / sendmail [email protected] -t 

Сохраните и закройте файл. Перезапустите PHP на FreeBSD:
# service php-fpm restart

5. Настройте Nginx для использования PHP 7.2 (PHP-FPM)

Последний шаг — подключение Nginx к сервису PHP-FPM по протоколу FCGI. Отредактируйте свой виртуальный домен или файл nginx.conf следующим образом:
# cd / usr / local / etc / nginx
# vi nginx.conf

OR
# vi vdomains / http.192.168.2.31.conf
Вот обновленный образец файла конфигурации:

 сервер {
    имя_сервера 192.168.2.31; # используйте доменное имя, если оно у вас есть
    access_log /var/log/nginx/192.168.2.31.access.log;
    журнал_ошибок / var / log / nginx / 192.(. +? \. php) (/.*) $;
        if (! -f $ document_root $ fastcgi_script_name) {
                возврат 404;
        }

        # Устранение уязвимостей https://httpoxy.org/
         fastcgi_param HTTP_PROXY "";

        fastcgi_pass unix: /var/run/php72-fpm.sock;
        fastcgi_index index.php;

        # включить настройку fastcgi_param
        включить fastcgi_params;

        # Параметр SCRIPT_FILENAME используется для определения PHP FPM
        # имя скрипта.
        fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
    }
} 

Перезагрузите или перезапустите сервер Nginx:
# service nginx reload

6.Протестируйте установку

Создайте сценарий PHP под названием test.php в / wwwwiki /
# vi /wwwwiki/test.php
Добавьте следующий код, который показывает информацию о конфигурации PHP с использованием phpinfo:

Сохраните и закройте файл. Установите жесткие права доступа к файлам в DocumentRoot (корень веб-сервера):
# chown -R wwwwiki: wwwwiki / wwwwiki /
# chmod -R 0555 / wwwwiki /

Запустите веб-браузер и проверьте его:
http: //192.168 .2.31 / test.php
http: // ваше-доменное-имя-здесь / test.php

И вот у вас PHP работает должным образом, а Nginx обращается к PHP-FPM через сокет Unix.

Как проверить, что PHP-fpm работает

Используйте команду sockstat во FreeBSD для вывода списка запущенных служб, открытых портов и сокетов unix:
# sockstat -46lu | egrep --color 'www | nginx | ​​php'
Также проверьте файлы журнала, если у вас возникнут проблемы с запуском PHP:
# ls -l / var / log / nginx /
# tail -f / var / log / nginx / 192.168.2.31.error.log

Нажмите, чтобы увеличить изображение

Заключение

В этом руководстве показано, как безопасно установить PHP FPM и настроить его с помощью сокета unix.Теперь у вас есть полностью рабочий сервер Nginx вместе с PHP 7.2 для создания динамических веб-страниц по запросу. В следующей части серии показано, как установить сервер базы данных для создания полнофункционального веб-сервера, работающего в операционной системе FreeBSD.

Полный комплект конфигурации Nginx для WordPress

Глава 09

Последнее обновление 6 мая 2020 г.

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

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

  • ssl.com — WordPress на HTTPS
  • ssl-fastcgi-cache.com — WordPress на HTTPS с кэшированием страниц FastCGI
  • мультисайт-поддомен.com — WordPress Multisite с использованием поддоменов
  • multisite-subdirectory.com — мультисайт WordPress, использующий подкаталоги

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

Использование

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

Резервное копирование любой существующей конфигурации:

  Судо мв / и т. Д. / Nginx /etc/nginx.backup
  

Скопируйте один из примеров конфигураций из sites-available в sites-available / yourdomain.com :

  sudo cp /etc/nginx/sites-available/ssl.com / etc / nginx / sites-available / yourdomain.com`
  

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

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

  sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/yourdomain.com
  

Проверить конфигурацию:

  судо nginx -t
  

Если конфигурация прошла успешно, перезапустите Nginx:

  sudo / etc / init.перезагрузка d / nginx
  

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

Ниже приведен файл конфигурации ssl.com Nginx, содержащийся в пакете. Это должно дать вам хорошее представление о том, каково использовать наши конфигурации.

Предупреждение: Следующая конфигурация Nginx не будет работать сама по себе. Вы заметите, что есть несколько операторов include, которым требуются файлы, содержащиеся в пакете. Загрузите полный пакет конфигурации Nginx

  сервер {
    # Порты для прослушивания, раскомментируйте один.прослушать 443 ssl http2;
    слушайте [::]: 443 ssl http2;

    # Имя сервера для прослушивания
    имя_сервера ssl.com;

    # Путь к корню документа
    root /sites/ssl.com/public;

    # Пути к файлам сертификатов.
    ssl_certificate /etc/letsencrypt/live/ssl.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ssl.com/privkey.pem;

    # Файл для использования в качестве индекса
    индекс index.php index.html;

    # Переопределяет журналы, определенные в nginx.conf, разрешает журналы для каждого сайта.
    журнал_доступа / сайты / ssl.com / logs / access.log;
    error_log /sites/ssl.com/logs/error.log;

    # Правила блокировки сервера по умолчанию
    включить global / server / defaults.conf;

    # Правила SSL - ssl_certificate и т. Д.
    включить global / server / ssl.conf;

    место расположения / {
        try_files $ uri $ uri / /index.php?$args;
    }

    расположение ~ \ .php $ {
        try_files $ uri = 404;
        включить global / fastcgi-params.conf;

        # Используйте пул php-fpm, определенный в переменной upstream.
        # См. Определение в global / php-pool.conf./robots.txt$ /index.php последний;
}

# Перенаправить http на https
server {
    слушать 80;
    слушать [::]: 80;
    имя_сервера ssl.com www.ssl.com;

    возврат 301 https: //ssl.com$request_uri;
}

# Перенаправить www на не-www
server {
    слушать 443;
    слушать [::]: 443;
    имя_сервера www.ssl.com;

    возврат 301 https: //ssl.com$request_uri;
}
  

Это все!

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

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

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

PHP, FPM и Nginx | Серверы для хакеров

филиппинских песо

Мы видим, что php 7.0 доступен из коробки:

  sudo apt-cache показать php-cli  

Вместо этого мы начнем с установки последней версии PHP 7.1 через репозиторий populate PHP.

  # Добавить репозиторий и обновить локальный кеш доступных пакетов
sudo add-apt-repository -y ppa: ondrej / php
sudo apt-get update

# Искать пакеты, начинающиеся с PHP,
# мы увидим php7.1- * пакеты доступны
sudo apt-cache search -n php *

# Установить PHP-FPM, PHP-CLI и модули
sudo apt-get install -y php7.1-fpm php7.1-cli php7.1-curl php7.1-mysql php7.1-sqlite3 \
    php7.1-gd php7.1-xml php7.1-mcrypt php7.1-mbstring php7.1-iconv  

После его установки мы можем увидеть некоторые похожие соглашения от Nginx (и другого программного обеспечения в Debian / Ubuntu).

SAPI

PHP в Debian / Ubuntu разделен по версии и интерфейсу программирования серверных приложений. SAPI — это контекст, в котором выполняется PHP.Наиболее распространены:

  • cli — при запуске из командной строки
  • fpm — при выполнении веб-запроса через fastcgi
  • apache2 — при запуске в Apache mod-php

Конфигурация

Мы можем увидеть разделение конфигурации между версией и SAPI, проверив пути к файлам в пределах / и т. Д. :

  компакт-диск / etc / php
ls -lah

> ... 5.6 /
> ... 7.0 /
> ... 7.1 /

cd 7.1
ls -lah

> ... cli /
> ... fpm /  

В каждом каталоге SAPI (например,грамм. cli или fpm) существует файл php.ini и каталог conf.d . Мы можем редактировать php.ini для каждого SAPI и использовать символические ссылки в каталоге conf.d для включения или отключения модулей для каждого SAPI.

Модули

PHP в Debian / Ubuntu использует символические ссылки, чтобы решить, какие из них загружаются в SAPI. Все файлы конфигурации модуля находятся в / etc / php / / mods-available , а затем загружаются через символические ссылки в / etc / php / / / conf.d .

Nginx

После установки PHP мы можем настроить Nginx для отправки запросов PHP на PHP-FPM:

  сервер {
    слушать 80;

    корень / вар / www / html;

    имя сервера _;

    index index.html index.htm index.debian-default.html index.php;

    место расположения / {
        try_files $ uri $ uri / /index.php$is_args$args;
    }

    расположение ~ \ .php $ {
        включить сниппеты / fastcgi-php.conf;
        fastcgi_pass unix: /run/php/php7.1-fpm.sock;
    }
}  

После завершения редактирования мы можем протестировать Nginx и перезагрузить:

  судо nginx -t
sudo service nginx перезагрузить  

В видео я покажу вам некоторое поведение в отношении вышеуказанной конфигурации.В частности, конфигурация try_files позволяет использовать «красивые URL-адреса», то есть нам не нужно добавлять index.php в URL-адрес в нашем браузере, чтобы Nginx мог использовать файл index.php .

Приведенный выше файл конфигурации будет искать файлы php в каталоге / var / www / html и отправлять запросы в PHP-FPM, если запрашивается файл с расширением .php .

Как установить стек Nginx, MySQL, PHP v7 (LEMP) на CentOS 7

VPS

access_time

12 ноября 2019 г.

hourglass_empty

4min Read

person_outline

Edgaras G.

В этом руководстве вы узнаете, как установить стек LEMP на сервер CentOS 7. Это одна из самых популярных групп программного обеспечения, которое вы можете использовать для создания своего веб-сайта. Давайте приступим к делу.

Что такое LEMP?

LEMP — это набор программ, которые работают вместе для обслуживания динамических веб-сайтов или веб-приложений. Он состоит из L inux (операционная система сервера), E NginX / Nginx (приложение веб-сервера), M ySQL (система управления базами данных) и P HP (язык сценариев).

LEMP — популярная альтернатива LAMP, которая использует Apache вместо Nginx и ориентирована на обслуживание статических веб-страниц. Существуют также WAMP и MAMP, заменяющие Linux на Windows и macOS.

Прежде чем мы начнем обучение по установке LEMP, убедитесь, что ваш сервер или VPS работает на CentOS 7. Если вы используете тарифный план Hostinger VPS, установите CentOS с вкладки Servers в hPanel.

Как установить стек LEMP

Теперь, когда Linux установлен, мы проведем вас через установку Nginx, MySQL и PHP.

Это руководство требует, чтобы вы имели root-доступ и использовали SSH-клиент, например PuTTY (Windows) или терминальную оболочку (Linux, macOS), для подключения к вашему VPS.

Шаг 1. Установка Nginx на CentOS 7

  1. Поскольку Nginx недоступен в репозиториях CentOS по умолчанию, нам нужно сначала установить репозиторий EPEL, выполнив следующую команду:
     yum install epel-release -y 
  2. Далее мы будем установить сам Nginx:
     yum install nginx -y 
  3. После завершения установки введите следующие строки одну за другой для активации Nginx:
     systemctl start nginx
    systemctl enable nginx 
  4. Проверьте, работает ли Nginx, посетив общедоступный IP-адрес вашего сервера.Ваша страница должна выглядеть так:

    Используйте команду sudo , если у вас нет корневого доступа

Шаг 2: Установка MySQL (MariaDB)

Мы собираемся установить MySQL с помощью службы MariaDB, сообщества форк MySQL.

  1. MariaDB включен в репозитории CentOS по умолчанию, поэтому мы можем просто запустить команду y um для его установки:
     yum install mariadb-server mariadb -y 
  2. После завершения установки включите и запустите Служба MariaDB:
     systemctl start mariadb
    systemctl enable mariadb 
  3. Защитите установку, выполнив следующую команду:
     mysql_secure_installation 

    MariaDB запросит у вас пароль root, которого у вас нет, потому что вы только что установили MySQL.По этой причине просто нажмите Enter.

  4. В следующем окне вас спросят, хотите ли вы установить пароль root. Введите Y и следуйте инструкциям:
     Введите текущий пароль для root (введите, если нет):
    ОК, пароль успешно использован, идем дальше…
    
    Установка пароля root гарантирует, что никто не сможет войти в MariaDB
    пользователь root без надлежащей авторизации.
    
    Новый пароль:
    Повторно введите новый пароль:
    Пароль успешно обновлен!
    Перезагрузка таблиц привилегий ..
    ... Успех! 
  5. Скрипт вернет несколько контрольных вопросов.Мы рекомендуем вам нажать Y для всех из них.
     Удалить анонимных пользователей? [Д / Н]
    Запретить удаленный вход root? [Д / Н]
    Удалить тестовую базу данных и получить к ней доступ? [Д / Н]
    Обновить таблицы привилегий сейчас? [Y / n] 

    После завершения настройки перейдите к установке PHP.

Шаг 3: Установка PHP v7.3

  1. Нам нужно загрузить и установить дополнительный репозиторий CentOS, который содержит необходимые пакеты для PHP v7.3. Выполните следующие команды одну за другой:
     wget http: // rpms.remirepo.net/enterprise/remi-release-7.rpm
    rpm -Uvh remi-release-7.rpm 
  2. Включить репозиторий php73, который по умолчанию отключен:
     yum install yum-utils -y
    yum-config-manager --enable remi-php73 
  3. После этого установите пакет PHP:
     yum --enablerepo = remi, remi-php73 install php-fpm php-common 

    При запросе разрешения на установку просто нажмите Г .

  4. Теперь установите общие модули PHP, чтобы убедиться, что служба работает правильно:
     yum --enablerepo = remi, remi-php73 install php-opcache php-pecl-apcu php-cli php-pear php-pdo php-mysqlnd php-pgsql php-pecl-mongodb php-pecl-redis php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml 

Шаг 4: Настройка Nginx для работы с PHP 7

Последнее, что нам нужно сделать, это настроить Nginx для работы с PHP 7.Вот как это сделать:

  1. Создайте новый файл конфигурации Nginx, запустив текстовый редактор nano:
     nano /etc/nginx/conf.d/default.conf 

    Затем вставьте этот код:

     server {
     слушать 80;
    server_name your_server_ip;
    
     # обратите внимание, что эти строки взяты из блока "location /"
     корень / usr / share / nginx / html;
    index index.php index.html index.htm;
    
     место расположения / {
     try_files $ uri $ uri / = 404;
     }
     error_page 404 /404.html;
     error_page 500 502 503 504 / 50x.html;
     location = /50x.html {
     корень / usr / share / nginx / html;
    }
    
     местоположение ~ .php $ {
     try_files $ uri = 404;
     fastcgi_pass unix: /var/run/php-fpm/php-fpm.sock;
     fastcgi_index index.php;
     fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
     включить fastcgi_params;
     }
    } 

    ВАЖНО! Замените your_server_ip фактическим IP-адресом сервера.

  2. Сохраните файл, нажав CTRL + X (или CMD + X для пользователей Mac).Затем перезапустите Nginx, чтобы изменения вступили в силу:
     systemctl restart nginx 
  3. Откройте PHP-FPM Конфигурация :
     nano /etc/php-fpm.d/www.conf 

    Найдите и измените эти строки:

    • user = apache to user = nginx
    • group = apache to group = nginx
    • listen.owner = никто от до listen.owner = nginx
    • listen.group = никто слушать.group = nginx
  4. После этого добавьте следующую строку под ; listen = 127.0.0.1:9000
     listen = /var/run/php-fpm/php-fpm.sock 
  5. Сохраните файл нажав CTRL + X . Наконец, запустите PHP-FPM и включите его при загрузке:
     systemctl start php-fpm.service
    systemctl enable php-fpm.service 

Заключение

Стек LEMP (Linux, ENginx, MySQL, PHP) — идеальный выбор для обслуживания динамических веб-страниц или веб-приложений.К счастью, процесс установки прост. Обладая базовыми знаниями интерфейса командной строки, вы можете легко настроить все необходимые программы на своем VPS.

Из этой статьи вы узнали, как установить LEMP на CentOS 7. В заключение, давайте еще раз рассмотрим все шаги:

  1. Получите репозиторий EPEL и установите Nginx на свой сервер.
  2. Установите и настройте MariaDB
  3. Установите PHP и все его общие пакеты.
  4. Настройте Nginx для работы с PHP.

Удачи и не стесняйтесь оставлять комментарии, если у вас есть вопросы!

Советы и рекомендации по настройке и оптимизации Nginx и PHP-FPM — если не верно, то неверно

Я написал перед руководством Как установить Nginx / PHP-FPM на Fedora 29/28, CentOS / RHEL 7.5 / 6.10, но это руководство является просто руководством по установке, и во многих случаях базовая конфигурация Nginx и PHP-FPM достаточно хороша, но если вы хотите выжать все силы из своего VPS или веб-сервера / серверов и немного упростить работу по обслуживанию, тогда это руководство может оказаться полезным.Эти советы полностью основаны на моем собственном опыте, поэтому они могут не быть абсолютной правдой, а в некоторых ситуациях совершенно другая конфигурация может работать лучше. Также хорошо не забывать оставлять ресурсы для других служб, даже если вы запускаете пример, MySQL, PostgreSQL, MongoDB, почтовый сервер, сервер имен и / или сервер SSH на том же компьютере.

И да, поехали…

Советы и рекомендации по настройке и оптимизации Nginx

Nginx Совет 1. — Организация файлов конфигурации Nginx

Обычно файлы конфигурации Nginx расположены по пути / etc / nginx .
Один хороший способ организовать файлы конфигурации — использовать Debian / Ubuntu Apache style setup:

 
## Основной файл конфигурации ##
/etc/nginx/nginx.conf

## Файлы конфигурации виртуального хоста на ##
/ и т.д. / nginx / сайты-доступные /
/ и т. д. / nginx / сайты-включенные /

## Другие файлы конфигурации (при необходимости) ##
/etc/nginx/conf.d/
  

Файлы

Virtualhost имеют 2 пути, потому что каталог , доступный для сайтов , может содержать что угодно, например, тестовые конфигурации, только что скопированные / созданные конфигурации, старые конфигурации и так далее.А с поддержкой сайтов содержит только реально включенные конфигурации, на самом деле только символические ссылки на каталог с доступными сайтами.

Не забудьте добавить в конец файла nginx.conf следующие include:

 
## Загрузить файлы конфигурации виртуального хоста. ##
включить / etc / nginx / sites-enabled / *;

## Загрузите другие конфиги из conf.d / ##
включить /etc/nginx/conf.d/*;
  

Nginx Совет 2. — Определите Nginx worker_processes и worker_connections

Настройка по умолчанию подходит для worker_processes и worker_connections , но эти значения можно немного оптимизировать:
max_clients = worker_processes * worker_connections

Базовая настройка Just Nginx может обрабатывать сотни одновременных подключений:

 
worker_processes 1;
worker_connections 1024;
  

Обычно 1000 одновременных подключений на один сервер — это хорошо, но иногда другие части, такие как диски на сервере, могут быть медленными, и это приводит к блокировке Nginx при операциях ввода-вывода.Чтобы избежать блокировки, используйте следующую настройку: один worker_precess / на ядро ​​процессора , например:
Рабочие процессы

 
worker_processes [количество ядер процессора];
  

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

 
cat / proc / cpuinfo | процессор grep
процессор: 0
процессор: 1
процессор: 2
процессор: 3
  

Итак, вот 4 ядра, и окончательная настройка worker_processes может быть следующей:

 
worker_processes 4;
  

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

Окончательная настройка worker_processes может быть следующей:

 
worker_connections 1024;
  

Я видел некоторые конфигурации, в которых администраторы серверов используют слишком много Apache, и думаю, что если я установлю Nginx worker_processes на 50 и worker_connections на 20000, то мой сервер сможет обрабатывать весь трафик один раз, что мы получаем ежемесячно… но да, это неправда.Это просто пустая трата ресурсов и может вызвать серьезные проблемы …

Nginx Совет 3. — Скрыть токены сервера Nginx / Скрыть номер версии Nginx

Это хорошо по соображениям безопасности: скрыть токены сервера / скрыть номер версии Nginx, особенно если запущена какая-то устаревшая версия Nginx. Это очень просто сделать, просто установите server_tokens с в разделе http / server / location , например:

 
server_tokens выключен;
  

Nginx Совет 4.- Максимальный размер тела запроса / загрузки Nginx (client_max_body_size)

Если вы хотите разрешить пользователям загружать что-то или загружать что-то лично по HTTP, вам, возможно, следует на увеличить размер сообщения . Это можно сделать с помощью значения client_max_body_size , которое находится в разделе http / server / location . По умолчанию это 1 МБ, но можно установить, например, 20 МБ, а также увеличить размер буфера со следующей конфигурацией:

 
client_max_body_size 20м;
client_body_buffer_size 128 КБ;
  

Если вы получаете следующую ошибку, значит, вы знаете, что client_max_body_size слишком мало:
«Request Entity Too Large» (413)

Nginx Совет 5.- Nginx Cache Control для статических файлов (директивы управления кешем браузера)

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

 
расположение ~ * \. (jpg | jpeg | gif | png | css | js | ico | xml) $ {
    access_log off;
    log_not_found off;
    истекает 360 дней;
}
  

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

Nginx Совет 6. — Nginx передает PHP-запросы в PHP-FPM

Здесь вы можете использовать стек tpc / ip по умолчанию или напрямую использовать соединение через сокет Unix. Вы также должны настроить PHP-FPM для прослушивания точно такого же ip: порта или сокета unix (с сокетом Unix также должно быть правильное разрешение на сокет). По умолчанию используется ip: port (127.0.0.1:9000), вы, конечно, можете изменить IP-адреса и порты, которые прослушивает PHP-FPM. Вот очень простая конфигурация с закомментированным примером сокета Unix:

 
# Передать скрипты PHP в PHP-FPM
расположение ~ * \.php $ {
    fastcgi_index index.php;
    fastcgi_pass 127.0.0.1:9000;
    #fastcgi_pass unix: /var/run/php-fpm/php-fpm.sock;
    включить fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
    fastcgi_param SCRIPT_NAME $ fastcgi_script_name;
}
  

Также возможно запустить PHP-FPM на другом сервере и Nginx на другом.

Nginx Совет 7. — Предотвратить (запретить) доступ к скрытым файлам с Nginx

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

 
расположение ~ / \. {
    access_log off;
    log_not_found off;
    все отрицать;
}
  

Советы и рекомендации по настройке PHP-FPM

PHP-FPM Совет 1. — Конфигурационные файлы PHP-FPM

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

 
включить = / etc / php-fpm.d / *. conf
  

PHP-FPM Совет 2. — Настройки глобальной конфигурации PHP-FPM

Установите Emergency_restart_threshold , Emergency_restart_interval и process_control_timeout .Значения по умолчанию для этих параметров полностью отключены, но я думаю, что лучше использовать эти параметры в следующем примере:

 
Emergency_restart_threshold 10
Emergency_restart_interval 1м
process_control_timeout 10 с
  

Что это значит? Итак, если 10 дочерних процессов PHP-FPM завершаются с SIGSEGV или SIGBUS в течение 1 минуты, то PHP-FPM перезапускается автоматически. Эта конфигурация также устанавливает 10-секундный лимит времени для дочерних процессов, чтобы они ожидали реакции на сигналы от мастера.

PHP-FPM Совет 3. — Конфигурация пулов PHP-FPM

С помощью PHP-FPM можно использовать разные пулы для разных сайтов и очень точно распределять ресурсы и даже использовать разных пользователей и группы для каждого пула. Ниже приведен пример структуры файлов конфигурации для пулов PHP-FPM для трех разных сайтов (или фактически трех разных частей одного и того же сайта):

 /etc/php-fpm.d/site.conf
/etc/php-fpm.d/blog.conf
/etc/php-fpm.d/forums.conf
 

Только пример конфигурации для каждого пула:
/ etc / php-fpm.d / site.conf

 
[сайт]
слушайте = 127.0.0.1:9000
пользователь = сайт
группа = сайт
request_slowlog_timeout = 5 с
slowlog = /var/log/php-fpm/slowlog-site.log
listen.allowed_clients = 127.0.0.1
pm = динамический
pm.max_children = 5
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 200
listen.backlog = -1
pm.status_path = / статус
request_terminate_timeout = 120 с
rlimit_files = 131072
rlimit_core = неограниченно
catch_workers_output = да
env [HOSTNAME] = $ HOSTNAME
env [TMP] = / tmp
env [TMPDIR] = / tmp
env [TEMP] = / tmp
  

/ и т.д. / php-fpm.d / blog.conf

 
[блог]
слушайте = 127.0.0.1:9001
user = blog
группа = блог
request_slowlog_timeout = 5 с
slowlog = /var/log/php-fpm/slowlog-blog.log
listen.allowed_clients = 127.0.0.1
pm = динамический
pm.max_children = 4
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 200
listen.backlog = -1
pm.status_path = / статус
request_terminate_timeout = 120 с
rlimit_files = 131072
rlimit_core = неограниченно
catch_workers_output = да
env [HOSTNAME] = $ HOSTNAME
env [TMP] = / tmp
env [TMPDIR] = / tmp
env [TEMP] = / tmp
  

/ и т.д. / php-fpm.d / forum.conf

 
[форумы]
слушайте = 127.0.0.1:9002
пользователь = форумы
группа = форумы
request_slowlog_timeout = 5 с
slowlog = /var/log/php-fpm/slowlog-forums.log
listen.allowed_clients = 127.0.0.1
pm = динамический
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 400
listen.backlog = -1
pm.status_path = / статус
request_terminate_timeout = 120 с
rlimit_files = 131072
rlimit_core = неограниченно
catch_workers_output = да
env [HOSTNAME] = $ HOSTNAME
env [TMP] = / tmp
env [TMPDIR] = / tmp
env [TEMP] = / tmp
  

Итак, это всего лишь пример того, как настроить несколько пулов разного размера.

PHP-FPM Совет 4. — Конфигурация диспетчера процессов пула PHP-FPM (pm)

Лучший способ использовать диспетчер процессов PHP-FPM — использовать динамическое управление процессами, поэтому процессы PHP-FPM запускаются только при необходимости. Это почти такая же настройка стиля, как настройка Nginx worker_processes и worker_connections. Так что очень высокие значения не обязательно означают что-то хорошее. Каждый процесс потребляет память, и, конечно, если сайт имеет очень высокий трафик и много памяти сервера, тогда более высокие значения являются правильным выбором, но серверы, такие как VPS (виртуальные частные серверы), обычно ограничены 256 МБ, 512 МБ, 1024 МБ.Этого небольшого объема оперативной памяти достаточно для обработки даже очень высокого трафика (даже десятков запросов в секунду), если его использовать с умом.

Хорошо проверить, сколько процессов PHP-FPM сервер может легко обработать, сначала запустите Nginx и PHP-FPM и загрузите несколько страниц PHP, предпочтительно все самые тяжелые страницы. Затем проверьте использование памяти в соответствии с примером процесса PHP-FPM с помощью команды Linux top или htop . Предположим, что на сервере 512 МБ памяти и 220 МБ можно использовать для PHP-FPM, каждый процесс использует 24 МБ ОЗУ (некоторые огромные системы управления контентом с плагинами могут легко использовать 20-40 МБ / на запрос страницы PHP или даже больше) .Затем просто вычислите значение max_children сервера:
220/24 = 9,17

Итак, хорошее значение pm.max_children равно 9. Это основано только на быстром усреднении, и позже это может быть что-то еще, когда вы увидите более длительное использование памяти для каждого процесса. После быстрого тестирования намного проще установить значение pm.start_servers , значение pm.min_spare_servers и значение pm.max_spare_servers .

Окончательный пример конфигурации может быть следующей:

 
вечера.max_children = 9
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 200
  

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

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

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