Настройка web сервера nginx, php-fpm, php7 на centos 7

Настройка Nginx

К настоящему времени у вас уже должен быть установлен Nginx с сертификатом SSL в вашей системе, если нет, проверьте предварительные требования для этого руководства.

Откройте текстовый редактор и создайте новый серверный блок nginx :

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

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

Не забудьте заменить example.com на свой домен WordPress и указать правильный путь к файлам сертификатов SSL. Все HTTP-запросы будут перенаправлены на HTTPS . Фрагменты, используемые в этой конфигурации, созданы в этом руководстве .

Перед перезапуском сервиса Nginx проверьте конфигурацию, чтобы убедиться в отсутствии синтаксических ошибок:

Если ошибок нет, результат должен выглядеть так:

и вы можете перезапустить Nginx , набрав:

Тюнинг веб-сервера

PHP

Открываем на редактирование следующий файл:

vi /etc/php.ini

И правим следующее:

upload_max_filesize = 512M

post_max_size = 512M

short_open_tag = On

date.timezone = «Europe/Moscow»

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

systemctl restart php-fpm

systemctl restart httpd

NGINX

Открываем на редактирование следующий файл:

vi /etc/nginx/nginx.conf

И внутри секции http добавляем:

client_max_body_size 512M;

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

systemctl restart nginx

Подробнее про тюнинг NGINX в статье Практические советы по тюнингу веб-сервера NGINX.

Postfix

Чтобы отправляемая почта меньше попадала в СПАМ, необходимо выполнить следующие шаги:

  1. Прописать PTR-запись.
  2. Создать запись SPF.
  3. Настроить DKIM. 

Шаг #1: Настройка файервола

По умолчанию в CentOS 7 80-порт, на котором работает http-сервер, фильтруется файерволом. Доступ к 80-порту можно получить с локального хоста, но никак не с внешнего. Для того, чтобы другие компьютеры могли подключаться к нашему серверу по 80-порту (т.е могли просматривать сайты) нам необходимо его открыть, добавив новое правило работы межсетевого экрана, с помощью утилиты .

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

Если в результате выполнения команд вы видите такие слова как и соответственно, то это означает, что файевол у вас не работает и ваш сервер не защищен. Запустить файервол можно так:

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

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

Убедимся в том, что службы и добавлены в публичную зону.

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

Теперь, при удачно выполненных предыдущих действиях, ваши будущие сайты будут доступны для всех.

Работа с сайтами разных пользователей на одном веб сервере

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

И не забываем обратно вернуть владельца на наш chroot каталог, иначе не подключимся по sftp.

Но при такой схеме будут проблемы с движками сайтов, которые автоматом что-то к себе загружают, потому что php-fpm работает от пользователя nginx, а у нас права nginx только на группу стоят, где нет прав на запись. К примеру, wordpress не сможет автоматически загружать плагины, будет просить доступ к ftp. Это можно исправить просто выставив права 0775 на все каталоги, но это путь костылей. В общем, могут возникнуть некоторые неудобства. Сейчас мы их исправим.

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

Будете получать ошибку.

Возвращаем обратно рута владельцем корня chroot.

Обращаю внимание, что сначала мы рекурсивно назначаем права на все содержимое директорий, а потом возвращаем владельца root только на корень домашнего каталога пользователя z.serveradmin.ru. Добавляем пользователя nginx в группу z.serveradmin.ru, чтобы web сервер имел доступ на чтение всех файлов виртуального хоста

Добавляем пользователя nginx в группу z.serveradmin.ru, чтобы web сервер имел доступ на чтение всех файлов виртуального хоста.

Создаем отдельный pool для php-fpm, который будет обслуживать сайт z.serveradmin.ru и будет запускаться от этого пользователя. Для этого копируем существующий конфиг /etc/php-fpm.d/www.conf и изменяем в нем несколько строк.

Мы поменяли название пула, запустили его от отдельного пользователя и назначили ему отдельный сокет. Теперь идем в настройки этого виртуального хоста в nginx — /etc/nginx/conf.d/z.serveradmin.ru.conf и везде меняем старое значение сокета

на новое

Перезапускаем nginx и php-fpm и проверяем работу сайта от отдельного пользователя.

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

Install PHP 7

First you’ll want to add the Webtatic repo:

Use the following command to install PHP 7 on your system.

You can run to verify that PHP 7 is installed.

Next you’ll want to install some PHP modules based on your needs, we’ll start with these:

You can run this command to see other PHP modules that are available:

Now we need to secure PHP7 since it has a small loop for hackers by default and we need to edit the PHP.ini file. We can use any of text editor like nano or vim.

Now find cgi.fix_pathinfo. Use Ctrl+W to activate search function in nano editor. Now you will see that its value is set to 1 by default like this cgi.fix_pathinfo=1, so change its value to 0 like this: cgi.fix_pathinfo=0 and save it via Ctrl+O.

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

Find the line that specifies the listen parameter, and change it so it looks like the following:/etc/php-php.d/www.conf — 1 of 3

Next, find the lines that set the listen.owner and listen.group and uncomment them. They should look like this:/etc/php-php.d/www.conf — 2 of 3

Lastly, find the lines that set the user and group and change their values from “apache” to “nginx”:/etc/php-php.d/www.conf — 3 of 3

Then save and quit.

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

Next, enable php-fpm to start on boot:

Установка php-fpm 7

Устанавливаем php-fpm и некоторые модули, которые скорее всего пригодятся в дальнейшей работе:

используем этих ребят https://webtatic.com/packages/php70/ , репа:

Shell

1
2

rpm-Uvh httpsdl.fedoraproject.orgpubepelepel-release-latest-7.noarch.rpm

rpm-Uvh httpsmirror.webtatic.comyumel7webtatic-release.rpm

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

Shell

1 yum install php70w-fpm php70w-common php70w-cli php70w-mysql php70w-gd php70w-ldap php70w-odbc php70w-pdo php70w-pear php70w-xml php70w-xmlrpc php70w-mbstring php70w-snmp php70w-soap

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

Shell

1
2

systemctl enable php-fpm.service

ln-s’/usr/lib/systemd/system/php-fpm.service»/etc/systemd/system/multi-user.target.wants/php-fpm.service’

И запускаем:

Shell

1 systemctl start php-fpm.service

Проверяем:

Shell

1
2

netstat-tulpn|grepphp-fpm

tcp127.0.0.190000.0.0.0*LISTEN2907php-fpmmaste

Пример конфига nginx для домена с php-fpm

Shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

server{

listen*80;

server_name mysite.com;

access_logvarlognginxmysite.com_nginx_access.log;

error_logvarlognginxmysite.com_nginx_error.log;

rootvarwwwmysite.com;

index      index.php;

location~\.php${

fastcgi_pass127.0.0.19000;

fastcgi_index            index.php;

fastcgi_read_timeout60;

fastcgi_intercept_errors on;

include fastcgi_params;

fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;

}

location~*\.(svg|jpg|jpeg|gif|png|ico|bmp|js|css|txt|swf)(\?.*)?${

expires   max;

}

}

Привет конфига для php-fpm (/etc/php-fpm.d/mysite.com.conf)

Shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

mysite.com

listen=127.0.0.19000

listen.backlog=-1

listen.allowed_clients=127.0.0.1

listen.owner=root

listen.group=nginx

listen.mode=0660

user=apache

group=apache

pm=dynamic

pm.max_children=128

pm.start_servers=30

pm.min_spare_servers=25

pm.max_spare_servers=50

pm.max_requests=1000

pm.status_path=fpm-status

request_terminate_timeout=

request_slowlog_timeout=

slowlog=varlogmysite.comphp_slow.log

rlimit_files=65536

rlimit_core=

catch_workers_output=no

security.limit_extensions=.php

php_admin_flagdisplay_errors=off

php_admin_flaglog_errors=on

php_admin_valueerror_log=varlogmysite.comphp_error.log

php_admin_valuememory_limit=256M

php_admin_valuesendmail_path=usrsbinsendmail-t-i-fnoreply@mysite.com

php_admin_valuesession.save_handler=files

php_admin_valuesession.save_path=varlibphpsession

php_admin_valuesession.gc_maxlifetime=72000

php_admin_valuesession.cookie_secure=on

php_admin_valuesession.cookie_httponly=on

php_admin_valuesession.use_only_cookies=on

php_admin_valuemax_execution_time=60

php_admin_valuemax_input_time=60

php_admin_valuepost_max_size=30M

php_admin_valueupload_max_filesize=30M

Step 2 — Installing MariaDB

Now that we have our web server up and running, it is time to install MariaDB, a MySQL drop-in replacement. MariaDB is a community-developed fork of the MySQL relational database management system.

Again, we can use to acquire and install our software. This time, we’ll also install some other helper packages that will assist us in getting our components to communicate with each other:

When the installation is complete, we need to start MariaDB with the following command:

Now that our MariaDB database is running, we want to run a security script that will remove some dangerous defaults and lock down access to our database. Start the interactive script by running:

The prompt will ask you for your current MariaDB password. Since you just installed MariaDB, you most likely won’t have one, so leave it blank by pressing enter. Then the prompt will ask you if you want to set a password. Go ahead and enter , and follow the instructions:

For the rest of the questions, you should hit the “ENTER” key through each prompt to accept the default values. This will remove some sample users and databases, disable remote root logins, and load these new rules so that MySQL immediately respects the changes we have made.

The last thing you will want to do is enable MariaDB to start on boot. Use the following command to do so:

At this point, your database system is now set up and we can move on.

What is LEMP?

LEMP is a stack of programs that work collectively to serve dynamic websites or web applications. It consists of Linux (the server’s operating system), ENginX/Nginx (web server application), MySQL (database management system), and PHP (scripting language).

LEMP is a popular alternative to LAMP, which uses Apache instead of Nginx and focuses on serving static web pages. There are also WAMP and MAMP that replace Linux with Windows and macOS.

Before we begin the tutorial on how to install LEMP, make sure that your server or VPS is running on CentOS 7. If you’re using a Hostinger VPS plan, install CentOS from the Servers tab of hPanel.

Postfix

Устанавливаем postfix командой:

dnf install postfix

Теперь нам необходимо сделать несколько простых настроек:

vi /etc/postfix/main.cf

Редактируем: 


myorigin = $mydomain

inet_protocols = ipv4

Добавляем:

smtp_generic_maps = hash:/etc/postfix/generic_map

* myorigin — имя домена, которое будет подставляться всем отправляемым сообщениям без явного указания оного; inet_protocols — задает версию IP, с которой будет работать Postfix (если на нашем сервере используется ipv6, значение параметра стоит оставить all); smtp_generic_maps указывает на карту с общими правилами пересылки. 

Открываем карту пересылки:

vi /etc/postfix/generic_map

И добавляем:

@dmosk.local    no-reply@dmosk.local

* данной настройкой мы будем подставлять всем отправляемым письмам без поля FROM адрес no-reply@dmosk.local.

Создаем карту:

postmap /etc/postfix/generic_map

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

systemctl restart postfix

Настройка ssl сертификата Lets Encrypt в apache

Теперь настроим работу web сервера apache с ssl сертификатом. Хотя если быть точным, то tls сертификатом. Устанавливаем пакет certbot для получения бесплатного ssl сертификата от let’s encrypt. Для этого нам сначала надо подключить репозиторий epel.

# dnf install epel-release
# dnf install certbot

После установки пакетов certbot, если его запустить, напишет ошибку, что не может сам настроить apache.

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

# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/localhost.key -out /etc/ssl/certs/localhost.crt

Все параметры оставляйте дефолтные, не принципиально. Мы этот сертификат использовать не будет. Перезапустите apache.

# apachectl restart

Теперь выпустим сертификат для нашего домена. Имейте ввиду, чтобы получить сертификат у вас должно быть действующее доменное имя, ссылающееся на web сервер, который настраиваете. Let’s Encrypt будет по доменному имени обращаться к серверу, на котором настраиваете сертификат, чтобы проверить домен. В тестовой лаборатории с вымышленным доменным именем получить настоящий ssl сертификат не получится.

# certbot certonly

В качестве способа аутентификации выбирайте

1: Apache Web Server plugin (apache)

Дальше заполняйте в соответствии с вашими названиями. После получения сертификата, укажем его в конфигурации виртуального хоста. В моем случае в файле z.serveradmin.ru.conf. Добавляем туда параметры ssl.

<VirtualHost *:80 *:443>

    ServerName z.serveradmin.ru
    ServerAlias www.z.serveradmin.ru
    DocumentRoot /web/sites/z.serveradmin.ru/www

    ErrorLog /web/sites/z.serveradmin.ru/log/error.log
    CustomLog /web/sites/z.serveradmin.ru/log/access.log common

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/z.serveradmin.ru/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/z.serveradmin.ru/privkey.pem

    <Directory /web/sites/z.serveradmin.ru/www>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

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

</VirtualHost>

Перезапускайте apache и проверяйте работу сайта по https, зайдя по соответствующему протоколу.

По аналогии делаете с остальными виртуальными хостами, для которых используете бесплатные сертификаты let’s encrypt. Осталось дело за малым — настроить автоматический выпуск новых ssl сертификатов, взамен просроченным. Для этого добавляем в /etc/crontab следующую строку:

# Cert Renewal
30 4 * * * root /usr/bin/certbot renew --post-hook "/usr/sbin/apachectl restart" >> /var/log/le-renew.log

Переадресация с http на https в apache

В настроенном ранее примере https отлично работает, но неудобно, что нет автоматической переадресации с http на https. Чтобы использовать безопасную версию сайта, необходимо вручную в браузере набирать https. Хотя все современные браузеры уже сами умеют проверять версии сайта и если есть защищенная, то они автоматически сами ее выбирают.

Тем не менее, лучше все же добавить редирект с http на https. Его можно сделать двумя различными способами:

  1. Через файл .htaccess
  2. С помощью настройки виртуального хоста.

Мне нравится больше второй вариант, поэтому приводим конфиг виртуального хоста к следующему виду.

<VirtualHost *:80>

    ServerName z.serveradmin.ru
    ServerAlias www.z.serveradmin.ru
    Redirect permanent / https://z.serveradmin.ru

</VirtualHost>

<VirtualHost *:443>

    ServerName z.serveradmin.ru
    ServerAlias www.z.serveradmin.ru
    DocumentRoot /web/sites/z.serveradmin.ru/www

    ErrorLog /web/sites/z.serveradmin.ru/log/error.log
    CustomLog /web/sites/z.serveradmin.ru/log/access.log common

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/z.serveradmin.ru/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/z.serveradmin.ru/privkey.pem

    <Directory /web/sites/z.serveradmin.ru/www>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

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

</VirtualHost>

Перечитывайте конфиг httpd и проверяйте. Должно работать автоматическое перенаправление на https версию.

Установка mariadb на CentOS 8

Дошла очередь до установки сервера баз данных mysql для web сервера на CentOS 8 — MariaDB. Я буду устанавливать последнюю стабильную версию на момент написания статьи — 10.4 из официального репозитория mariadb.

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

В моем случае конфиг получился следующий.

Устанавливаем последнюю версию mariadb на centos.

Запускаем mariadb и добавляем в автозагрузку.

Запускаем скрипт начальной конфигурации mysql и задаем пароль для root. Все остальное можно оставить по-умолчанию.

Сервер баз данных mysql для нашего web сервера готов. Продолжаем настройку. Установим панель управления mysql — phpmyadmin.

Conclusion

LEMP (Linux, ENginx, MySQL, PHP) stack is the perfect choice to serve dynamic web pages or web applications. Fortunately, the installation process is simple. With basic knowledge of the command-line interface, you can easily set up all the required programs on your VPS.

In this article, you have learned how to install LEMP on CentOS 7. To conclude, let’s take a look at all the steps once again:

  1. Get EPEL repository and install Nginx on your server.
  2. Install and configure MariaDB
  3. Install PHP and all of its common packages.
  4. Configure Nginx to work with PHP.

Good luck and feel free to leave a comment if you have any questions!

Установка phpmyadmin

Кратко расскажу про установку phpmyadmin в контексте данной статьи. Подробно не буду останавливаться на этом, так как статья и так получается очень объемная, а я еще не все рассказал. Вопрос настройки phpmyadmin я очень подробно рассмотрел отдельно. За подробностями можно сходить туда.

Устанавливаем phpmyadmin через yum. Если ранее все сделали правильно, то конфликтов с зависимостями быть не должно.

# yum install phpmyadmin

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

# rm -df /web/sites/p1m2a.zeroxzed.ru/www
# ln -s /usr/share/phpMyAdmin /web/sites/p1m2a.zeroxzed.ru/www

Выставляем правильные права на директорию с php сессиями. Без этого работать phpmyadmin не будет.

# chown nginx:nginx /var/lib/php/session/

Можно заходить и проверять работу phpmyadmin. Ее установка закончена.

Apache (httpd)

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

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

И так, устанавливаем httpd:

yum install httpd

Заходим в настройки:

vi /etc/httpd/conf/httpd.conf

И редактируем следующее:

Listen 8080

* наш веб-сервер будет слушать на порту 8080, так как на 80 уже работает NGINX.

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

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

Добавляем:

<Directory /var/www/*/www>
    AllowOverride All
    Options Indexes ExecCGI FollowSymLinks
    Require all granted
</Directory>

* где Directory — разрешенные каталоги для запуска из apache; Options — разрешенные опции; Require — с каких IP-адресов можно открывать сайты, определенные в данном каталоге. Итого, мы разрешаем все каталоги в /var/www, но только если следующий каталог будет www; разрешаем опции Indexes (возвращает список файлов, если нет индексного файла, например, index.php), ExecCGI (разрешены сценарии CGI), FollowSymLinks (включены символические ссылки в этом каталоге); доступ для данных каталого разрешен со всех адресов (all granted).

Проверяем синтаксис конфигурационного файла httpd:

apachectl configtest

Разрешаем автозапуск и запускаем службу:

systemctl enable httpd —now

Создаем php-файл со следующим содержимым:

vi /var/www/html/index.php

<?php phpinfo(); ?>

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

NGINX + Apache

Ранее нами была настроена связка nginx + php-fpm. Теперь проверяем совместную работу первого с apache.

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

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

* если при настройке nginx мы редактировали файл /etc/nginx/nginx.conf, то необходимо открыть его.

Находим наш настроенный location для php-fpm:


    location ~ \.php$ {
            fastcgi_pass unix:/run/php-fpm/www.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_param DOCUMENT_ROOT $root_path;
    }

и меняем на:


    location ~ \.php$ {
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

Проверяем и перезапускаем nginx:

nginx -t

systemctl restart nginx

Пробуем открыть в браузере IP-адрес нашего сервера — должна открыться та же страница, что при проверке Apache (с добавлением 8080):

Apache Real IP

Так как все запросы на httpd приходят от NGINX, они воспринимаются как от IP-адреса 127.0.0.1. На практике, это может привести к проблемам, так как некоторым сайтам необходимы реальные адреса посетителей.

Для решения проблемы будем использовать модуль mod_rpaf. Устанавливаем набор разработчика для apache:

yum install httpd-devel gcc unzip

Переходим в каталог /usr/local/src:

cd /usr/local/src

Скачиваем модуль:

wget https://github.com/gnif/mod_rpaf/archive/stable.zip

Распаковываем его:

unzip stable.zip

Переходим в распакованный каталог:

cd mod_rpaf-stable/

Собираем модуль и устанавливаем его:

make

make install

* при возникновении ошибки ./apxs.sh: line 15: -c: command not found, необходимо поставить which командой yum install which.

Создаем конфигурационный файл со следующим содержимым:

vi /etc/httpd/conf.d/mod_rpaf.conf

LoadModule              rpaf_module modules/mod_rpaf.so
RPAF_Enable             On
RPAF_ProxyIPs           127.0.0.1
RPAF_SetHostName        On
RPAF_SetHTTPS           On
RPAF_SetPort            On
RPAF_ForbidIfNotProxy   Off

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

systemctl restart httpd

Для проверки настройки открываем на редактирование созданный index-файл для httpd:

vi /var/www/html/index.php

И редактируем содержимое на:

<?php echo $_SERVER ?>

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

Тюнинг веб-сервера

PHP

Открываем на редактирование следующий файл:

vi /etc/php.ini

И правим следующее:

upload_max_filesize = 256M
post_max_size = 256M
short_open_tag = On
date.timezone = «Europe/Moscow»

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

systemctl restart php-fpm

systemctl restart httpd

NGINX

Открываем на редактирование следующий файл:

vi /etc/nginx/nginx.conf

И правим следующее:

worker_processes  auto;

И внутри секции http добавляем:

client_max_body_size 256M;

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

systemctl restart nginx

Подробнее про тюнинг NGINX в статье Практические советы по тюнингу веб-сервера NGINX.

Postfix

Чтобы отправляемая почта меньше попадала в СПАМ, необходимо выполнить следующие шаги:

  1. Прописать PTR-запись.
  2. Создать запись SPF.
  3. Настроить DKIM. 

Установка nginx

После установки чистой системы, произведем установку и настройку связки nginx + php-fpm

система:

Shell

1
2

# cat /etc/centos-release

CentOS Linux release7.3.1611(Core)

Подключаем репу:

Shell

1 rpm-Uvh httpnginx.orgpackagescentos7noarchRPMSnginx-release-centos-7-0.el7.ngx.noarch.rpm

Устанавливает пакет:

Shell

1 yum install nginx

Проверяем:

Shell

1
2

# yum repolist | grep nginx

nginx nginx repo56

Если возникли проблемы:

Shell

1 yum clean all;yum update

Проверяем:

Shell

1
2
3
4

yum list installed|grepnginx

nginx.x86_641.6.0-1.el6.ngx@nginx

Nginx-release-centos.noarch

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

Shell

1 systemctl enable nginx.service

И запускаем:

Shell

1 systemctl start nginx.service

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

Shell

1
2

# netstat -tulpn | grep nginx

tcp0.0.0.0800.0.0.0*LISTEN21585nginxmaster

Если не запускает, убедится что 80-й порт не занимает apache:

Shell

1
2

netstat-ntupl|grep80

tcp0.0.0.0800.0.0.0*LISTEN1238httpd

Если занят и использование httpd не предпологается, т.к. мы будем использовать nginx+php-fpm тогда останавливаем и убираем из сервисов:

Shell

1
2
3

systemctl stop httpd.service

systemctl disable httpd.service

Removed symlinketcsystemdsystemmulti-user.target.wantshttpd.service.

Не забываем после всего открыть 80-й порт на файрволе:

Shell

1 iptables-IINPUT-ptcp-mtcp—dport80-mstate—state NEW,ESTABLISHED-jACCEPT

Подготовка web сервера apache

Далее я буду считать, что у вас уже есть установленный и настроенный сервер CentOS 7. Если это не так, то смотрите мои подробные инструкции с видео на тему установки и базовой настройки сервера CentOS 7.

Если на голом сервере выполнить:

# yum install phpmyadmin

Вы увидите полный список зависимостей, но в нем не будет самого веб сервера и интерпретатора php, только его модули. Веб сервер вам нужно предварительно установить и настроить самим. Сделем это на примере веб сервера httpd (апач). Устанавливаем его:

# yum install -y httpd

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

# yum install -y php

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

# systemctl enable httpd
# systemctl start httpd

Заходите по адресу http://ip-адрес-сервер. Вы должны увидеть тестовую страницу апача. Теперь проверим, работает ли php. Создаем тестовую страничку в папке /var/www/html:

# mcedit /var/www/html/index.php
<?php phpinfo(); ?>

Назначаем владельца apache на созданный файл:

# chown apache. /var/www/html/index.php

Теперь снова заходим по адресу http://ip-адрес-сервера, вы должны увидеть вывод phpinfo:

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

Установка Apache on a CentOS 7 /RHEL 7 сервер

Для установки веб сервера используем команду

Shell

yum install httpd

1 yum install httpd

Включите службу HTTPd в автозагрузки

Shell

systemctl enable httpd.service

1 systemctl enable httpd.service

Shell

ln -s ‘/usr/lib/systemd/system/httpd.service’ ‘/etc/systemd/system/multi-user.target.wants/httpd.service’

1 ln-s’/usr/lib/systemd/system/httpd.service»/etc/systemd/system/multi-user.target.wants/httpd.service’

Чтобы отключить, автоматическую загрузку

Shell

systemctl disable httpd.service

1 systemctl disable httpd.service

Shell

rm ‘/etc/systemd/system/multi-user.target.wants/httpd.service’

1 rm’/etc/systemd/system/multi-user.target.wants/httpd.service’

Запустите HTTPd службу на CentOS 7 / RHEL 7

Shell

systemctl start httpd.service

1 systemctl start httpd.service

На данном этапе вы можете указать в веб-браузере IP-адрес вашего сервера, http://10.180.10.10. Вы увидите стартовую страницу apache:

Shell

systemctl stop httpd.service

1 systemctl stop httpd.service

Shell

systemctl restart httpd.service

1 systemctl restart httpd.service

Просмотр статуса apache службы на CentOS 7 / RHEL 7

Убедитесь что веб сервер запущен

Shell

systemctl status httpd.service

1 systemctl status httpd.service

Также перезапуск веб сервера может быть выполнен следующей командой

Shell

apachectl graceful

1 apachectl graceful

Проверка apache / httpd на наличие ошибок конфигурации в Centos 7/ RHEL 7

Shell

apachectl configtest

1 apachectl configtest

Конфигурация по умолчанию HTTPD сервера:

  1. По умолчанию конфигурационный файл: /etc/httpd/conf/httpd.conf
  2. Файлы конфигурации, загружаемых модулей: /etc/httpd/conf.modules.d/ (например, PHP)
  3. Выберите MPMs как загружаемые модули  и события: / etc/httpd/conf.modules.d/00-mpm.conf
  4. Стандартные порты: 80 и 443 (SSL)
  5. Файлы журналов по умолчанию: /var/log/httpd/{access_log,error_log}

Install MariaDB 10.1 on CentOS 7

MariaDB 10.1 is the latest stable version of MariaDB. There are many great new features in MariaDB 10.1, for example Galera (multi-master solution), table, tablespace and log encryption, page compression, improved optimization, increased InnoDB pages to 64k vs 16k old limit, many bugs & security fixed in MariaDB 10.1. For a full detailed list of new features of MariaDB 10.1 you can visit https://mariadb.com/kb/en/mariadb/what-is-mariadb-101/

Installing MariaDB 10.1 on CentOS 7 is quite easier than installing Nginx 1.8 on CentOS 7. You don’t have to compile MariaDB 10.1, you can install MariaDB 10.1 with yum command from MariaDB’s repository with a few simple steps.

Adding the MariaDB Repository

Let’s create a .repo file for MariaDB, you can call it anything you want but to keep things simple, we are gonna create MariaDB.repo in /etc/yum.repos.d/ directory

# nano /etc/yum.repos.d/MariaDB.repo

With the content below (this MariaDB.repo entry IS for CentOS 7, if you use other OS this will not work)

# MariaDB 10.1 CentOS repository list - created 2016-01-20 20:18 UTC
# http://mariadb.org/mariadb/repositories/

name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Install MariaDB

Once you have created MariaDB.repo, you now can install MariaDB 10.1 via yum command.

# yum install MariaDB-server MariaDB-client

You will be ask to confirm MariaDB’s signing key before import it, say “y” for yes to confirm.

Retrieving key from https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
Importing GPG key 0x1BB943DB:
Userid : "MariaDB Package Signing Key <package-signing-key@mariadb.org>"
Fingerprint: 1993 69e5 404b d5fc 7d2f e43b cbcb 082a 1bb9 43db
From : https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
Is this ok [y/N]: y

Start, stop, and restart MariaDB

Now we can start, stop, restart, and reload MariaDB on CentOS 7 using these commands:

 # systemctl start mariadb
# systemctl stop mariadb
# systemctl restart mariadb

Заключение

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

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

  • Полный бэкап сервера или отдельных сайтов.
  • Мониторинг веб сервера и веб сайта с помощью zabbix.
  • Защита админки wordpress с помощью fail2ban.
  • Если у вас будут проблемы с ботами, то пригодится статья по блокировке доступа к сайту по странам или защита сайта от ddos.

Если еще что-то полезное вспомню, добавлю ссылки. Пока вроде все. Статья получилось большой и насыщенной. Было не просто все собрать воедино, проверить, связать между собой и оформить в последовательное повествование. Мог где-то ошибиться. Жду комментариев и отзывов. Написал все по своему опыту, как я обычно настраиваю веб сервера. Предполагаю что-то можно сделать более удобно и правильно. Буду рад научиться.

Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.

Онлайн курс «SRE практики и инструменты»

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «SRE практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и Linux. Обучение длится 3 месяц, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

На курсе вы узнаете как:

  • Внедрить SRE практики в своей организации
  • Управлять надежностью, доступностью и эффективностью сервисов
  • Управлять изменениями
  • Осуществлять мониторинг
  • Реагировать на инциденты и производительность
  • Работать со следующим технологическим стеком: Linux, AWS, GCP, Kubernetes, Ansible, Terraform, Prometheus, Go, Python.

Проверьте себя на вступительном тесте и смотрите подробнее программу по .

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: