Установка 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
ПОПОЗЖЕ БУДЕТ 😉
Автоматический запуск 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