Установка Nginx, PHP-FPM, MariaDB на CentOS 7 / RHEL 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Корневая папка, по умолчанию, в  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

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

Автоматический запуск Nginx при запуске системы:

# systemctl enable nginx.service

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

Чтобы скачать его:

# cd /etc/nginx/ && wget http://linux-notes.org/wp-content/uploads/files/LEMP/CentOS_7/nginx/nginx.conf_working

И перезапускаем после этого сам сервер nginx:

# service nginx restart

Если нет никаких ошибок — это хорошо. Если есть, то их нужно исправить ^ ^

3. Установка PHP5-FPM.

Далее следует установить PHP через PHP-FPM (PHP-FPM (FastCGI Process Manager), это альтернативная реализация PHP FastCGI. Она имеет некоторые дополнительные возможности, полезные для сайтов любого размера. Установить его вы можете выполнив следующую команду:

# yum install php-fpm php-mysql php-cli php-mcrypt memcached php-apc

Кроме того, установите любой другой модуль PHP, который требует ваше приложение. Список приведен ниже, или вы можете использовать «yum search php-» командной строке, чтобы получить список доступных PHP модулей на ваших CentOS 7 системе:

  • php-bcmath — модуль для PHP приложений с использованием библиотеки BCMath.
  • php-cli — интерфейс командной строки для PHP (CLI).
  • php-common — Common (общие) файлы для PHP.
  • php-dba — модуль абстрактного слоя с использованием БД для PHP приложений.
  • php-devel — Файлы, необходимые для сборки расширений PHP.
  • php-embedded — библиотека PHP для встраивания в приложения.
  • php-enchant — Enchant расширение для PHP приложений.
  • php-fpm — PHP FastCGI Process Manager
  • php-gd — модуль для PHP приложений для использования графической библиотеки GD.
  • php-imap -модуль для PHP приложений которые используют протокол IMAP.
  • php-intl -Интернационализация расширения для PHP приложений.
  • php-ldap -модуль для PHP приложений которые используют LDAP.
  • php-mbstring — A module for PHP applications which need multi-byte string handling
  • php-mcrypt — Стандартный модуль PHP с поддержкой Mcrypt.
  • php-mysql -модуль для PHP приложений которые используют MySQL.
  • php-mysqlnd -модуль для PHP приложений которые используют MySQL.
  • php-odbc -модуль для PHP приложений которые используют ODBC.
  • php-pdo — модуль абстракции доступа к базе данных для PHP приложений.
  • php-pear.noarch — PHP Extension and Application Repository framework
  • php-pecl-memcache — расширение для работы с Memcached.
  • php-pgsql — модуль для PHP приложений которые используют PostgreSQL.
  • php-process — Модуль для PHP, который использует интерфейсы системного процессора.
  • php-pspell — модуль для PHP приложений для использования интерфейсов pspell.
  • php-recode -модуль для PHP приложений которые используют библиотеку recode.
  • php-snmp —  модуль для PHP приложений, которые запрашивают SNMP-управляемые устройства.
  • php-soap -модуль для PHP приложений которые используют протокол SOAP.
  • php-xml -модуль для PHP приложений которые используют XML.
  • php-xmlrpc -модуль для PHP приложений которые используют протокол XML-RPC.

Сейчан нужно отредактировать файл /etc/php.ini:

# vim /etc/php.ini
[...]
cgi.fix_pathinfo=0
[...]

Далее, выполним настройку PHP основной конфигурации /etc/php.ini:

$ sudo vim /etc/php.ini

[...]
cgi.fix_pathinfo=0
date.timezone = Europe/Kiev
upload_max_filesize = 32M
memory_limit = 128M
expose_php = Off
[...]

Мой готовый конфиг php.ini лежит тут:
php.ini

Отредактируем файл /etc/php-fpm.d/www.conf для этого выполним:

# vim /etc/php-fpm.d/www.conf
Убедитесь, что следующие значения php разкомментированы.

[...]
user = nginx
group = nginx
pm.min_spare_servers = 5
[...]
pm.max_spare_servers = 35
[...]

Мой конфиг для php-fpm:
php-fpm.conf

Чтобы проверить, правильно ли сконфигурирован конфиг php-fpm, используйте:

# php-fpm -t

PS: Скачайте его от сюда:

# cd /etc/php-fpm/ && wget http://linux-notes.org/wp-content/uploads/files/LEMP/CentOS_7/php-fpm/php-fpm.conf_working

Включение PHP-FPM поддержки на виртуальных хост.

Далее, перейдите в /etc/nginx и скопируйте исходный файл конфигурации Nginx (чтобы вернуть в друг чего):

# cp /etc/nginx/nginx.conf{,.orig}

Сейчас нужно поправить немного конфигурацию nginx для работы с php-fpm:

# vim /etc/nginx/nginx.conf

# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes 4; #1;

error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;

pid /run/nginx.pid;

events {
        worker_connections 1024;
        }

http {
      include /etc/nginx/mime.types;
      default_type application/octet-stream;
      log_format main '$remote_addr - $remote_user [$time_local] "$request" '
      '$status $body_bytes_sent "$http_referer" '
      '"$http_user_agent" "$http_x_forwarded_for"';

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

      sendfile on;
      #tcp_nopush on;

      #keepalive_timeout 0;
      keepalive_timeout 65;

      #gzip on;

      index index.html index.htm;

      # Load modular configuration files from the /etc/nginx/conf.d directory.
      # See http://nginx.org/en/docs/ngx_core_module.html#include
      # for more information.
      include /etc/nginx/conf.d/*.conf;

 server {
         listen 80 default_server;
         server_name localhost;
         root /home/www;
         #/usr/share/nginx/html;

         #charset koi8-r;

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

         # Load configuration files for the default server block.
         include /etc/nginx/default.d/*.conf;
 
location ~ \.php$ { # 
                   root /home/www;
                   fastcgi_pass 127.0.0.1:9000;
                   fastcgi_index index.php;
                   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 
                   include fastcgi_params;
                  }
 location / {

             }

 # redirect server error pages to the static page /40x.html
 #
 error_page 404 /404.html;
 location = /40x.html {

                       }

 # redirect server error pages to the static page /50x.html
 #
 error_page 500 502 503 504 /50x.html;
 location = /50x.html {

                       }
   }
}

Создам папки для домашней директории:

$ mkdir /home/www

Это можно не выполнять если не меняете расположение в данном конфиге.

Перегружаем энжинкс:

# systemctl reload nginx.service

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

linux-notes.org:

Server Name : linux-notes.org
Document Root : /home/www/linux-notes/public_html

# vim /etc/nginx/conf.d/linux-notes.org.conf

 windows-notes.org:

Server Name : windows-notes.org
Document Root : /home/www/windows-notes/public_html

# vim /etc/nginx/conf.d/windows-notes.org.conf

Создайте файл конфигурации с именем windows-notes.org.conf и  отредактируйте данный конфиг /etc/nginx/conf.d/windows-notes.org.conf:

# vim /etc/nginx/conf.d/windows-notes.org.conf

server {
 listen *:80;
 #listen 127.0.0.1:8080 default; 
 server_name linux-notes.org www.linux-notes.org;
 #charset koi8-r;
 access_log /var/log/nginx/access-linux-notes.org.log main;
 error_log /var/log/nginx/error-linux-notes.org.log;
 include conf.d/gzip.conf;
 root /home/www/linux-notes/public_html;
 index index.php index.html index.htm;

#errors
error_page 500 502 503 504 /50x.html;
 location = /50x.html {
 root /usr/share/nginx/html/;
 }

 location / {
 try_files $uri $uri/ /index.php?$args;
 } 
location ~ (xmlrpc.php|wp-config.php|wp-settings.php|readme.html|license.txt)$ {
 return 404;
 access_log off;
 }
# PHP-FPM
# PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000
location ~ \.php$ {
 # The following line prevents malicious php code to be executed through some uploaded file (without php extension, like image)
 # This fix shoudn't work though, if nginx and php are not on the same server, other options exist (like unauthorizing php execution within upload folder)
 # More on this serious security concern in the "Pass Non-PHP Requests to PHP" section, there http://wiki.nginx.org/Pitfalls
 try_files $uri =404;

 # PHP 
 # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_cache fastcgicache;
 fastcgi_cache_valid any 1m;
 fastcgi_cache_use_stale error timeout invalid_header http_500;

 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 fastcgi_param QUERY_STRING $query_string;
 fastcgi_param REQUEST_METHOD $request_method;
 fastcgi_param CONTENT_TYPE $content_type;
 fastcgi_param CONTENT_LENGTH $content_length;
 fastcgi_intercept_errors on;
 fastcgi_ignore_client_abort off;
 fastcgi_connect_timeout 60;
 fastcgi_send_timeout 180;
 fastcgi_read_timeout 180;
 fastcgi_buffers 4 256k;
 fastcgi_buffer_size 128k;
 fastcgi_busy_buffers_size 256k;
 fastcgi_temp_file_write_size 256k;
 fastcgi_keep_conn on;
 #Помещать страницу в кеш, после 3-х использований. Меньшее число вызвало у меня труднообъяснимые глюки на формах регистрации
 fastcgi_cache_min_uses 3;
 #Кешировать перечисленные ответы
 fastcgi_cache_valid 200 301 302 304 5m;
 #Формат ключа кеша - по этому ключу nginx находит правильную страничку
 fastcgi_cache_key "$request_method|$host|$request_uri";
 }
 #----------------------------------------------------------
 # Define default caching of 24h
 expires 86400s;
 add_header Pragma public;
 add_header Cache-Control "max-age=86400, public, must-revalidate, proxy-revalidate";

#подключения обработки Perl 
#Все скрипты заканчивающиеся на pl и cgi
# location ~ \.(pl|cgi)$
# {
# #Не сжимаем скрипты
# gzip off;
# try_files $uri =404;
# #Передаем скрипты на обработку fcgiwrap
# fastcgi_pass unix:/var/run/fcgiwrap.socket;
# # Используем стандартные параметры
# include /etc/nginx/fastcgi_params;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_ignore_client_abort off;
# }
##Замена апачевской ScriptAlias
# location /cgi-bin/ {
# gzip off;
# try_files $uri =404;
# root /var/www/;
# #fastcgi_pass 127.0.0.1:9000;
# fastcgi_pass unix:/var/run/fcgiwrap.socket;
# include /etc/nginx/fastcgi_params;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_ignore_client_abort off;
# }

#-------
 # Rewrite for versioned CSS+JS via filemtime
 location ~* ^.+\.(css|js)$ {
 rewrite ^(.+)\.(\d+)\.(css|js)$ $1.$3 last;
 expires 31536000s;
 access_log off;
 log_not_found off;
 add_header Pragma public;
 add_header Cache-Control "max-age=31536000, public";
 }

 # Aggressive caching for static files
 location ~* \.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|ogv|otf|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|t?gz|tif|tiff|ttf|wav|webm|wma|woff|wri|xla|xls|xlsx|xlt|xlw|zip)$ {
 expires 31536000s;
 access_log off;
 log_not_found off;
 add_header Pragma public;
 add_header Cache-Control "max-age=31536000, public";
 }
#----------------------------------------------------------
#/wordpress-w3-total-cache.conf
gzip on;
#gzip_types text/css application/x-javascript text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
gzip_types text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
#include conf.d/gzip.conf;
 location ~ \.(css|js)$ {
 expires max;
 break;
 }
 location ~ \.(rtf|rtx|svg|svgz|txt|xsd|xsl|xml)$ {
 expires 3600;
 break;
 }
 location ~ \.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|swf|tar|tif|tiff|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$ {
 expires max;
 break;
 }
add_header "X-UA-Compatible" "IE=Edge,chrome=1";
#---------------------------------------------------------- }

if ($request_method !~ ^(GET|POST|HEAD)$ ) {
 return 444;
 }

 location = /favicon.ico {
 log_not_found off;
 access_log off;
 }
 location = /robots.txt {
 allow all;
 log_not_found off;
 access_log off;
 }
 # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
 # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
 location ~ /\.ht {
 deny all;
 access_log off;
 log_not_found off;
 }
 # Deny access to any files with a .php extension in the uploads directory
 # Works in sub-directory installs and also in multisite network
 # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
 location ~* /(?:uploads|files)/.*\.php$ {
 deny all;
 #access_log off;
 #log_not_found off;
 }
 # deny access to WP config file and license.txt and readme.html files
 location ~ /(\.|wp-config.php|readme.html|license.txt) {
 deny all;
 }
 # deny access to .conf files
 location ~* \.(conf)$ {
 deny all;
 } 

# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

# Uncomment one of the lines below for the appropriate caching plugin (if used).
include global/w3-total-cache.conf;

}
server {
 listen 443;
 server_name https://linux-notes.org https://www.linux-notes.org;
 ssl on;
 ssl_certificate /etc/nginx/ssl/linux-notes.org.crt;
 ssl_certificate_key /etc/nginx/ssl/linux-notes.org.key;

 ssl_session_timeout 5m;

 ssl_protocols SSLv2 SSLv3 TLSv1;
 ssl_ciphers HIGH:!aNULL:!MD5;
 ssl_prefer_server_ciphers on;

#location / {
# #root html;
# root /home/www/linux-notes/public_html;
# index index.php index.html index.htm;
# }
#
#location ~ \.php$ {
# #root /usr/share/nginx/html;
# root /home/www/linux-notes/public_html;
# fastcgi_split_path_info ^(.+\.php)(.*)$;
# #fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
# include fastcgi_params;
# }
#}
 access_log /var/log/nginx/access-linux-notes-SSL.org.log main;
 error_log /var/log/nginx/error-linux-notes-SSL.org.log;
 include conf.d/gzip.conf;
 root /home/www/linux-notes/public_html;
 index index.php index.html index.htm;
 
 location / {
 try_files $uri $uri/ /index.php?$args;
 }
 
 # PHP-FPM
 # PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000
 location ~ \.php$ {
 # The following line prevents malicious php code to be executed through some uploaded file (without php extension, like image)
 # This fix shoudn't work though, if nginx and php are not on the same server, other options exist (like unauthorizing php execution within up load folder)
 # More on this serious security concern in the "Pass Non-PHP Requests to PHP" section, there http://wiki.nginx.org/Pitfalls
 try_files $uri =404; 
 # PHP 
 # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 fastcgi_param QUERY_STRING $query_string;
 fastcgi_param REQUEST_METHOD $request_method;
 fastcgi_param CONTENT_TYPE $content_type;
 fastcgi_param CONTENT_LENGTH $content_length;
 fastcgi_intercept_errors on;
 fastcgi_ignore_client_abort off;
 fastcgi_connect_timeout 60;
 fastcgi_send_timeout 180;
 fastcgi_read_timeout 180;
 fastcgi_buffers 4 256k;
 fastcgi_buffer_size 128k;
 fastcgi_busy_buffers_size 256k;
 fastcgi_temp_file_write_size 256k; 
 }
 #----------------------------------------------------------
 # Define default caching of 24h
 expires 86400s;
 add_header Pragma public;
 add_header Cache-Control "max-age=86400, public, must-revalidate, proxy-revalidate"; 
 # Rewrite for versioned CSS+JS via filemtime
 location ~* ^.+\.(css|js)$ {
 rewrite ^(.+)\.(\d+)\.(css|js)$ $1.$3 last;
 expires 31536000s;
 access_log off;
 log_not_found off;
 add_header Pragma public;
 add_header Cache-Control "max-age=31536000, public";
 }
 
 # Aggressive caching for static files
 location ~* \.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|ogv|otf|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|t?gz|tif|tiff|ttf|wav|webm|wma|woff|wri|xla|xls|xlsx|xlt|xlw|zip)$ {
 expires 31536000s;
 access_log off;
 log_not_found off;
 add_header Pragma public;
 add_header Cache-Control "max-age=31536000, public";
 }
 #----------------------------------------------------------
 #/wordpress-w3-total-cache.conf
 gzip on;
 gzip_types text/css application/x-javascript text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
 location ~ \.(css|js)$ {
 expires max;
 break;
 }
 location ~ \.(rtf|rtx|svg|svgz|txt|xsd|xsl|xml)$ {
 expires 3600;
 break;
 }
 location ~ \.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|swf|tar|tif|tiff|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$ {
 expires max;
 break;
 }
 add_header "X-UA-Compatible" "IE=Edge,chrome=1";
 #----------------------------------------------------------
 location ~ /(\.|wp-config.php|readme.html|license.txt) {
 return 404;
 }
 location = /favicon.ico {
 log_not_found off;
 access_log off;
 }
 location = /robots.txt {
 allow all;
 log_not_found off;
 access_log off;
 }
 location ~ /\.ht {
 deny all;
 access_log off;
 log_not_found off;
 }
 
}


Но этот конфиг для стандартного сайт, у меня он не работал для моей CMS, такой как -WP. По этому, я приведу пример конфига для ВП.

# vim /etc/nginx/conf.d/WP-windows-notes.org.conf

Смотрите конфиг выше.

Создадим host для вашего домена (windows-notes.org)  в файл /etc/hosts для этого:

# vi /etc/hosts

[...]
127.0.0.1  localhost windows-notes.org
[...]

Добавил это т.к использую виртуальную машину.

Тестирование PHP-FPM поддержки виртуальных хостов.

Создайте в корневой каталог:

$ mkdir -p /home/www/windows-notes/public_html

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

$ echo "<?php phpinfo (); ?>" > /home/www/windows-notes/public_html

И так как я изменил домашнюю директорию nginx, то и в нее добавлю:

$ echo "<?php phpinfo (); ?>" > /home/www

Перезапустите службы:

# systemctl restart nginx.service
# systemctl restart php-fpm.service

Проверить корректную работу конфигов в энжинкс можно:

# nginx -t

Я добавлю службу php-fpm в автозапуск ОС:

# systemctl enable php-fpm

Проверим статус служб:

# systemctl status nginx
# systemctl status php-fpm
# systemctl status mariadb

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

Установка phpMyAdmin

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

# 2>&1 nginx -V | tr -- - '\n' | grep _module

У меня это:

http_ssl_module 
http_realip_module 
http_addition_module 
http_sub_module 
http_dav_module 
http_flv_module 
http_mp4_module 
http_gunzip_module 
http_gzip_static_module 
http_random_index_module 
http_secure_link_module 
http_stub_status_module 
http_auth_request_module 
mail_ssl_module 
http_spdy_module

Установка Nginx, PHP-FPM, MariaDB на CentOS 7 / RHEL 7 завершена.

PS: Вы можете скачать мои конфиги на GITHUB

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

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

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