Настройка 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
Чтобы отправляемая почта меньше попадала в СПАМ, необходимо выполнить следующие шаги:
- Прописать PTR-запись.
- Создать запись SPF.
- Настроить 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 |
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 |
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 |
netstat-tulpn|grepphp-fpm tcp127.0.0.190000.0.0.0*LISTEN2907php-fpmmaste |
Пример конфига nginx для домена с php-fpm
Shell
1 |
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 |
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 [email protected]
* данной настройкой мы будем подставлять всем отправляемым письмам без поля FROM адрес [email protected].
Создаем карту:
postmap /etc/postfix/generic_map
Для применения настроек перезагружаем почтовый сервер:
Настройка 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. Его можно сделать двумя различными способами:
- Через файл .htaccess
- С помощью настройки виртуального хоста.
Мне нравится больше второй вариант, поэтому приводим конфиг виртуального хоста к следующему виду.
<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:
- Get EPEL repository and install Nginx on your server.
- Install and configure MariaDB
- Install PHP and all of its common packages.
- 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
Чтобы отправляемая почта меньше попадала в СПАМ, необходимо выполнить следующие шаги:
- Прописать PTR-запись.
- Создать запись SPF.
- Настроить DKIM.
Установка nginx
После установки чистой системы, произведем установку и настройку связки nginx + php-fpm
система:
Shell
1 |
# 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 |
# yum repolist | grep nginx nginx nginx repo56 |
Если возникли проблемы:
Shell
1 | yum clean all;yum update |
Проверяем:
Shell
1 |
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 |
# netstat -tulpn | grep nginx tcp0.0.0.0800.0.0.0*LISTEN21585nginxmaster |
Если не запускает, убедится что 80-й порт не занимает apache:
Shell
1 |
netstat-ntupl|grep80 tcp0.0.0.0800.0.0.0*LISTEN1238httpd |
Если занят и использование httpd не предпологается, т.к. мы будем использовать nginx+php-fpm тогда останавливаем и убираем из сервисов:
Shell
1 |
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 сервера:
- По умолчанию конфигурационный файл: /etc/httpd/conf/httpd.conf
- Файлы конфигурации, загружаемых модулей: /etc/httpd/conf.modules.d/ (например, PHP)
- Выберите MPMs как загружаемые модули и события: / etc/httpd/conf.modules.d/00-mpm.conf
- Стандартные порты: 80 и 443 (SSL)
- Файлы журналов по умолчанию: /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 <[email protected]>" 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.
Проверьте себя на вступительном тесте и смотрите подробнее программу по .