Nginx + php-fpm на centos 7

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

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

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

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

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

Мы сделаем более просто, качнем пакет он сам все добавит в конфиги. Качнем файл с настройками репозитория Nginx и сразу установим его:rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.

rpmПереходим к установке Nginx, тут все просто:yum install nginxДобавим Nginx в автозагрузку при старте системы и запустим его:chkconfig —levels 235 nginx on /etc/init.d/nginx startЕсли мы попытаемся подключиться к Nginx, то у нас ничего не получится т.к. правила фаерволла блокируют доступ к 80му порту.

Добавим правила для Nginx:nano /etc/sysconfig/iptablesСодержимое файла примерно следующее:# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended.

*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state —state NEW -m tcp -p tcp —dport 22 -j ACCEPT -A INPUT -j REJECT —reject-with icmp-host-prohibited -A FORWARD -j REJECT —reject-with icmp-host-prohibited COMMITТут видно что разрешен доступ к порту 22, остальные порты заблокированы, возьмем за основу данное правило и немного переделаем его, чтобы оно открывало доступ к порту 80-A INPUT -m state —state NEW -m tcp -p tcp —dport 80 -j ACCEPTИ добавим его под разрешающее правило для SSH Тогда содержимое примет вид:# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state —state NEW -m tcp -p tcp —dport 22 -j ACCEPT -A INPUT -m state —state NEW -m tcp -p tcp —dport 80 -j ACCEPT -A INPUT -j REJECT —reject-with icmp-host-prohibited -A FORWARD -j REJECT —reject-with icmp-host-prohibited COMMIT Применим правила, чтобы Nginx стал доступен для подключения:service iptables restart

Проверяем, зайдя по адресу httр://IP_вашего_серрвера

Видим приветственную страницу Nginx, значит web-сервер доступен для внешних подключений:Немножко «допилим» Nginx, чтобы он не выдавал информацию о себе.

Для примера, попробуем перейти по адресу httр://ip_адрес_сервера/test

Сервер выдаст страницу с ошибкой, в низу которой будет видна версия nginx, что не очень хорошо. нам нужно ее скрыть, а для этого мы идем в:nano /etc/nginx/nginx.conf
и в секции http мы добавим директиву server_tokens off;

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

sendfile on; tcp_nopush on; server_tokens off; keepalive_timeout 65;Сохраним изменения и перезапустим Nginxservice nginx restartОбновляем страницу с ошибкой и видим что версия Nginx больше не отображается. Создадим пользователя для работы с виртуальным хостом Назовем его example: При создании пользователя, отключим ему доступ к шеллу, так безопаснее.useradd example -b /home -m -U -s /bin/false

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

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

passwd exampleСоздадим необходимые, для работы WEB сайта, директории:mkdir -p -m 755 /home/example/www mkdir -p -m 754 /home/example/logsПредоставляем пользователю example права на них:chown -R example: /home/example/www/ chown -R example: /home/example/logs/

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

usermod -a -G example nginx

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

chmod 750 /home/example/

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

Настаиваем первый виртуальный хост Nginx, назовем его example.org
nano /etc/nginx/conf.d/example.org.confС содержимым:

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

server { listen 80; root /home/example/www; access_log /home/example/logs/nginx.access.log; #расположение логов данного хоста server_name example.org www.example.org; location / { index index.php index.html index.htm; } location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }Сохраняем изменения и выходим

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

yum install php-fpm php-pecl-apc php-cli php-pear php-pdo php-mysqlnd php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xmlПереходим к конфигурационном файлу:nano /etc/php.ini
находим строку ;cgi.

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

Нам также требуется перенастроить php-fpm на работу по пользователя Nginx т.к.

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

nano /etc/php-fpm.d/www.confНаходим строки; RPM: apache Choosed to be able to access some dir as httpd user = apache ; RPM: Keep a group allowed to write in log dir. group = apache
Меняем apache на nginx чтобы выглядело; RPM: apache Choosed to be able to access some dir as httpd user = nginx ; RPM: Keep a group allowed to write in log dir. group = nginxСохраняем изменения и выходим Добавим php-fpm в автозагрузку и запустим:chkconfig —levels 235 php-fpm on /etc/init.d/php-fpm startСоздадим тестовый файл, чтобы проверить работоспособность PHP5:nano /home/example/www/test.phpС содержимым:

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

переходим по адресу httр://example.org/test.php

Получаем вот такую страницу, нас интересует строка Server API (на скриншоте подчеркнуто красным) там видно кто обработал данный файл.Все отлично PHP обрабатывается, сайт открывается, переходим к установке MySQL

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

yum install mysql mysql-serverchkconfig —levels 235 mysqld on /etc/init.d/mysqld startНастроим MySQLmysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MySQL to secure it, we'll need the current password for the root user.

If you've just installed MySQL, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): #Нажимаем Enter# Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation.

Set root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. … Success! By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them.

This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] … Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] … Success! By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] — Dropping test database… …

Success! — Removing privileges on test database… … Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] … Success! Cleaning up… All done! If you've completed all of the above steps, your MySQL installation should now be secure.

Thanks for using MySQL!

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

Источник: https://howitmake.ru/blog/centos/141.html

Скоростная Joomla на nginx+php 7.2 (php-fpm) + memcached с selinux enable в CentOS 7

$ sudo yum install policycoreutils

Шаг 2 — Установка и настройка memcached

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

$ sudo yum install memcached

Разрешаем обращение к memcached в фаерволе :

$ sudo firewall-cmd —permanent —zone=public —add-service=memcached

Разрешаем memcached ходить по сети в SElinux:

$ sudo setsebool -P httpd_can_network_memcache 1

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

$ sudo systemctl enable  memcached

Запускаем memcached:

$ sudo systemctl start  memcached

Шаг 3 — Установка PHP 7.2 в режиме FastCGI

Мы будем использовать PHP в режиме FastCGI сервиса (fpm), то есть nginx будет обращаться к PHP как к отдельному процессу:

$ sudo yum install php72-php-fpm php72-php-common php72-php-pecl-memcache php72-php-opcache php72-php-gd php72-php-mbstring php72-php-mysqlnd php72-php-pdo php72-php-pecl-igbinary php72-php-pecl-msgpack

Настройки по умолчанию подходят для большинства серверов. Для тюнинга настроек, обращайтесь к официальной документации PHP FPM site.

Каталог хранения конфигурационных файлов для нашей версии пхп /etc/opt/remi/php72/

Мы внесём следующие изменения в конфигурационный файл

$ sudo vi /etc/opt/remi/php72/php-fpm.d/www.conf

Изменим группу процесса с apache на nginx:

; Unix user/group of processes; Note: The user is mandatory. If the group is not set, the default user's group;       will be used.; RPM: apache user chosen to provide access to the same directories as httpduser = nginx; RPM: Keep a group allowed to write in log dir.

group = nginx

Переключим демон на работу с сокетами:

; The address on which to accept FastCGI requests.; Valid syntaxes are:;   'ip.add.re.ss:port'    — to listen on a TCP socket to a specific IPv4 address on;                            a specific port;;   '[ip:6:addr:ess]:port' — to listen on a TCP socket to a specific IPv6 address on;                            a specific port;;   'port'                 — to listen on a TCP socket to all addresses;                            (IPv6 and IPv4-mapped) on a specific port;;   '/path/to/unix/socket' — to listen on a unix socket.; Note: This value is mandatory.;listen = 127.0.0.1:9000

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

Раскомментируем путь к файлам опкэша, зададим явно путь к логам и ограничение памяти для пхп:

php_value[opcache.file_cache]  = /var/opt/remi/php72/lib/php/opcachephp_admin_value[error_log] = /var/log/php-fpm/72-www-error.logphp_admin_flag[log_errors] = on

php_admin_value[memory_limit] = 128M

Шаг 4 — Установка и настройка Nginx

Устанавливаем nginx:

Читайте также:  Asterisk 11 и freepbx установка на debian 7 wheezy

$ sudo yum install nginx

Разрешаем обращение к nginx в фаерволе :

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

Разрешаем nginx ходить по сети в SElinux к пхп и базе:

$ sudo setsebool -P httpd_can_network_connect 1
$ sudo setsebool -P httpd_can_network_connect_db 1

Файлы конфигурации nginx хранятся в:
•    /etc/nginx/conf.d/ настройки виртуальных хостов и сопутствующие
•    /etc/nginx/nginx.conf основной файл конфигурации
Это пример типового файла конфигурации nginx, joomla.conf, который можно использовать для любых сайтов на Joomla.

server {        listen 80;        server_name YOUR_DOMAIN;        server_name_in_redirect off;        access_log /var/log/nginx/localhost.access_log;        error_log /var/log/nginx/localhost.error_log info;        root PATH_ON_SERVER;        index index.php index.html index.htm default.html default.htm;        # Support Clean (aka Search Engine Friendly) URLs        location / {                try_files $uri $uri/ /index.php?$args;        }        # deny running scripts inside writable directories        location ~* /(images|cache|media|logs|tmp)/.*.(php|pl|py|jsp|asp|sh|cgi)$ {                return 403;                error_page 403 /403_error.html;        }        location ~ .php$ {            fastcgi_pass  unix:/var/run/php-fpm/php72-fpm-www.sock;            fastcgi_index index.php;            include fastcgi_params;            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;            include /etc/nginx/fastcgi.conf;        }        # caching of files         location ~* .(ico|pdf|flv)$ {                expires 1y;        }        location ~* .(js|css|png|jpg|jpeg|gif|swf|xml|txt)$ {                expires 14d;        }

}

Обратите особое внимание на 2 момента:
1.    Параметр fastcgi_pass установлен на юникс-сокет unix:/var/run/php-fpm/php72-fpm-www.sock, который мы указали в настройках php-fpm. Если вы хотите запускать процессы PHP на других серверах необходимо перенастроить на TCP соединения.
2.    Вспомните заменить YOUR_DOMAIN и PATH_ON_SERVER в файле на ваш домен  и путь к папке Joomla на сервере.

Шаг 4.1 — Включение поддержки GZip

Настоятельно рекомендуем включить поддержку GZip compression support, добавив следующий код внутрь секции http в основном конфигурационном файле nginx:

        gzip on;        gzip_http_version 1.1;        gzip_comp_level 6;        gzip_min_length 1100;        gzip_buffers 4 8k;        gzip_types text/plain application/xhtml+xml text/css application/xml application/xml+rss text/javascript application/javascript application/x-javascript        gzip_proxied     any;

        gzip_disable     «MSIE [1-6].»;

Шаг 5 — установка MariaDB

Устанавливаем MariaDB:

$ sudo yum install mariadb-server

После установки, добавляем демон в автозагрузку:

$ sudo systemctl enable mariadb

Запускаем сервер базы данных:

$ sudo systemctl start mariadb

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

$ sudo systemctl status mariadb

Если MariaDB успешно запустилась, мы получим сообщение «Active: active (running)` с последней линией похожей на:

   Oct 10 19:06:20 centos-joomla systemd[1]: Started MariaDB database server.

Шаг 6 — безопасность MariaDB Server

MariaDB включает в свою поставку специальный скрипт, который поволяет сменить некоторые настройки по умолчанию, такие как удалённый вход пользователей и пароли по умолчанию. Для этого выполняем:

$ sudo mysql_secure_installation

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

Шаг 7 — создание базы и отдельного пользователя для Joomla

Входим на сервер MariaDB под рутом:

$ mysql -u root –pМОЙПАРОЛЬБЕЗРОБЕЛА

Создаём базу данных myjoomla(смените на своё название):

CREATE DATABASE myjoomla;

Создаём польователя joomuser для базы myjoomla и паролем ‘password’. Эта команда также даст полные права пользователю на эту базу:

GRANT ALL ON myjoomla.* TO [email protected] IDENTIFIED BY 'password';

Выйти из mysql, войти в веб-интерфейс установщика joomla, указать в настройках базы данных созданную базу, пользователя и пароль. Провести штатную установку.

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

Про настройку Joomla c SSL можно прочитать в нашем руководстве.

Источник: https://www.myod.it/item/38-skorostnaya-joomla-na-nginx-php-7-2-php-fpm-memcached-s-selinux-enable-v-centos-7

how to setup Nginx, php-fpm on Centos 7

The well known, good’ol LAMP stack has slowly made place for a LEMP stack in many of my configurations.

Enough articles have been written on why Apache or Nginx are better in certain situations, but I like the clean way of configuration that Nginx uses. (pronounced Engine X, hence the E in LEMP).

So I generally use Nginx. I however never made an article about it, so here it is, long overdue.

Install Nginx

There are generally three options to install Nginx. First option is to use packages from the vendor, this however leaves you with a older version of Nginx. In the base repository’s of Centos 7, Nginx is not included.

So you need to install epel-release if you wish to go that route, at the time of writing, the available package is 1.10.2.This is the fastest option and large chance it will be updated more frequently then when you manually download and compile it. However if you wan’t the newest features this is the better option.

A third option is to use external repository’s. All methods will result in a working setup.

1) Install Nginx using epel

(recommended method)

yum install epel-release yum install nginx

2) Install Nginx from binary packages

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

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

Then run yum install nginx

note this installs the mainline.

3) Install Nginx straight from source

Notice that there is a difference between mainline and stable version

cd /opt mkdir nginx cd nginx # check the latest version on : http://nginx.org/en/download.html wget http://nginx.org/download/nginx-1.11.10.tar.gz # untar tar xzvf nginx-1.11.10.tar.gz # install dependencies yum install gcc pcre-devel zlib-devel openssl-devel # configure ./configure —with-http_ssl_module # make and make install make make install

4) Install Nginx from external repo

You could use webtatic to install nginx; This is similar to how I am going to install php-fpm :

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum install nginx1w

for more detailed instructions, and dynamic modules, see there blogpost.

Install PHP

Installing PHP (lemP) is done using the php-fpm package (PHP FastCGI Process Manager) now sadly in the epel-release the version is super outdated at this writing : PHP 5.4.

This version is no longer supported, on top of that, its pretty clear that PHP 7+ is faster and less resource hungry. Whatever version you chose, either should work. I use webtatic as repository and have found no issue’s so far.

For PHP 7.1 : (on Centos 7)

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

After that you are ready to install PHP :

yum install php71w-fpm php71w-opcache php71w-mysqlnd php71w-mcrypt php71w-gd php71w-xml

Configure php-fpm

After the installation its time to finetune our setup a bit. Let’s start with php-fpm , we need to change /etc/php-fpm.d/www.conf

Change both the user and the group to nginx.

; Start a new pool named 'www'. [www] ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user$ ; will be used. ; RPM: apache Choosed to be able to access some dir as httpd user = nginx ; RPM: Keep a group allowed to write in log dir. group = nginx […]

note : it’s possible to let Nginx use a socket instead of loopback device. This is a bit faster, but I found that the headache is not really worth it.

Configure Nginx

Depending on the installation there is already a default server configuration. I tend to remove it and replace it with an empty file and create a file [name].conf in /etc/nginx/conf.d/

http server

server { # listen to port 80 listen 80; # server name or names server_name svennd.be; # the location of webroot # I always use /var/www/html/* # Nginx by default uses another structure # but this made the transition from Apache allot easier! root /var/www/html/svennd.be; # in root location location / { # look for index.php/index.html/index.

htm as «index file» index index.php index.html index.htm; # this is specifically for wordpress # makes it possible to have url rewrites try_files $uri $uri/ /index.php?$args; } # default error pages # note that wp already catches most error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.

html { root /usr/share/nginx/html; } # here we have to let nginx know what to do with these php files # as html files are just send directly to the client location ~ .php$ { # if the file is not there show a error : mynonexistingpage.php -> 404 try_files $uri =404; # pass to the php-fpm server fastcgi_pass 127.0.0.1:9000; # also for fastcgi try index.

php fastcgi_index index.

php; # some tweaking fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 16k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; include fastcgi_params; } }

Note that fastcgi_params are installed by php-fpm. In case its missing use the link.

https server

Be sure to check cipherli.st for the latest updates.

server { listen 443 ssl; server_name svennd.be; root /var/www/html/svennd.be; ssl_certificate /opt/letsencrypt/certs/svennd.be/fullchain.pem; ssl_certificate_key /opt/letsencrypt/certs/svennd.be/privkey.pem; # verify chain of trust of OCSP response using Root CA and Intermediate certs ssl_trusted_certificate /opt/letsencrypt/certs/svennd.be/chain.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits ssl_dhparam /opt/letsencrypt/certs/dhparam.pem; # needs more info ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0 # suggested conf (interwebz) ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers «EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4»; ssl_prefer_server_ciphers on; # OCSP Stapling — # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; # need to lookup options resolver 8.8.8.8 valid=300s; resolver_timeout 5s; # headers # note HSTS might break your website if initial setup ! # add_header Strict-Transport-Security «max-age=15768000; includeSubDomains; preload»; # add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection «1; mode=block»; # hide version server_tokens off; location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ .php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 16k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; include fastcgi_params; } }

Install MariaDB

Источник: https://www.svennd.be/nginx-php-fpm-centos-7/

CentOS 7. Установка Nginx php-fpm 7 MySQL(MariaDB) FTP

Marik — 10 фев 2017 20:52 2 245

В этой статье рассмотрим установку на Linux CentOS 7 Вебсервера NginX php-fpm 7.0 ftp а также базы данных MySQL и настройку системы.

Для работы нам потребуется SSH-клиент. Для Windows можно использовать PuTTY, который можно скачать на сайте http://www.chiark.greenend.org.uk/~sgtatham/putty/. Пользователи Linux могут использовать любой другой.

Запустим PuTTY в окно  Host Name введем ip-адрес нашего сервера. И нажмем Open

 Клиент попросит ввести логин и пароль.

Вводим логин root и пароль(внимание при вводе пароль курсор не будет отображать введеные символы, вообще ничего отображать не будет, просто вводим пароль и жмем enter)

Предварительные работы

Возможно в вашей системе уже есть установленные php вебсерверы базы данных и прочее перед началом установки их надо удалитьyum remove httpd* php* php-common* mysql*CentOS сама по себе как и RedHat Linux довольно консервативная система и в репозиториях по умолчанию вы не найдете последние версии php и NginX и поэтому, нам нужно будет установить дополнительные репозитории epel и webtatic
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpmОбновим систему —
yum update

Установка PHP

После обновления смотрим какие версии php нам доступны -yum search php7Нам выдаст подобный список
mod_php71w.x86_64 : PHP module for the Apache HTTP Server php70w.x86_64 : PHP scripting language for creating dynamic web sites php70w-bcmath.x86_64 : A module for PHP applications for using the bcmath library php70w-cli.x86_64 : Command-line interface for PHP php70w-common.

x86_64 : Common files for PHP php70w-dba.x86_64 : A database abstraction layer module for PHP applications php70w-devel.x86_64 : Files needed for building PHP extensions php70w-embedded.x86_64 : PHP library for embedding in applications php70w-enchant.x86_64 : Enchant spelling extension for PHP applications php70w-fpm.x86_64 : PHP FastCGI Process Manager php70w-gd.

Читайте также:  Установка и настройка zabbix 3.4 на debian 9

x86_64 : A module for PHP applications for using the gd graphics library php70w-imap.x86_64 : A module for PHP applications that use IMAP php70w-interbase.x86_64 : A module for PHP applications that use Interbase/Firebird databases php70w-intl.x86_64 : Internationalization extension for PHP applications php70w-ldap.x86_64 : A module for PHP applications that use LDAP php70w-mbstring.

x86_64 : A module for PHP applications which need multi-byte string handling php70w-mcrypt.x86_64 : Standard PHP module provides mcrypt library support php70w-mysql.x86_64 : A module for PHP applications that use MySQL databases php70w-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases php70w-odbc.

x86_64 : A module for PHP applications that use ODBC databases php70w-opcache.x86_64 : An opcode cache Zend extension php70w-pdo.x86_64 : A database access abstraction module for PHP applications php70w-pdo_dblib.x86_64 : MSSQL database module for PHP php70w-pear.noarch : PHP Extension and Application Repository framework php70w-pecl-apcu.

x86_64 : APCu — APC User Cache php70w-pecl-apcu-devel.x86_64 : APCu developer files (header) php70w-pecl-igbinary.x86_64 : Replacement for the standard PHP serializer php70w-pecl-igbinary-devel.x86_64 : Igbinary developer files (header) php70w-pecl-imagick.x86_64 : Provides a wrapper to the ImageMagick library php70w-pecl-imagick-devel.

x86_64 : Imagick developer files (header) php70w-pecl-mongodb.x86_64 : PECL package MongoDB driver php70w-pecl-redis.x86_64 : Extension for communicating with the Redis key-value store php70w-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts php70w-pgsql.x86_64 : A PostgreSQL database module for PHP php70w-phpdbg.x86_64 : Interactive PHP debugger php70w-process.

x86_64 : Modules for PHP script using system process interfaces php70w-pspell.x86_64 : A module for PHP applications for using pspell interfaces php70w-recode.x86_64 : A module for PHP applications for using the recode library php70w-snmp.x86_64 : A module for PHP applications that query SNMP-managed devices php70w-soap.

x86_64 : A module for PHP applications that use the SOAP protocol php70w-tidy.x86_64 : Standard PHP module provides tidy library support php70w-xml.x86_64 : A module for PHP applications which use XML php70w-xmlrpc.x86_64 : A module for PHP applications which use the XML-RPC protocol php71w-bcmath.x86_64 : A module for PHP applications for using the bcmath library php71w-cli.

x86_64 : Command-line interface for PHP php71w-common.x86_64 : Common files for PHP php71w-dba.x86_64 : A database abstraction layer module for PHP applications php71w-devel.x86_64 : Files needed for building PHP extensions php71w-embedded.x86_64 : PHP library for embedding in applications php71w-enchant.x86_64 : Enchant spelling extension for PHP applications php71w-fpm.

x86_64 : PHP FastCGI Process Manager php71w-gd.x86_64 : A module for PHP applications for using the gd graphics library php71w-imap.x86_64 : A module for PHP applications that use IMAP php71w-interbase.x86_64 : A module for PHP applications that use Interbase/Firebird databases php71w-intl.x86_64 : Internationalization extension for PHP applications php71w-ldap.

x86_64 : A module for PHP applications that use LDAP php71w-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling php71w-mcrypt.x86_64 : Standard PHP module provides mcrypt library support php71w-mysql.x86_64 : A module for PHP applications that use MySQL databases php71w-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases php71w-odbc.

x86_64 : A module for PHP applications that use ODBC databases php71w-opcache.x86_64 : An opcode cache Zend extension php71w-pdo.x86_64 : A database access abstraction module for PHP applications php71w-pdo_dblib.x86_64 : MSSQL database module for PHP php71w-pear.noarch : PHP Extension and Application Repository framework php71w-pecl-apcu.

x86_64 : APCu — APC User Cache php71w-pecl-apcu-devel.x86_64 : APCu developer files (header) php71w-pecl-igbinary.x86_64 : Replacement for the standard PHP serializer php71w-pecl-igbinary-devel.x86_64 : Igbinary developer files (header) php71w-pecl-mongodb.x86_64 : PECL package MongoDB driver php71w-pecl-redis.

x86_64 : Extension for communicating with the Redis key-value store php71w-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts php71w-pgsql.x86_64 : A PostgreSQL database module for PHP php71w-phpdbg.x86_64 : Interactive PHP debugger php71w-process.x86_64 : Modules for PHP script using system process interfaces php71w-pspell.

x86_64 : A module for PHP applications for using pspell interfaces php71w-recode.x86_64 : A module for PHP applications for using the recode library php71w-snmp.x86_64 : A module for PHP applications that query SNMP-managed devices php71w-soap.x86_64 : A module for PHP applications that use the SOAP protocol php71w-tidy.x86_64 : Standard PHP module provides tidy library support php71w-xml.x86_64 : A module for PHP applications which use XML php71w-xmlrpc.x86_64 : A module for PHP applications which use the XML-RPC protocol Как видим доступно php-fpm 7.1

Установим php

yum install php71w-fpm.x86_64а также если необходимо дополнительные модули например
yum  install php71w-opcache php71w-devel php71w-gd  php71w-pdo php71w-pear php71w-xml php71w-mcrypt php71w-mbstring php71w-interbase php71w-common

добавим в автозагрузку php

systemctl enable php-fpm.serviceЗапустим
systemctl start php-fpm.service

Установка MySQL(MariaDB)

Переходим на сайт — https://downloads.mariadb.org/mariadb/repositories/#mirror=tuna&distro=CentOS&distro_release=centos7-amd64—centos7&version=10.

1Выбираем версию операционной системы и версию MySQL которую мы ходим установить CentOS 7, на сегодняшний день последняя стабильная версия MariaDB 10.1.

На сайте будут указаны команды для установки последней версии

Создаем файл  MariaDB.repo в папке — /etc/yum.repos.d/ с содержимым

# MariaDB 10.1 CentOS repository list — created 2017-02-11 15:12 UTC # http://downloads.mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1Установим
yum install MariaDB-server MariaDB-clientЗапустим —
systemctl start mariadb.serviceДобавим в автозагрузку -systemctl enable mariadb.service

Установка NginX

Откроем 80 порт
iptables -A IN_public_allow -p tcp -m tcp —dport 80 -m conntrack —ctstate NEW -j ACCEPT iptables-save > /etc/sysconfig/iptablesустановим NginX
yum install nginxДобавим в автозагрузку
systemctl enable nginx.serviceВключим
systemctl start nginx.serviceЕсли все прошло правильно то при наборе в браузере ip сервера мы увидим приветствие NginX

Настройка сервера

Запускать сервисы из под пользователя root не хорошо и небезопасно. Поэтому мы создадим пользователя с домашней папкой и настроим систему таким образом чтобы не пускать все сервисы дальше домашней папки пользователя.

Создаем пользователя например vasya и запрещаем ему доступ по SSHuseradd vasya -b /home/ -m -U -s /bin/falseЗадаем новый пароль для пользователя
passwd vasyaНастройка vsftpdУстановим и настроим vsftpdyum install vsftpdОткроем файл /etc/vsftpd/vsftpd.

conf и отредактируем егоРазрешаем вход и запись для локальных пользователейlocal_enable=YES write_enable=YES ascii_upload_enable=YES ascii_download_enable=YESВыставляем права по умолчанию для файлов заливаемых пользователем по формуле 777 отнять права которые надо получить допустим 755.

777-755=22 выставляем маску 22 и все файлы у нас будут заливаться с правами 755local_umask=022Запретим доступ анонимным пользователям
anonymous_enable=NOДобавим работу в пассивном режиме
pasv_min_port=50000 pasv_max_port=50020Добавим поддрежку ipv6
listen=NO listen_ipv6=YESЗапретим пользователю FTP  выходить за пределы домашней директории
chroot_local_user=YES chroot_list_enable=NOРазрешим пользователю запись в корень своей домашней директории
allow_writeable_chroot=YESОткроем файл /etc/pam.d/vsftpd Так как у нашего пользователя нет SSH доступа то чтобы работал FTP доступ закомментируем строчку
#auth   required        pam_shells.soДобавим в автозагрузку
systemctl enable vsftpd.serviceОткроем 21 порт и динамические порты для FTP
iptables -A IN_public_allow -p tcp -m tcp —dport 21 -m conntrack —ctstate NEW -j ACCEPTiptables -I INPUT -p tcp -m state —state NEW -m tcp -m multiport —dports 50000:50020 -j ACCEPT iptables-save > /etc/sysconfig/iptablesЗапустим FTPsystemctl start vsftpd.serviceСоединяемся с сервером при помощи любого FTP клиента например FileZilla — https://filezilla-project.org/Создаем в корневой папке пользователя следующие папкиpublic_html — здесь будут находится нашы сайтыsession — в эту папку php будет писать сессииtmp — папка для временных файлов phpв папке public_html создадим папку default временно для проверки работоспособности nginx и phpа также папку site.com(название вашего сайта)

Настройка Nginx

Откроем файл /etc/nginx/nginx.conf и приведем его к такому видуuser  vasya; worker_processes  1; error_log  /var/log/nginx/error.log warn; pid        /var/run/nginx.pid; events {     worker_connections  1024; } http {     include       /etc/nginx/mime.

types;     default_type  application/octet-stream; server_names_hash_bucket_size  128;     log_format  main  '$remote_addr — $remote_user [$time_local] «$request» '                       '$status $body_bytes_sent «$http_referer» '                       '»$http_user_agent» «$http_x_forwarded_for»';     access_log  /var/log/nginx/access.

log  main; client_max_body_size 50m;     sendfile        on;     #tcp_nopush     on;     keepalive_timeout  65;     #gzip  on; server {         listen 80;        server_name «»; #default         location / {             root  /home/vasya/public_html/default;             index  index.php index.html index.htm;         }         location ~ .php$ {             fastcgi_pass   127.0.0.

1:9000;             root   /home/vasya/public_html/default;             fastcgi_index  index.php;             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;             include        fastcgi_params;         }         } server {         listen 80;         server_name site.com www.site.com;         location / {             root   /home/vasya/public_html/site.

com;             index  index.php index.html index.htm;         }         location ~ .php$ {             fastcgi_pass   127.0.0.1:9000;             root   /home/vasya/public_html/site.com;             fastcgi_index  index.

php;             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;             include        fastcgi_params;         }         } }Этот конфиг настроен таким образом что при обращении к серверу по ip  адресу будут отдаваться файлы из папки

/home/vasya/public_html/defaultА при обращении по адресу site.com или www.site.com будут отдаваться файлы из папки

/home/vasya/public_html/site.comПерезапустми Nginx
systemctl restart nginx.service

Настройка php-fpm

Откроем файл /etc/php-fpm.d/www.confИзменим имя пользователя и группу с www-data на vasyauser = vasya group = vasyaОткроем файл /etc/php.

iniустановим следующие значенияЗапретить php выход за пределы домашней папкиopen_basedir =»/home/vasya/»Разрешить короткие теги(многие разработчики пишут скрипты короткими тегами)
short_open_tag = OnУстановим папку для временных файлов
upload_tmp_dir = «/home/vasya/tmp/»Установим папку для хранения сессий php
session.

save_path = «/home/vasya/session/»Перезапустим php-fpm
systemctl restart php-fpm.serviceСкопируем в папку/home/vasya/public_html/default/файл index.php со следующим содержимымНаберем http://ваш-ip/Если появилось phpinfo то все настроено правильно

 Можно заливать файлы, заводить БД и пользоваться сайтом

Источник: http://marik.kz/blog/linux/121-centos-7-ustanovka-nginx-php-fpm-7-mysqlmariadb-ftp.html

Установка Nginx, MySQL, PHP (LEMP) на CentOS 7

Установка веб-сервера LEMP (NGINX + MySQL + PHP-FPM) на CentOS 7.

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

Добавляем CentOS 7 Nginx репозиторий

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

Установка Nginx

После установки Nginx — запускаем его

systemctl start nginx.service

Проверить, что веб-сервер запущен можно по адресу http://example.com/
Мы увидим дефолтную страницу Nginx.

После проверки успешного запуска, добавим сервис в автозагрузку при старте системы.

systemctl enable nginx.service

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

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

Читайте также:  Установка synology os на обычный компьютер hp proliant n54l microserver

Установка сервера и клиента MariaDB

yum install mariadb-server mariadb

Запуск сервера баз данных

После того как сервер запущен, приступаем к базовой настройке. Запускаем скрипт настройки простой командой.

mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!In order to log into MariaDB to secure it, we'll need the currentpassword for the root user. If you've just installed MariaDB, andyou haven't set the root password yet, the password will be blank,so you should just press enter here.Enter current password for root (enter for none): OK, successfully used password, moving on…Setting the root password ensures that nobody can log into the MariaDBroot user without the proper authorisation.Set root password? [Y/n] yPassword updated successfully!Reloading privilege tables..By default, a MariaDB installation has an anonymous user, allowing anyoneto log into MariaDB without having to have a user account created forthem. This is intended only for testing, and to make the installationgo a bit smoother. You should remove them before moving into aRemove anonymous users? [Y/n] yNormally, root should only be allowed to connect from 'localhost'. Thisensures that someone cannot guess at the root password from the network.Disallow root login remotely? [Y/n] yBy default, MariaDB comes with a database named 'test' that anyone canaccess. This is also intended only for testing, and should be removedbefore moving into a production environment.Remove test database and access to it? [Y/n] y — Dropping test database… — Removing privileges on test database…Reloading the privilege tables will ensure that all changes made so farwill take effect immediately.Reload privilege tables now? [Y/n] yAll done! If you've completed all of the above steps, your MariaDBinstallation should now be secure.Thanks for using MariaDB!

После настройки добавим сервис в автозагрузку.

systemctl enable mariadb.service

Шаг 3. Установка и настройка PHP (PHP-FPM)

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

Установка PHP

yum install php php-mysql php-fpm

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

Незначительная конфигурация для повышения безопасности

Открываем конфигурационный файл PHP

Нас интересует параметр cgi.fix_pathinfo. По умолчанию он закомментирован и установлен в значение 1.
Это значение небезопасно, поскольку любой пользователь будет иметь возможность заливать файлы на сервер (например аватары).

Создав особенное изображение, которое будет одновременно проходить валидацию размеров GD и исполняться php интерпретатором, будет иметь права на исполнение произвольного кода на сервере с правами php процесса.

Раскомментируем строчку и изменим значение на 0.

Также это можно сделать через настройки Nginx

try_files $fastcgi_script_name =404; fastcgi_param script_FILENAME /scripts$fastcgi_script_name;

Теперь доступ для несуществующих файлов с разрешением *.php закрыт.
Cама реализация cgi.fix_pathinfo достаточно тормознутая — на каждый запрос проверяется каждый компонент пути — не скрипт ли это.
Поэтому стоит выключать также и из соображений производительности.

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

; Defines the default timezone used by the date functions; http://php.net/date.timezonedate.timezone = Europe/Moscow

Далее, откроем конфигурационный файл PHP-FPM

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

Находим строчку начинающуюся с listen и заменяем её полностью новым значением.

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

Запускаем PHP-FPM

Добавляем PHP-FPM в автозагрузку

systemctl enable php-fpm.service

Шаг 4. Конфигурация NGINX

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

NGINX как и Apache поддерживает работу виртуальных хостов. Создавать файлы с хостами можно в директории /etc/nginx/conf.d/, но мы будем использовать другую схему.

Создаем директории под виртальные хосты

mkdir /etc/nginx/sites-availablemkdir /etc/nginx/sites-enabled

В файл конфигурации /etc/nginx/nginx.conf добавляем в конец строчку:

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

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

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

Создаем директории под содержимое сайта, а также под логи для каждого из хостов.

mkdir -p /srv/www/example.com/public_htmlmkdir /srv/www/example.com/logschown -R apache:apache /srv/www/example.com

Создаем файл example.com в директории /etc/nginx/sites-available.

access_log /srv/www/example.com/logs/access.log; error_log /srv/www/example.com/logs/error.log; root /srv/www/example.com/public_html; try_files $uri $uri/ /index.html; location ~ .(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_param SCRIPT_FILENAME /srv/www/example.com/public_html$fastcgi_script_name;

Подключаем наш виртуальный хост

cd /etc/nginx/sites-enabled/ln -s /etc/nginx/sites-available/example.com

Проверяем работу PHP

Создаем файл в директории сайта /srv/www/example.com/public_html/info.php

Открываем файл в браузере

http://example.com/info.php

Если все в порядке, то можем наблюдать приблизительно следующее.

Не забываем удалить файл info.php.
На этом установка LEMP в CentOS 7 завершена.

Источник: https://bogachev.biz/2015/04/17/ustanovka-nginx-mysql-php-lemp-na-centos-7/

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

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

Данная статья «Установка Nginx, PHP-FPM, MariaDB на CentOS 7 / RHEL 7» покажет вам, как установить Nginx на CentOS 7 / RHEL 7 с поддержкой PHP (через PHP-FPM) и c поддержкой MariaDB.

PHP-FPM — это альтернативная реализация PHP FastCGI, которая имеет некоторые дополнительные возможности, полезные для сайтов с любым размером.
Первое, что нужно сделать, так это войти в систему как суперпользователь (root):

$ su —

Установите Wget и Vim с помощью Yum, если они не установлены в системе CentOS 7:

# if ! type -path «wget» > /dev/null 2>&1; then yum install wget -y; fi # if ! type -path «vim» > /dev/null 2>&1; then yum install vim -y; fi

Первое, что нужно сделать перед установкой LEMP, так это обновить CentOS 7, выполнив следующую команду в вашем терминале:

# yum update

1. Установка MariaDB.

Я использую самую последнюю версию MariaDB — это версия 10.х и ее установку можно прочитать тут:

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

Так же можно установить и MariaDB 5.x для этого нужно посетить официальный сайт и воспользоваться мануалом. Я постараюсь попозже рассказать как это можно сделать.

Вы можете почитать мой готовый конфиг тут:
my.cnf

Так же можете скачать его и использовать:

# cd /etc/ && wget http://linux-notes.org/wp-content/uploads/files/LEMP/CentOS_7/mysql/my.cnf

Переходим к следующему этапу.

2. Установка Nginx.

Установите Nginx rpm репозиториев чтобы загрузить и установить Nginx с официального сайта. Для этого выполняем:

# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

Примечание:  Так же можно установить репозиторий EPEL и REMI и после чего выполнить установку nginx

Установите Nginx с помощью:

# yum -y install nginx

Запустите Nginx после установки:

# systemctl restart nginx.service

Проброс портов в Iptables и SELinux:

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

# firewall-cmd —permanent —zone=public —add-service=http # firewall-cmd —reload

Далее, откроем веб-браузер:
http://your_IP_or_server

Вы должны увидеть следующую страницу; Это подтвердит вам, что ngnix успешно установлен на сервере.

Корневая папка, по умолчанию, в  Nginx на CentOS 7 находится /usr/share/nginx/html. Конфигурационные файлы в /etc/nginx.

Worker Processes и Worker Connections

Первые две переменные, которые мы должны настроиться являются рабочие процессы (worker processes) и рабочие соединения (worker connections). Директива worker_processes является надежным позвоночником для жизни Nginx. Это обычно 1 рабочий процесс для каждого ядра. Проверить можно следующим образом:

# grep processor /proc/cpuinfo | wc -l 4

У меня 4-хядерный процессор.

Можно вывести полную информацию о процессорах:

# cat /proc/cpuinfo

Или

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

Команда worker_connections сообщает нашим рабочие процессы, сколько человек одновременно могут обслуживаться в Nginx. Значение по умолчанию 768;Однако, учитывая, что каждый браузер обычно открывает, по крайней мере 2 соединения / сервер. Мы можем проверить наши основные ограничения с помощью команды ULIMIT:

# ulimit -n 1024

У меня этот параметр равен 1024. Давайте обновим наш конфигурации:

# vim /etc/nginx/nginx.conf

и вставляем:

[…] worker_processes 1; worker_connections 1024; […]

ЗАПОМНИТЕ, количество клиентов, (которые могут быть обслужены) мы можем умножить на количество ядер. И по этому, т.к у меня ядер 4, я умнажаю 1024×4=4096. По этому, я себе исправлю данный параметр в конфиге.

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

client_body_buffer_size: Это обрабатывает размер буфера клиента. Действия после, как правило, через форму.

client_header_buffer_size: Как и в предыдущем директива, только вместо этого он обрабатывает размер заголовка клиент. Для всех намерений и целей, 1K, как правило, приличного размера для этой директивы.

client_max_body_size: Максимально допустимый размер запроса клиента. Если максимальный размер превышен, то Nginx будет выдавать ошибку 413 или Request Entity Too Large.

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

И так вставляем:

[…] client_body_buffer_size 10K; client_header_buffer_size 1k; client_max_body_size 8m; large_client_header_buffers 2 1k; […]

Тайм-ауты
Тайм-ауты могут также резко повысить производительность.

Директивы client_body_timeout и client_header_timeout несут ответственность за время который сервер будет ждать тела клиента или заголовок клиента, чтобы бы отправить после запроса. Если ни тело или заголовок отправляется, сервер выдаст ошибку 408 или запрос тайм-аут.

Keepalive_timeout назначает тайм-аут для Keep-Alive соединений с клиентом. Проще говоря, Nginx будет закрывать соединение с клиентом после этого периода времени.

И, наконец, send_timeout устанавливается не на всю передачу ответа, а только между двумя операциями чтения; если после этого времени клиент ничего не примет, то Nginx выключает соединение.

[…] client_body_timeout 12; client_header_timeout 12; keepalive_timeout 15; send_timeout 10; […]

 Gzip сжатия
Gzip может помочь уменьшить количество передач по сети Nginx. Однако, будьте осторожны увеличения gzip_comp_level слишком высоко, как сервер начнет тратить CPU.

[…] gzip on; gzip_comp_level 2; gzip_min_length 1000; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain application/x-javascript text/xml text/css application/xml; […]

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

[…] location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {                                                expires 365d;                                              } […]

Logging 

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

[…] access_log off; […]

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

[…] server_tokens off; […]

Защита от DDos

ПОПОЗЖЕ БУДЕТ

Источник: http://linux-notes.org/ustanovka-nginx-php-fpm-mariadb-na-centos-7-rhel-7/

Ссылка на основную публикацию