Centos apache: Установка веб-сервера Apache в CentOS 7
Как настроить виртуальный хост Apache на CentOS 7
Apache является веб-сервером c открытым исходным кодом, разработанный для современных операционных систем, включая UNIX и Windows. Это безопасный, эффективный и расширяемый сервер, предоставляющий услуги HTTP синхронизированные с текущими стандартами HTTP.
Многие люди используют его для размещения своих веб – сайтов и приложений. На самом деле, согласно последним статистическим данным, Apache является наиболее широко используемым веб – сервер в мире, с Windows , IIS следующее на втором и на третьем месте российская разработка, которая является Nginx.
Функциональность Apache является большим, и можно найти много хороших возможностей для веб – сайта или приложения. На этом уроке, мы предоставим Вам информацию о виртуальном хосте Apache через примеры конфигурации на CentOS 7.
Виртуальный хост, на самом деле, блок, который описывает отдельный домен в грандиозной схеме веб-сервера Apache. Это позволяет размещать несколько веб-сайтов с помощью одного сервера, который очень полезен для людей, которые имеют более одного сайта.
Каждый домен, который выполнен с директивой виртуального хоста внутри конфигурации Apache будет направлять посетителя в определенный каталог , где тот самый веб – сайт размещен на сервере. Например, ваш WordPress сайт установлен в /var/www/wordpress/ поэтому при создании директивы виртуального хоста, корень документа для сайта будет установлен в /var/www/wordpress/, который позволит веб – серверу извлекать данные из веб – сайта соответствующего настроенного каталога.
Войдите на сервер с помощью SSH:
ssh root@server_ip
Перед тем как начать, введите следующую команду, чтобы проверить есть ли у вас правильная версия CentOS, установленная на вашем компьютере:
cat /etc/redhat-release
вывод должен быть примерно такой:
CentOS Linux release 7.2.1511 (Core)
Обновление системы
Убедитесь, что ваш сервер полностью обновлен:
yum update
На наших серверах CentOS 7, Apache устанавливается по умолчанию. Однако, если у вас нет Apache установленным на вашем сервере вы можете сделать это довольно простой командой:
yum install httpd
Включите Apache и добавьте его в запуск при загрузке:
systemctl start httpd.service systemctl enable httpd.service
Большинство веб – мастеров сегодня используют WordPress в качестве платформы для размещения их на сайте. Сайт на WordPress работает с базой данных MySQL, так что если вы планируете использовать эту статью для создания виртуальных хостов с сайтами WordPress (или на любой другой платформе, которая нуждается в базе данных), вам нужно будет установить MySQL и PHP на вашем сервере, который завершит так называемый стек LAMP (Linux Apache, MariaDB и PHP). У нас есть отличная статья о том, как установить LAMP на CentOS 7 так что вы можете проверить его здесь.
Параметры конфигурации Apache
Apache имеет глобальный конфигурационный файл, в котором все настройки по умолчанию хранятся и применяются к серверу. Директива виртуального хоста может быть сохранена в том же файле по умолчанию httpd.conf или другой, который будет соответствовать настроенному веб – сайту/домену.
Этот глобальный конфигурационный файл Apache в CentOS 7 является /etc/httpd/conf/httpd.conf. Вы можете использовать текстовый редактор по вашему выбору и посмотреть содержимое этого файла, так что вы получите некоторое представление о том, как настроен Apache.
Файл конфигурации прокомментирован перед каждой установкой, которые объясняют их использование. Так, например, ServerRoot установка верхней части дерева каталога, при которых лежат конфигурационные файлы Apache.
Listen директива связывает Apache с определенным IP – адресом и портом. Порт прослушивания Apache по умолчанию: 80.
Значения user/group являются имена user/group, работает как HTTPD (Apache). В CentOS пользователь и группа являются Apache/Apache, в Ubuntu/ Debian являются www-data/www-data.
Другим важным параметром является DocumentRoot, который является каталогом, из которого данные будут поданы к посетителю. Как правило, в большинстве дистрибутивах корневой документ по умолчанию для Apache установлен в /var/www/html/, так что если вы посмотрите данные в /var/www/html/ вы сможете получить доступ к этим же данным через веб – браузер с помощью IP адреса сервера.
Мы рассмотрели лишь незначительную часть того, что предлагает Apache своему пользователю, так что теперь давайте создадим нашу первую директиву виртуального хоста в Apache. Вы можете создать виртуальный хост внутри основного файла конфигурации Apache, однако, для более чистой и более организованной настройки мы создадим новый отдельный файл, в котором будут храниться конфигурационные строки. Существует установка ( IncludeOptional ) в глобальной конфигурации сервера Apache, где включенный каталог хранит отдельные конфигурационные файлы. Например, в CentOS 7 и Apache 2.4 (последняя версия Apache при написании этой статьи) IncludeOptional параметр установлен в /etc/httpd/conf.d/, что означает , что каждый файл * .conf, созданный в /etc/httpd/conf.d/ будет использоваться веб – сервером для обработки данных.
Поэтому, давайте создадим файл your_domain.conf, в котором мы настроим директиву виртуального хоста для вашего домена. После того, как вы вошли на свой сервер, введите следующую команду:
nano /etc/httpd/conf.d/your_domain.conf
Вставьте ниже содержание в файл:
<VirtualHost *:80> ServerAdmin webmaster@your_domain.ru DocumentRoot "/var/www/html/your_domain/" ServerName your_domain.ru ServerAlias www.your_domain.ru ErrorLog "/var/log/httpd/your_domain.ru-error_log" CustomLog "/var/log/httpd/your_domain.ru-access_log" combined <Directory "/var/www/html/your_domain/"> DirectoryIndex index.html index.php Options FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
Поясним настройки один за другим.
- <VirtualHost *: 80> – это означает , что эта директива виртуального хоста связывается с любого IP – адреса на сервере , на 80 -м порту.
- ServerAdmin – это адрес электронной почты, куда будут присылаться уведомления о проблемах, связанные с веб – сервером.
- DocumentRoot – каталог, в котором данные веб – сайта будут сохранены, в приведенном выше случае это будет /var/www/html/your_domain/. Конечно, вы можете заменить your_domain на другое значение, которое вы найдете пригодным.
- ServerName – это значение дает имя, которое сервер использует для идентификации веб – сайта. Здесь вы можете ввести свой фактический домен.
- ServerAlias – директива ServerAlias устанавливает альтернативные имена хостов, например: www.your_domain.ru. Он также может включать в себя групповые символы, если это необходимо.
- <Directory> и </ Directory> и используются , чтобы приложить группу директив , которые применяются только к названному справочнику, подкаталоги этого каталога, а также файлы в соответствующих каталогах. Может быть использована любая директива, которая позволяется в директивном контексте. Каталог-путь либо полный путь к каталогу или строку wild-card с использованием Unix. В нашем случае мы добавили FollowSymLinks, который будет применять символические ссылки в директории /var/www/html/your_domain/. Мы также устанавливаем директиву AllowOverride all это означает, что любая директива, которая имеет .htaccess разрешено в файлах .htaccess. Директива Require указывает, какие пользователи могут получить доступ к ресурсу.
Этот вид конфигурации могут быть применен для большинства платформ. Тем не менее, иногда определенной конфигурации WordPress сайта, такие как выше не может быть достаточно для других видов приложений. Например, сайт на Magento нужно будет включить больше возможностей или для сайта на Odoo будет нужен обратный прокси – сервер сконфигурирован.
Одну деталь, которую стоит отметить (несмотря на то, что большинство пользователей знают это) является то, что все вышеуказанные параметры конфигурации должны быть правильно установлены до или после создания файла конфигурации Apache. Например, DocumentRoot, необходимо создать и данные, размещенным в нем.
Создание каталога пользователя:
mkdir /var/www/html/your_domain/
Теперь загрузите данные, которые вы хотите разместить внутри этой директории.
Права доступа и владельца файла является еще одной важной задачей для веб – мастеров. В большинстве случаев в серверах без панели управления, файл и каталог собственность должна принадлежать пользователю и группе, в которой Apache работает. В CentOS 7 Apache работает под управлением Apache в качестве пользователя и Apache в качестве группы. Таким образом, вам нужно будет рекурсивно присвоить, значения для файлов и каталогов в корневом каталоге документов. Следующая команда делает именно это:
chown apache:apache -R /var/www/html/your_domain/
Эта команда будет назначать Apache: Apache для каждого файла и подкаталога/директории внутри /var/www/html/your_domain/.
В этой статье мы только поверхностно описали Apache и конфигурацию виртуального хоста. Для получения дополнительной информации, вы должны посетить официальный веб – сервер Apache для ознакомления с документацией.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Установка и оптимальная настройка Nginx + LAMP (CentOS 7) / Хабр
Недавно приняли решение переехать с хостинга на VPS, будем использовать: CentOS 7, Nginx, Apache, PHP, MySQL. Несмотря на большое количество статей на эту тему, многие аспекты не упоминаются, поэтому выкладываем эту статью чтобы услышать мнение знающих и опытных людей. Настраивать сервер как Вы уже поняли будем первый раз, поэтому о актуальности статьи можно будет судить из комментариев. Nginx будет отдавать статику, а динамику Apache (скрипты PHP), чтобы снизить нагрузку на сервер.
Подготовка.
Все настройки будем применять на рабочем сервере нашего проекта с конфигурацией сервера: CPU — 2 × 2000 МГц и RAM — 2048 МБ.
Для начала работы находим подходящий VPS с предустановленной CentOS 7, к серверу будем подключаться по SSH через PuTTY.
Вводим название хоста и порт, нажимаем Open:
Далее вводим логин [Enter], потом пароль (обратите внимание, ввод пароля не отображается) [Enter]:
Обновить систему, при этом сохранить устаревшие версии пакетов:
[root@test ~]# yum update
Или обновить все пакеты, старые пакеты будут удалены:
[root@test ~]# yum upgrade
Устанавливаем файловый менеджер с текстовым интерфейсом — Midnight Commander:
[root@test ~]# yum install mc
Устанавливаем текстовый редактор — Nano:
[root@test ~]# yum install nano
Проверяем сколько на сервере оперативной памяти и сколько доступно, а также наличие SWAP. Когда заканчивается оперативная память, данные перемещаются на диск, что замедляет работу сервера, работа SWAP нежелательна, но позволяет подстраховать себя:
[root@test ~]# free -m
Создаём файловую структуру и пользователей под сайты.
Создаём каталог (папку) для файлов под все сайты:
[root@test ~]# cd /
[root@test ~]# mkdir -m 755 website
Под каждый отдельный сайт выполните такие действия.
Содержимое каждого сайта будет находиться в собственном каталоге, поэтому создаём нового пользователя и отдельный каталог для разграничения прав доступа:
-b папка в которой будет создан каталог пользователя
-m создать каталог
-U создаём группу с таким же именем как у пользователя
-s /bin/false отключаем пользователю shell
[root@test ~]# useradd name.site -b /website/ -m -U -s /bin/false
Делаем каталоги для данных сайта (файлы сайта, логи и временные файлы):
[root@test ~]# mkdir -p -m 754 /website/name.site/www
[root@test ~]# mkdir -p -m 754 /website/name.site/logs
[root@test ~]# mkdir -p -m 777 /website/name.site/tmp
Изменяем владельца и группу на каталог, включая вложенные папки:
[root@test ~]# chown -R name.site:name.site /website/name.site/
Изменяем права доступа на каталог — name.site:
[root@test ~]# chmod 755 /website/name.site
Устанавливаем Nginx.
Инструкции по установке приведены на официальном сайте Nginx.
Для настройки репозитория yum в CentOS создаём файл /etc/yum.repos.d/nginx.repo:
[root@test ~]# cd /etc/yum.repos.d
[root@test ~]# touch nginx.repo
Открываем файл nginx.repo:
[root@test ~]# nano /etc/yum.repos.d/nginx.repo
Вставляем такое содержимое и сохраняем файл:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
Для проверки подписи загружаем ключ и импортируем его в менеджер пакетов rpm:
[root@test ~]# rpm --import http://nginx.org/keys/nginx_signing.key
Устанавливаем Nginx:
[root@test ~]# yum install nginx
Запускаем:
[root@test ~]# systemctl start nginx.service
Временно останавливаем:
[root@test ~]# systemctl stop nginx.service
Устанавливаем Apache и PHP.
Устанавливаем Apache (в CentOS — httpd):
[root@test ~]# yum install httpd
Устанавливаем PHP:
[root@test ~]# yum install php
Запускаем Apache:
[root@test ~]# systemctl start httpd.service
Временно останавливаем:
[root@test ~]# systemctl stop httpd.service
Настраиваем Nginx.
Добавляем в автозагрузку:
[root@test ~]# systemctl enable nginx.service
Открываем основной конфигурационный файл:
[root@test ~]# nano /etc/nginx/nginx.conf
Редактируем и сохраняем:
/etc/nginx/nginx.conf
user nginx;
worker_processes 2;
pid /var/run/nginx.pid;events {
worker_connections 1024;
multi_accept on;
}http {
error_log /var/log/nginx/error.log warn;
access_log off;
charset utf-8;
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
reset_timedout_connection on;
client_header_timeout 15;
client_body_timeout 30;
send_timeout 15;
keepalive_timeout 5;
keepalive_requests 30;
client_max_body_size 8m;
limit_rate_after 30M;
limit_rate 500K;
open_file_cache max=10000 inactive=3m;
open_file_cache_min_uses 2;
open_file_cache_valid 1m;
sendfile on;
tcp_nodelay on;
tcp_nopush on;
include /etc/nginx/conf.d/*.conf;
}
От какого пользователя запускаем Nginx:
user nginx;
Указываем количество рабочих процессов (зависит от количества ядер процессора и количества жёстких дисков, потому что головка диска быстрее перемещаться не сможет):
worker_processes 2;
Идентификатор процесса запущенного сервера:
pid /var/run/nginx.pid;
Секция events:
events {
#
}
Внутри блока events, максимальное количество одновременных соединении с сервером (worker_processes × worker_connections):
worker_connections 1024;
Внутри блока events, принимать соединения сколько будет возможно:
multi_accept on;
Секция http, остальное будет находиться внутри неё:
http {
#
}
Записывать ошибки (уровня: warn, error, crit, alert) по указанному пути:
error_log /var/log/nginx/error.log warn;
Отключаем запись журнала доступа (жёсткий диск скажет спасибо):
access_log off;
Установим кодировку по умолчанию:
charset utf-8;
Отключим показ версии Nginx:
server_tokens off;
Подключить mimetypes:
include /etc/nginx/mime.types;
Если MIME-тип файла не удастся определить, то по умолчанию файл будет бинарным:
default_type application/octet-stream;
Закрывать соединение если клиент не отвечает:
reset_timedout_connection on;
Читать заголовок запроса клиента не более 15 секунд:
client_header_timeout 15;
Читать тело запроса клиента не более 30 секунд — интервал устанавливается не на всю передачу тела запроса, а только между двумя последовательными операциями чтения:
client_body_timeout 30;
Если клиент не принимает ответ более 15 секунд, сбрасываем соединение:
send_timeout 15;
Держим соединение открытым не более пяти секунд:
keepalive_timeout 5;
Максимальное количество запросов с открытым соединением от одного клиента:
keepalive_requests 30;
Запросы больше 8 мегабайт принимать не будем:
client_max_body_size 8m;
Чтобы один пользователь не занял весь свободный канал трафика, после 30 Мб наложим ограничение на скорость отдачи данных:
limit_rate_after 30M;
Максимальная скорость с клиентом в рамках одного соединения после наложенных ограничений будет не более 500 Кб/с:
limit_rate 500K;
Устанавливаем максимальное количество файлов, информация о которых будет содержаться в кеше и удаляться, если файл не будет запрошен повторно в течении 3 минут:
open_file_cache max=10000 inactive=3m;
Если файл будет запрошен более 2 раз, поместить в кэш:
open_file_cache_min_uses 2;
Проверять актуальность кэша каждую минуту:
open_file_cache_valid 1m;
Отдавать статику без посредников:
sendfile on;
Не буферизировать данные:
tcp_nodelay on;
Отправлять заголовки одним пакетом:
tcp_nopush on;
Подключить конфиги:
include /etc/nginx/conf.d/*.conf;
Для каждого сайта создаём виртуальный хост Nginx.
Чтобы Nginx получил доступ к файлам сайта, добавим пользователя nginx в группу name.site:
[root@test ~]# usermod -a -G name.site nginx
Затем создаём конфигурационный файл:
[root@test ~]# touch /etc/nginx/conf.d/name.site.conf
Открываем файл:
[root@test ~]# nano /etc/nginx/conf.d/name.site.conf
Редактируем и сохраняем:
/etc/nginx/conf.d/name.site.conf
server {
listen 80;
server_name name.site www.name.site;
#access_log /website/name.site/logs/nginx_access.log;
error_log /website/name.site/logs/nginx_error.log;location / {
proxy_pass http://127.0.0.1:8080/;
proxy_read_timeout 300s;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
}
location ~* \.(css|js|png|gif|jpg|jpeg|ico)$ {
root /website/name.site/www;
expires 1d;
}error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Сервер слушает на 80 порту:
listen 80;
Имя сервера, определяет в каком блоке будет выполнен запрос, указывается имя домена:
server_name name.site www.name.site;
Путь к журналу ошибок Nginx конкретного сайта:
error_log /serves/name.site/logs/nginx_error.log;
Перенаправить запрос Apache:
proxy_pass http://127.0.0.1:8080/;
Обрывать коннект через 300 секунд, если превышен таймаут при чтении ответа с сервера Apache:
proxy_read_timeout 300s;
Передать заголовки:
proxy_set_header Host $host;
Передать IP клиента:
proxy_set_header X-Real-IP $remote_addr;
Передать список серверов по которым прошёл запрос и добавить свой:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Отключить буферизацию проксируемого сервера:
proxy_buffering off;
Статику будет отдавать Nginx:
location ~* \.(css|js|png|gif|jpg|jpeg|ico)$ {
root /serves/name.site/www;
expires 1d;
}
Настраиваем Apache.
Посмотрите какой именно модуль Apache у вас установлен. У меня — apache2-mpm-prefork (один процесс с одним потоком будет обрабатывать одно соединение, рекомендуется как безопасный совместно с PHP):
[root@test ~]# apachectl -V
Открываем httpd.conf:
[root@test ~]# nano /etc/httpd/conf/httpd.conf
Редактируем и сохраняем:
httpd.conf
ServerRoot "/etc/httpd"
DocumentRoot "/website"
Include conf.modules.d/*.confUser apache
Group apacheListen 127.0.0.1:8080
ServerName 127.0.0.1:8080
ServerAdmin root@localhostServerSignature Off
ServerTokens ProdRLimitMEM 786432000
TimeOut 250AddDefaultCharset utf-8
DefaultLanguage ruKeepAlive Off
ContentDigest Off
EnableSendfile offErrorLog "logs/error_log"
LogLevel error<IfModule mime_module>
TypesConfig /etc/mime.types
</IfModule><Directory />
DirectoryIndex index.php
AllowOverride none
Require all denied
</Directory><IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 30
MaxRequestsPerChild 2500
</IfModule><Files ".ht*">
Require all denied
</Files>IncludeOptional sites-enabled/*.conf
Устанавливаем корневой каталог Apache:
ServerRoot "/etc/httpd"
Каталог где будут храниться файлы сайтов:
DocumentRoot "/website"
Подгружаем конфигурационные файлы:
Include conf.modules.d/*.conf
От какого пользователя запускаем сервер:
User apache
От какой группы запускаем сервер:
Group apache
Указываем IP и порт с которых будем принимать запросы, снаружи этот сервер видно не будет:
Listen 127.0.0.1:8080
Имя хоста и порт для определения самого себя:
ServerName 127.0.0.1:8080
Адрес электронной почты который отправляется клиенту в случае ошибок:
ServerAdmin root@localhost
Отключаем отправку информации версии системы и сервера Apache:
ServerSignature Off
Отключаем отправку клиенту в заголовке информацию о Apache:
ServerTokens Prod
Ограничиваем использование памяти 750 мегабайтами:
RLimitMEM 786432000
Максимальное время приёма запроса, обработки, отправки контента серверу Nginx:
TimeOut 250
Устанавливаем кодировку:
AddDefaultCharset utf-8
Задаём язык содержимого:
DefaultLanguage ru
Отключаем обработку большого количества запросов в одном соединении:
KeepAlive Off
Выключить генерацию Content-MD5 заголовков HTTP:
ContentDigest Off
Apache статику отдавать не будет, поэтому отключаем:
EnableSendfile off
Записываем ошибки Apache по указанному пути /etc/httpd/logs/error_log:
ErrorLog "logs/error_log"
Указываем c какого уровня записывать ошибки:
LogLevel error
Подключить mimetypes:
<IfModule mime_module>
TypesConfig /etc/mime.types
</IfModule>
Секция Directory:
<Directory />
...
</Directory>
Внутри блока Directory, в случае указания пути до каталога, по умолчанию отдавать index.php::
DirectoryIndex index.php
Внутри блока Directory, запретить переопределение информации доступа в .htaccess:
AllowOverride none
Внутри блока Directory, запретить доступ к файлам сервера:
Require all denied
Секция mpm_prefork_module:
<IfModule mpm_prefork_module>
...
</IfModule>
Внутри блока mpm_prefork_module, после запуска Apache создать 5 процессов:
StartServers 5
Внутри блока mpm_prefork_module, минимальное количество неиспользуемых процессов (если все процессы будут заняты, то запустятся новые свободные процессы):
MinSpareServers 5
Внутри блока mpm_prefork_module, максимальное количество неиспользуемых (запасных) процессов:
MaxSpareServers 10
Внутри блока mpm_prefork_module, максимальное количество дочерних процессов которые можно запустить одновременно, остальные встают в очередь (с увеличением дочерних процессов, увеличивается потребление памяти):
MaxClients 30
Внутри блока mpm_prefork_module, после указанного числа обработанных запросов, процесс перезапускается (необходимо при переполнении — утечки памяти):
MaxRequestsPerChild 2500
Закрываем доступ к .htaccess:
<Files ".ht*">
Require all denied
</Files>
Подгружаем конфигурационные файлы:
IncludeOptional sites-enabled/*.conf
Для каждого сайта создаём виртуальный хост Apache.
Добавляем пользователя apache в группу каждого сайта:
[root@test ~]# usermod -a -G name.site apache
Создаём каталог под конфигурационные файлы виртуальных хостов Apache:
[root@test ~]# mkdir /etc/httpd/sites-enabled
Создаём конфигурационный файл:
[root@test ~]# touch /etc/httpd/sites-enabled/name.site.conf
Открываем файл:
[root@test ~]# nano /etc/httpd/sites-enabled/name.site.conf
Редактируем и сохраняем:
/etc/httpd/sites-enabled/name.site.conf
<VirtualHost *:8080>
ServerName name.site
ServerAlias www.name.siteDocumentRoot /website/name.site/www
<Directory "/website/name.site">
AllowOverride None
Require all granted
</Directory>DirectoryIndex index.php
ErrorLog /website/name.site/logs/error.log
CustomLog /website/name.site/logs/requests.log combined
</VirtualHost>
Блок VirtualHost, указывается какой порт слушать:
<VirtualHost *:8080>
...
</VirtualHost>
Имя домена:
ServerName name.site
Зеркало домена:
ServerAlias www.name.site
Каталог где будут храниться файлы этого сайта:
DocumentRoot /website/name.site/www
Открыть доступ к файлам сайта:
Require all granted
Если путь указан до каталога, по умолчанию открывать:
DirectoryIndex index.php
Путь к журналу ошибок Apache конкретного сайта:
ErrorLog /website/name.site/logs/error.log
Путь к журналу доступа:
CustomLog /website/name.site/logs/requests.log combined
Проверка Nginx и Apache.
Добавляем Apache в автозагрузку:
[root@test ~]# systemctl enable httpd.service
Создаём, редактируем и сохраняем файл:
[root@test ~]# touch /website/name.site/www/index.php
[root@test ~]# nano /website/name.site/www/index.php
Копируем конфиг php:
[root@test ~]# cp /etc/httpd/conf.d/php.conf /etc/httpd/sites-enabled/php.conf
Запускаем Nginx и Apache:
[root@test ~]# systemctl start nginx.service
[root@test ~]# systemctl start httpd.service
Настраиваем PHP.
Открываем php.ini:
[root@test ~]# nano /etc/php.ini
Редактируем и сохраняем:
/etc/php.ini
engine = On
expose_php = Off
short_open_tag = Off
zlib.output_compression = Off
disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source, etcdisplay_startup_errors = Off
display_errors = Off
log_errors = On
error_log = "/usr/local/zend/var/log/php.log"
ignore_repeated_errors = Off
ignore_repeated_source = Off
html_errors = Onimplicit_flush = Off
output_buffering = 4K
realpath_cache_size = 2M
realpath_cache_ttl = 1800
zend.enable_gc = Onmax_input_time = 200
max_execution_time = 30
file_uploads = Onmemory_limit = 256M
post_max_size = 8M
upload_max_filesize = 2M
max_file_uploads = 4extension_dir = "/usr/local/zend/lib/php_extensions"
date.timezone = Europe/Moscow
default_mimetype = "text/html"
default_charset = "UTF-8"variables_order = "CGPS"
register_argc_argv = Off
auto_globals_jit = On
enable_dl = Offallow_url_fopen = On
allow_url_include = Off
Включаем интерпретатор PHP, по необходимости можно выключить на конкретном сайте:
engine = On
Отключаем заголовки отправляемые клиенту о PHP:
expose_php = Off
Отключаем короткую запись тегов PHP … ?>:
short_open_tag = Off
Выключаем сжатие страниц:
zlib.output_compression = Off
Отключаем опасные функции:
disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source, etc
Не выводить на экран ошибки возникшии во время старта PHP:
display_startup_errors = Off
Не показывать ошибки:
display_errors = Off
Логируем ошибки, после выключения их вывода на экран:
log_errors = On
Файл в который будут записываться ошибки:
error_log = "/usr/local/zend/var/log/php.log"
Не записывать одинаковые ошибки, которые проиcходят в конкретном файле и строке (ignore_repeated_source — нужно выключить):
ignore_repeated_errors = Off
При включении не записывает одинаковые ошибки, которые могут происходить в разных файлах и строках, поэтому выключаем:
ignore_repeated_source = Off
Выключить HTML теги при просмотре сообщений об ошибках:
html_errors = On
Складываем данные в буфер:
implicit_flush = Off
Буферизация вывода для всех файлов, максимальное количество:
output_buffering = 4K
Используем кэш realpath, тем самым уменьшая количество вызовов stat():
realpath_cache_size = 2M
Установим время хранения кэша 30 минут:
realpath_cache_ttl = 1800
Включаем сборщик циклических ссылок:
zend.enable_gc = On
Указываем максимальное время в течении которого будут приниматься данные на сервер (POST, GET, HEAD), время измеряется с запуска PHP до момента выполнения скрипта:
max_input_time = 200
Указываем максимальное время выполнения скрипта (значение не больше чем в Apache — Timeout) — вместо set_time_limit:
max_execution_time = 30
Разрешить загрузку файлов на сервер:
file_uploads = On
Максимальный размер памяти, который можно использовать скрипту:
memory_limit = 256M
Максимальный размер данных, отправляемых методом POST (должно быть меньше — memory_limit):
post_max_size = 8M
Максимальный размер закачиваемого файла (должно быть меньше — post_max_size):
upload_max_filesize = 2M
Количество файлов, которые можно передать за один запрос:
max_file_uploads = 4
Путь до каталога с модулями расширения:
extension_dir = "/usr/local/zend/lib/php_extensions"
Устанавливаем временную зону:
date.timezone = Europe/Moscow
Тип данных:
default_mimetype = "text/html"
Устанавливаем кодировку UTF-8:
default_charset = "UTF-8"
Порядок обработки переменных — $_COOKIE, $_GET, $_POST, $_SERVER:
variables_order = "CGPS"
Не объявлять переменные argv и argc:
register_argc_argv = Off
Переменные SERVER и ENV будут создаваться в момент использования, что приводит к увеличению производительности:
auto_globals_jit = On
Выключаем динамическую подгрузку, влияет на безопасность:
enable_dl = Off
Разрешаем работу с внешними файлами по URL:
allow_url_fopen = On
Отключаем использование внешних файлов:
allow_url_include = Off
Устанавливаем и настраиваем MySQL.
Отрываем my.cnf:
[root@test ~]# nano /etc/mysql/my.cnf
Количество параллельных процессов, обрабатывающих конкурентные запросы к MySQL (количество ядер умноженных на два):
thread_concurrency = 4
Устанавливаем кодировку по умолчанию для новых таблиц:
default-character-set = utf8
Будем использовать таблицы InnoDB:
default-storage-engine = InnoDB
Устанавливаем размер буфера индексов таблиц в оперативной памяти (актуально для таблиц MyISAM):
key_buffer_size = 5M
Буфер данных и индексов таблиц — InnoDB:
innodb_buffer_pool_size = 300M
Максимальный размер оперативной памяти, выделяемой для временных таблиц, создаваемых MySQL:
tmp_table_size = 50M
Максимальное количество открытых таблиц, которые будут находиться в кэше:
table_open_cache = 64
Буфер данных, который используется для записи информации на диск — InnoDB:
innodb_log_buffer_size = 0M
Отключаем кэширование запросов:
query_cache_size = 0
Размер буфера который используется для сортировки (ORDER BY) или группировки GROUP BY) данных в каждом потоке:
sort_buffer_size = 512K
Выделяем для каждого потока память на каждую таблицу, при увеличении этого значения может пострадать скорость выполнения запроса:
read_buffer_size = 512K
Влияет на скорость сортировки, для запросов с — ORDER BY:
read_rnd_buffer_size = 1M
Размер буфера с использованием JOIN, если не используются индексы в этих запросах:
join_buffer_size = 2M
Размер стека, место для хранения списка задач (открыть или закрыть таблицу, выполнить запрос и т.п.):
thread_stack = 1M
Выделяем память для буфера соединения и его результатов, может быть увеличено до max_allowed_packet:
net_buffer_length = 30K
Максимальный размер данных, которые можно передать за один запрос:
max_allowed_packet = 5M
Максимальное количество одновременных соединений:
max_connections = 75
Количество соединений, которые могут стоять в очереди:
back_log = 250
Слушать только localhost:
bind-address = 127.0.0.1
Не использовать TCP/IP соединения, передавать данные через сокет:
skip-networking
Чтобы рассчитать примерное потребление оперативной памяти на сервере MySQL (насколько я понял) можно воспользоваться следующей формулой (не забывайте, что серверу Apache уже выделено 750 МБ и ещё нужно оставить серверу Nginx):
key_buffer_size + innodb_buffer_pool_size + tmp_table_size + ((sort_buffer_size + read_buffer_size + read_rnd_buffer_size + join_buffer_size + thread_stack) × max_connections) = ?
Немного про безопасность.
Под root заходить нежелательно, поэтому создаём нового пользователя:
[root@test ~]# adduser newuser
Задаём пароль пользователю — newuser:
[root@test ~]# passwd newuser
Устанавливаем пакет sudo:
[root@test ~]# yum install sudo
Заносим нового пользователя в sudo:
[root@test ~]# gpasswd -a newuser wheel
Если вы подключаетесь к SSH через 22 порт, то нужно его изменить, открываем sshd_config:
[root@test ~]# nano /etc/ssh/sshd_config
Меняем порт на любой свободный (не забываем через установленный у вас firewall закрыть 22 порт и открыть новый, например 54139):
Port 54139
Запрещаем попытку входа с пустым паролем:
PermitEmptyPasswords no
Запретим вход в терминал root:
PermitRootLogin no
Разрешим логиниться в терминале только новому пользователю —
newuser:
AllowUsers newuser
Перезагружаем ssh:
[root@test ~]# service sshd restart
P.S. Можно использовать Nginx с php-fpm, но есть такое мнение, что при правильно настроенном Apache особой разницы в производительности не наблюдается.
Особое внимание хотелось обратить на безопасность и производительность сервера, поэтому если вы нашли ошибки или недочёты, просим написать это в комментариях и в случае необходимости мы внесём изменения в статью.
Безопасный Apache с Let’s Encrypt на CentOS 7
Let’s Encrypt – бесплатный, автоматизированный и открытый центр сертификации, разработанный Исследовательской группой Internet Security Research Group (ISRG). Сертификаты, выданные Let’s Encrypt, действительны в течение 90 дней с даты выпуска, и сегодня им доверяют почти все браузеры.
В этой статье мы рассмотрим шаги, необходимые для установки бесплатного SSL-сертификата для шифрования SSL на сервере CentOS 7 с Apache в качестве веб-сервера. Мы будем использовать утилиту certbot для получения и обновления сертификатов Let’s Encrypt.
Предпосылки
Перед продолжением этой статьи, убедитесь, что вы выполнили следующие предварительные условия:
- Укажите имя домена, указывающий на ваш IP-адрес общего сервера. В этой статье мы будем использовать домен
andreyex.ru
. - Установленный Apache и запущен на сервере.
- Виртуальный хост Apache для своего домена.
- Открытые порты 80 и 443 в своем брандмауэре.
Установите следующие пакеты, которые необходимы для SSL-зашифрованного веб-сервера:
yum install mod_ssl openssl
Установка Certbot
Certbot – это инструмент, упрощающий процесс получения SSL-сертификатов от Let’s Encrypt и автоматического включения HTTPS на вашем сервере.
Пакет certbot предоставляется EPEL. Если репозиторий EPEL не установлен в вашей системе, вы можете установить его, используя следующую команду:
sudo yum install epel-release
После того, как репозиторий EPEL включен, установите пакет certbot, введя:
sudo yum install certbot
Создание Dh (Диффи-Хеллман)
Обмен ключами Diffie-Hellman (DH) – это метод безопасного обмена криптографическими ключами по необеспеченному каналу связи. Создайте новый набор параметров 2048 бит DH для усиления безопасности:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Вы можете изменить размер до 4096 бит, но в этом случае генерация может занять более 30 минут в зависимости от энтропии системы.
Получение сертификата SSL для шифрования
Чтобы получить сертификат SSL для нашего домена, мы собираемся использовать плагин Apache, который работает, создавая временный файл для запрашиваемого домена в каталоге,${webroot-path}/.well-known/acme-challenge
, а сервер проверки подлинности Let’s Encrypt делает HTTP-запросы для проверки DNS для запрашиваемого домена разрешение на сервер, на котором выполняется certbot.
Чтобы сделать его более простым, мы собираем все HTTP-запросы для .well-known/acme-challenge
в одном каталоге /var/lib/letsencrypt
. Следующие команды создадут каталог и сделают его доступным для записи на сервере Apache.
Следующие команды создадут каталог и сделают его доступным для записи на сервере Apache.
mkdir -p /var/lib/letsencrypt/.well-known chgrp apache /var/lib/letsencrypt chmod g+s /var/lib/letsencrypt
Чтобы избежать дублирования кода, создайте следующие два фрагмента конфигурации:
/etc/httpd/conf.d/letsencrypt.conf
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/" <Directory "/var/lib/letsencrypt/"> AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS </Directory>
/etc/httpd/conf.d/ssl-params.conf
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLHonorCipherOrder On Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff # Требует Apache >= 2.4 SSLCompression off SSLUseStapling on SSLStaplingCache "shmcb:logs/stapling-cache(150000)" # Требует Apache >= 2.4.11 SSLSessionTickets Off
В приведенном выше фрагменте используются чипперы, рекомендованные Cipherli.st, позволяющие сшивание OCSP, строгая транспортная безопасность HTTP (HSTS) и использование нескольких HTTP-заголовков, ориентированных на безопасность.
Перезагрузите конфигурацию Apache, чтобы изменения вступили в силу:
sudo systemctl reload httpd
Теперь мы можем запустить средство Certbot с помощью плагина webroot и получить файлы SSL сертификатов, набрав:
sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d andreyex.ru -d www.andreyex.ru
Если сертификат SSL будет успешно получен, certbot напечатает следующее сообщение:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/andreyex.ru/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/andreyex.ru/privkey.pem Your cert will expire on 2018-12-07. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
CentOS 7 поставляется с Apache версии 2.4.6, которая не включает директиву SSLOpenSSLConfCmd
. Эта директива доступна только на Apache позже 2.4.8 и используется для настройки параметров OpenSSL, таких как обмен ключами Diffie-Hellman (DH).
Нам нужно будет создать новый комбинированный файл, используя SSL-сертификат Let’s Encrypt и созданный файл DH. Для этого введите:
cat /etc/letsencrypt/live/andreyex.ru/cert.pem /etc/ssl/certs/dhparam.pem >/etc/letsencrypt/live/andreyex.ru/cert.dh.pem
Теперь, когда все настроено, отредактируйте конфигурацию виртуального хоста домена следующим образом:
/etc/httpd/conf.d/andreyex.ru.conf
<VirtualHost *:80> ServerName andreyex.ru ServerAlias www.andreyex.ru Redirect permanent / https://andreyex.ru/ </VirtualHost> <VirtualHost *:443> ServerName andreyex.ru ServerAlias www.andreyex.ru <If "%{HTTP_HOST} == 'www.andreyex.ru'"> Redirect permanent / https://andreyex.ru/ </If> DocumentRoot /var/www/andreyex.ru/public_html ErrorLog /var/log/httpd/andreyex.ru-error.log CustomLog /var/log/httpd/andreyex.ru-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/andreyex.ru/cert.dh.pem SSLCertificateKeyFile /etc/letsencrypt/live/andreyex.ru/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/andreyex.ru/chain.pem # Остальные конфигурации Apache </VirtualHost>
С приведенной выше конфигурацией мы устанавливаем HTTPS и перенаправляем с www на не-www-версию. Не стесняйтесь настраивать конфигурацию в соответствии с вашими потребностями.
Перезапустите службу Apache, чтобы изменения вступили в силу:
sudo systemctl restart httpd
Теперь вы можете открыть свой веб-сайт, https://
и вы заметите значок зеленого замка.
Если вы протестируете свой домен с помощью теста SSL Labs Server, вы получите оценку A +, как показано ниже:
Автоматическое обновление Шифрование SSL-сертификата
Сертификаты Encrypt действительны в течение 90 дней. Чтобы автоматически продлить срок действия сертификатов до истечения срока их действия, мы создадим cronjob, который будет работать два раза в день и автоматически обновит сертификат за 30 дней до истечения срока его действия.
Запустите команду crontab
для создания нового cronjob, который обновит сертификат, создаст новый комбинированный файл, включая ключ DH, и перезапустит apache:
sudo crontab -e
0 */12 * * * certbot renew --cert-name andreyex.ru --renew-hook "cat /etc/letsencrypt/live/andreyex.ru/cert.pem /etc/ssl/certs/dhparam.pem >/etc/letsencrypt/live/andreyex.ru/cert.dh.pem && systemctl restart httpd"
Чтобы протестировать процесс обновления, вы можете использовать переключатель --dry-run
в certbot:
sudo certbot renew --cert-name andreyex.ru --dry-run
Если ошибок нет, это означает, что процесс обновления был успешным.
Вывод
В этой статье вы использовали клиент Let’s Encrypt, certbot для загрузки сертификатов SSL для вашего домена. Вы также создали фрагменты Apache, чтобы избежать дублирования кода и настроите Apache для использования сертификатов. В конце статьи вы создали cronjob для автоматического обновления сертификата.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
установка Apache HTTP + NGINX
Предполагается, что Apache HTTP уже установлен, согласно статье CentOS: установка Apache HTTP + suEXEC + mod_fcgid.
Установка выполняется на:
# uname -r; cat /etc/redhat-release 2.6.32-431.20.3.el6.x86_64 CentOS release 6.5 (Final)
Для установки NGINX подключим его родной репозиторий:
# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm Retrieving http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm warning: /var/tmp/rpm-tmp.K7nOMw: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY Preparing... ########################################### [100%] 1:nginx-release-centos ########################################### [100%]
Проверяем:
# yum repolist | grep nginx nginx nginx repo 56
Устанавливаем NGINX:
# yum -y install nginx --enablerepo="nginx"
Проверяем:
# yum list installed | grep nginx nginx.x86_64 1.6.0-1.el6.ngx @nginx nginx-release-centos.noarch
Редактируем файл /etc/nginx/nginx.conf
, устанавливаем:
user nginx; # пользователь, под которым будет работать nginx; worker_processes 1; # кол-во процессов nginx, по кол-ву ядер/процессоров; pid /var/run/nginx.pid; events { worker_connections 1024; # макс. кол-во одновременно обслуживаемых соединений, считается макс. клиентов = worker_processes * worker_connections } 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; error_log /var/log/nginx/error.log; # немного тюнинга sendfile on; tcp_nopush on; server_tokens off; keepalive_timeout 65; # сжатие некоторых данных перед отправкой gzip on; gzip_static on; gzip_comp_level 5; gzip_min_length 1024; # ограничиваем кол-во подключений с одного IP ко всем сайтам; # что бы установить различные ограничения для каждого отдельного виртуалхоста - перенесите limit_conn perip в блок server каждого конфига; limit_zone myzone $binary_remote_addr 2m; limit_conn perip 5; # для Apache proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # подключем директорию для файлов конфигурации виртуалхостов include /etc/nginx/conf.d/*.conf; # описываем сервер по-умолчанию server { listen 80 default; location ~ /.ht { deny all; } location / { proxy_pass http://127.0.0.1:8080; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } }
Убираем ненужный теперь конфиг сервера по-умолчанию:
# mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bkp
Проверяем синтаксис:
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Редактируем /etc/httpd/conf/httpd.conf
, меняем:
Listen 80
На:
Listen 127.0.0.1:8080
Редактируем файл виртуалхоста /etc/httpd/conf.d/setevoy.org.ua.conf
, меняем:
<VirtualHost 77.***.***.20:80>
на:
<VirtualHost 127.0.0.1:8080>
Проверяем конфиг:
# httpd -t Syntax OK
Создаём файл конфигу виртуалхоста для NGINX — /etc/nginx/conf.d/setevoy.org.ua.conf
:
server { listen 80; server_name setevoy.org.ua wwww.setevoy.org.ua; location ~ /.ht { deny all; } location ~* .(jpg|swf|jpeg|gif|png|css|js|ico)$ { root /var/www/vhosts/setevoy.org.ua; } location / { proxy_pass http://127.0.0.1:8080; } }
Ещё раз проверяем:
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Останавливаем Apache:
# service httpd stop Stopping httpd: [ OK ]
И запускаем NGINX:
# service nginx start Starting nginx: [ OK ]
Запускаем Apache:
# service httpd start Starting httpd: [ OK ]
Проверяем порты:
# netstat -anp | grep -E "nginx|httpd" tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 4597/httpd tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4584/nginx
И отдельно — установим mod_rpaf
, что бы в логе Apache отображались корректные IP, а не 127.0.0.1:
127.0.0.1 - - [06/Jul/2014:19:48:26 +0300] "GET / HTTP/1.0" 200 16781 "http://setevoy.org.ua/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
Во многих (да почти всех) мануалах говорится про репозиторий CentALT, который сейчас отдаёт 403 при любом запросе. Потому — установим вручную.
Ставим набор утилит http-devel
и компилятор gcc
:
# yum -y install httpd-devel gcc
Переходим в директорию src
:
# cd /usr/local/src
Качаем архив и устанавливаем mod_rpaf
:
# wget http://drupion.com/sites/default/files/mod_rpaf-0.6.tar_.gz # tar zxvf mod_rpaf-0.6.tar_.gz # cd mod_rpaf-0.6 # apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
Ждём появления:
Libraries have been installed in: /usr/lib64/httpd/modules
Всё установилось.
Создаём файл /etc/httpd/conf.d/mod_rpaf.conf
с таким содержимым:
LoadModule rpaf_module modules/mod_rpaf-2.0.so # mod_rpaf configuration RPAFenable On RPAFsethostname On RPAFproxy_ips 127.0.0.1 RPAFheader X-Forwarded-For
Перезапускаем Apache:
# service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ]
И проверяем логи:
37.***.***.56 - - [06/Jul/2014:19:49:10 +0300] "GET / HTTP/1.0" 200 16781 "http://setevoy.org.ua/wp-admin/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
Ссылки по теме
http://nginx.org
http://itblog.by
http://www.theadmin.ru
Как установить Apache на CentOS 7 {Быстрый старт}
Apache — это приложение Linux для запуска веб-серверов. Это часть стека LAMP — пакета приложений, которые составляют основу большинства веб-технологий. LAMP означает Linux, Apache, MyPHP и PHP.
Это руководство покажет вам , как установить и настроить веб-сервер Apache на CentOS 7.
- Учетная запись пользователя с привилегиями sudo
- Доступ к терминалу командной строки (меню> приложение> утилиты> терминал)
- Менеджер пакетов yum , установлен по умолчанию
Установка Apache на CentOS
Шаг 1. Обновление списка версий программного обеспечения
Убедитесь, что вы используете последние версии программного обеспечения.В окне терминала введите команду:
обновление sudo yum
Система должна обратиться к репозиториям программного обеспечения и обновить список до последних версий.
Чтобы установить Apache на ваш сервер CentOS, используйте следующую команду:
sudo yum установить httpd
Система должна загрузить и установить пакеты программного обеспечения Apache.
Чтобы активировать Apache, сначала запустите его службу.
1. Введите следующую команду в окне терминала:
sudo systemctl start httpd
Это запустит службу Apache.
2. Затем установите запуск службы Apache при загрузке системы:
sudo systemctl включить httpd
Шаг 4. Проверьте службу Apache.
Выведите на экран информацию об Apache и убедитесь, что он в настоящее время работает, с помощью:
sudo systemctl статус httpd
Шаг 5: Настройте firewalld для разрешения трафика Apache
В стандартной установке CentOS 7 настроен на предотвращение трафика на Apache.
Обычный веб-трафик использует протокол http на порту 80, в то время как зашифрованный веб-трафик использует протокол https на порту 443.
1. Измените брандмауэр, чтобы разрешить соединения через эти порты, используя следующие команды:
sudo firewall-cmd ––permanent ––add-port = 80 / tcp
sudo firewall-cmd ––permanent ––add-port = 443 / tcp
2. После успешного завершения перезагрузите брандмауэр, чтобы применить изменения, с помощью команды:
sudo firewall-cmd –– перезагрузить
Шаг 6. Настройка виртуальных хостов в CentOS 7 (необязательно)
Виртуальные хосты — это разные веб-сайты, которые вы запускаете с одного сервера.Каждому веб-сайту нужен собственный файл конфигурации.
Убедитесь, что эти файлы конфигурации используют расширение .conf , и сохраните их в каталоге /etc/httpd/conf.d/ .
Есть несколько рекомендаций, которые можно использовать при настройке разных веб-сайтов на одном сервере:
- Постарайтесь использовать одно и то же соглашение об именах для всех своих веб-сайтов. Например:
- /etc/httpd/conf.d/MyWebsite.com.conf
- / etc / httpd / conf.d / TestWebsite.com.conf
- Используйте разные файлы конфигурации для каждого домена. Файл конфигурации для виртуального хоста называется vhost . Вы можете использовать столько, сколько вам нужно. Их разделение упрощает устранение неполадок.
1. Чтобы создать файл конфигурации виртуального хоста, введите в окно терминала следующее:
Судо vi /etc/httpd/conf.d/vhost.conf
Это запустит текстовый редактор Vi и создаст новый виртуальный хост .conf в каталоге /etc/httpd/conf.d .
2. В редакторе введите следующий текст:
ИмяVirtualHost *: 80
ServerAdmin [email protected]
Имя сервера MyWebsite.com
ServerAlias www.MyWebsite.com
DocumentRoot /var/www/html/MyWebsite.com/public_html/
ErrorLog /var/www/html/MyWebsite.com/logs/error.log
CustomLog /var/www/html/MyWebsite.com/logs/access.журнал комбинированный
Сохраните файл и выйдите.
3. Затем введите следующую команду, чтобы создать каталог для хранения файлов вашего веб-сайта:
sudo mkdir / var / www / MyWebsite / {public_html, logs}
4. Перезапустите службу Apache, чтобы изменения вступили в силу, введя:
sudo systemctl перезапуск httpd
После завершения работы системы вы сможете открыть окно браузера на MyWebsite.com и увидите тестовую страницу Apache по умолчанию.
Вы можете заменить MyWebsite выше на имя своего домена. Если вы размещаете более одного домена, убедитесь, что вы создали новый каталог в / var / www / для каждого из них. Вы можете скопировать блок кода в файл /etc/httpd/conf.d/vhost.conf и заменить MyWebsite другим доменным именем, которое вы размещаете.
Каталоги и файлы Apache
Один из основных способов функционирования Apache — это файлы конфигурации.Они расположены по адресу / etc / httpd.
Apache имеет основной файл конфигурации: /etc/httpd/conf/httpd.conf .
Если есть другие файлы конфигурации, они включаются в основной файл конфигурации. Они должны использовать расширение .conf и должны храниться в каталоге /etc/httpd/conf.d/ .
Вы можете расширить функциональность Apache, загрузив дополнительные модули.
Файлы конфигурации для этих модулей должны храниться в: / etc / httpd / conf.Каталог modules.d / .
Файлы журнала регистрируют всю активность службы Apache, включая действия клиентов на веб-сайтах, которые размещает ваша система. Эти журналы можно найти в: / var / log / httpd / .
Команды для управления службой Apache
Другие команды, которые можно использовать для управления службой Apache, включают:
Остановить службу Apache:
sudo systemctl остановить httpd
Запретить или отключить запуск Apache при загрузке системы:
sudo systemctl отключить httpd
Повторно включить Apache при загрузке:
sudo systemctl включить httpd
Перезапустите Apache и примените все сделанные вами изменения:
sudo systemctl перезапуск httpd
Отличная работа, вы установили Apache на свой сервер CentOS 7.Базовая установка и управление службой Apache просты.
Готовы создать стек своего приложения? Прочтите наше руководство по установке MySQL на CentOS.
.
Как установить последнюю версию Apache HTTPD на CentOS
Привет! Сегодня я хотел бы показать вам, как установить и настроить Apache HTTPD на CentOS 7. Мне нравится, когда он устанавливается минимальным и безопасным способом. Осторожно! Это довольно длинное руководство, охватывающее множество аспектов от компиляции до конфигурации, SSL / HTTPS / HTTP2, базовой защиты и т. Д.
Как установить Apache HTTPD на CentOS с помощью yum — простой способ
Есть два способа установить Apache HTTPD на CentOS. Сначала с yum, и это самая простая версия:
sudo yum установить httpd -y
Воля! У вас установлен httpd.Однако, если вы проверите версию:
httpd -v
Скорее всего, вы получите версию 2.4.6
или чуть новее. Если вы посетите веб-сайт Apache, вы заметите, что у них доступна версия 2.4.33
. Итак, если вы хотите иметь доступ к последним функциям, таким как поддержка HTTP / 2 или последние исправления ошибок, вам придется попробовать более сложный метод, который компилирует Apache из исходников. Это может показаться сложным, но на самом деле это не так.
OpenSSL — у вас последняя версия?
Если вы хотите включить HTTP / 2 в Apache HTTPD, что я настоятельно рекомендую для повышения производительности, вам необходимо установить последнюю версию OpenSSL в вашей системе.Старая версия не поддерживает его, поэтому вам нужно скомпилировать новую версию из исходников. У меня есть отдельное руководство по установке последней версии OpenSSL — сначала убедитесь, что вы следуете ему, а затем вернитесь к этому руководству.
Сначала удалите старый HTTPD
Убедитесь, что у вас не установлен httpd. На некоторых машинах он устанавливается по умолчанию, или вы можете использовать более старую версию. Во избежание осложнений в дальнейшем советую сначала удалить его. Однако вы должны знать, что если у вас есть веб-сайты в сети, которые используют Apache, у них будет некоторое время простоя, прежде чем вы установите новый Apache.Выполните следующую команду, чтобы удалить текущий Apache httpd из вашей системы:
sudo yum удалить httpd -y
Установить EPEL
В EPEL есть много разных библиотек, но для компиляции Apache HTTPD с поддержкой HTTP / 2 нам нужна одна вещь, которую предоставляет EPEL — libnghttp2
Для установки репозитория EPEL выполните команду:
sudo yum install epel-release -y
Установить необходимые инструменты для компиляции
Вам необходимо установить некоторые инструменты, которые помогут нам скомпилировать Apache.Это базовые вещи, такие как компилятор, необходимые библиотеки и т. Д .:
sudo yum install autoconf expat-devel libtool libnghttp2-devel pcre-devel -y
Скачать и распаковать исходники
Следующее, что вам нужно, это пакеты с исходными файлами. Для компиляции Apache вам понадобятся 3 разных пакета — httpd
, apr
и apr-util
. Последние два — это библиотеки времени выполнения Apache. Они необходимы для Apache HTTPD.
Мне нравится загружать пакеты из выпусков GitHub.Вот ссылки на пакеты:
Щелкните значок tar.gz, скопируйте ссылку на пакет и загрузите их с помощью curl или wget. Или просто скопируйте команды ниже:
завиток -O -L https://github.com/apache/httpd/archive/2.4.33.tar.gz
curl -O -L https://github.com/apache/apr/archive/1.6.3.tar.gz
curl -O -L https://github.com/apache/apr-util/archive/1.6.1.tar.gz
Распаковать скачанные источники:
tar -zxvf 2.4.33.tar.gz
tar -zxvf 1.6.3.tar.gz
tar -zxvf 1.6.1.tar.gz
APR и APR-Util
Apache требует для компиляции библиотеки APR. Вам необходимо скопировать исходные коды в правильный каталог:
cp -r апр-1.6.3 httpd-2.4.33 / srclib / апр
cp -r апр-утилит-1.6.1 httpd-2.4.33 / srclib / апр-утилит
Важно, чтобы номер версии , а не был включен в каталоги APR. Если вы просто скопируете apr-1.6.3
без изменения имени, появится предупреждение об отсутствии каталога apr
.
Исходный код компиляции
Теперь вы готовы скомпилировать Apache httpd. Важно, что не должен использовать для компиляции пользователя root . Это может привести к серьезным проблемам с безопасностью. Я описал это больше в моем другом руководстве по установке GIT. Короче говоря, представьте, что вы загрузили пакет с вредоносным кодом из неправильного источника. Если вы скомпилируете его как пользователь root, с вашим сервером может случиться что угодно. В том числе вырезание вашего корневого доступа. Я не говорю, что компилировать пакеты с правами root невозможно, потому что это так.Это просто небезопасно. Если вы хотите создать отдельного пользователя с полномочиями sudo, вы можете прочитать это руководство.
Итак, войдите в каталог httpd и скомпилируйте свою версию Apache:
компакт-диск httpd-2.4.33
./buildconf
./configure --enable-ssl --enable-so --enable-http2 --with-mpm = event --with-included-apr --with-ssl = / usr / local / openssl --prefix = / usr / местный / apache2
сделать
Первая команда ./buildconf
создаст файл ./configure
, необходимый для настройки сборки.
./configure
команда настроит все для компиляции Apache HTTPD. Вот варианты, которые я использую:
-
--enable-ssl
будет создавать Apache с поддержкой SSL, поэтому вы можете включить HTTPS на своих веб-сайтах. -
--enable-so
включит динамически загружаемые модули. Таким образом, вы можете включать и отключать модули без перекомпиляции (я опишу модули в части конфигурации) -
--enable-http2
включит поддержку HTTP / 2. -
--with-mpm
установит многопроцессорные модули для Apache. Я используюevent
, но вместо этого вы можете использоватьworker
илиprefork
.event
лучше всего подходит для меня, и я думаю, что именно mpm даст вам наибольшую производительность. -
--with-included-apr
Он будет использовать библиотеку APR, которую вы скопировали в каталогsrclib
-
--with-ssl
укажет компилятору на более новую версию OpenSSL. Сначала убедитесь, что вы его скомпилировали! -
--prefix
— это путь установки для скомпилированного пакета Apache httpd
Весь процесс может занять некоторое время.Это зависит от скорости вашего сервера.
Установить HTTPD
После компиляции вы можете установить его. Для этого вам понадобится учетная запись sudo или root:
sudo make install
Apache должен быть установлен в каталоге, который вы указали с помощью опции —prefix.
Уборка
Последнее, что вы можете сделать сейчас, это удалить загруженные файлы. Теперь они тебе не понадобятся. Это не обязательно, но содержать сервер в чистоте приятно.
кд ..
rm -rf 1.6.3.tar.gz 1.6.1.tar.gz 2.4.33.tar.gz апр-1.6.3 апр-утилит-1.6.1 httpd-2.4.33
Добавить исполняемые файлы Apache в PATH
Если вы попытаетесь ввести httpd -v
в командной строке, это приведет к тому, что команда не найдена. Это потому, что httpd отсутствует на вашем $ PATH
. Я бы хотел, чтобы все исполняемые файлы Apache были доступны отовсюду. Для этого создайте файл
судо vi /etc/profile.d/httpd.sh
и вставьте туда следующее содержимое:
pathmunge / usr / local / apache2 / bin
Сохраните файл, выйдите из текущего сеанса и войдите в него, чтобы перезагрузить свой профиль.После этого вы сможете использовать команду httpd -v
🙂
Добавить запись в Systemd
Запуск, перезапуск и включение Apache при запуске сервера с помощью команды systemctl
— очень важная вещь. Вам нужно создать еще один файл:
судо vi /etc/systemd/system/httpd.service
и вставьте туда следующее содержимое:
[Единица]
Описание = HTTP-сервер Apache
После = network.target
[Обслуживание]
Тип = разветвление
ExecStart = / usr / local / apache2 / bin / apachectl -k start
ExecReload = / usr / local / apache2 / bin / apachectl -k изящный
ExecStop = / usr / local / apache2 / bin / apachectl -k изящная остановка
PIDFile = / usr / local / apache2 / журналы / httpd.пид
PrivateTmp = true
[Установить]
WantedBy = multi-user.target
Сохраните файл и перезагрузите демон systemctl
sudo systemctl демон-перезагрузка
Теперь вы можете попробовать запустить свой httpd-сервер Apache с помощью следующей команды:
sudo systemctl start httpd
Должен запуститься правильно. Если у вас будут какие-либо предупреждения, не беспокойтесь о них сейчас. Я покажу вам правильную конфигурацию на следующем шаге.
Когда он будет запущен, вы можете попробовать ввести IP-адрес своего сервера в браузере, например http: // 43.184.89.190 /
и проверьте, видите ли вы Это работает! Сообщение
🙂 Если это так, то у вас Apache httpd работает нормально!
Создание выделенного пользователя и группы для Apache
Обычно я создаю дополнительного пользователя и группу для httpd daemon. Это хорошая практика со стороны безопасности. Каждая служба должна работать как отдельный пользователь. Ограничивает возможные повреждения при атаках, эксплуатации httpd и т. Д.
Если вы хотите узнать больше о создании пользователей и групп, я рекомендую прочитать это руководство.Здесь я просто создам группу и пользователя без оболочки.
sudo groupadd www
sudo useradd httpd -g www --no-create-home --shell / sbin / nologin
Вы можете изменить имена по своему желанию. Например, мне нравится использовать группу www
вместо группы httpd
. Я обычно добавляю туда и другие сервисы, например nginx
или php-fpm
.
Отрегулируйте основной файл конфигурации httpd.conf
httpd.conf
— это главный файл конфигурации Apache httpd.Вы должны начать с редактирования этого файла в любом редакторе. Мне нравится использовать vi
, но вы можете использовать nano
и т. Д.:
судо vi /usr/local/apache2/conf/httpd.conf
Обычно я не удаляю какие-либо директивы конфигурации из этого файла. Если что-то нужно удалить, я закомментирую это #
в начале новой строки. Отменить изменения проще.
Теперь я пролистываю файл сверху вниз в поисках конкретных строк и проверяю, правильно ли они указаны.Если я не нахожу данную строку, я просто добавляю ее, как правило, в конец файла.
Вот важные значения:
# Убедитесь, что ServerRoot установлен на то же значение, что и --prefix во время ./configure
ServerRoot / usr / локальный / apache2
# Установите ServerName, чтобы предотвратить предупреждение при запуске Apache
ServerName localhost
# Порт по умолчанию установлен на 80 - протокол HTTP
Слушай 80
# Установить пользователя и группу
Пользователь httpd
Группа www
# Настроить входной файл для вашего приложения.Если вы планируете использовать PHP, убедитесь, что это первый возможный файл
DirectoryIndex index.php index.html
# Скрыть версию Apache из заголовка и из файлов ошибок
ServerTokens продукт
СерверПодпись выключена
# Отключить ETag, чтобы предотвратить удаление чувствительных значений, таких как iNode
FileETag нет
Сохраните файл. После каждого изменения файла конфигурации необходимо перезапускать HTTPD, чтобы изменения вступили в силу. Для этого выполните следующую команду:
sudo systemctl перезапуск httpd
После перезапуска убедитесь, что Apache работает нормально!
Настроить загруженные модули
Во время компиляции мы устанавливаем --enable-so
modules, что означает, что мы можем отключать и включать модули в файлах конфигурации.
Список модулей довольно длинный. Некоторые из них отключены (у них в начале строки стоит #
). Вы должны знать, что чем больше модулей включено, тем медленнее будет Apache httpd. Я не говорю, что он очень медленный, но вы можете найти в Google несколько тестов, показывающих разные конфигурации.
Вот что я люблю делать. В первую очередь закомментирую все модули = все отключено. Я включаю только те модули, которые я действительно использую + модули, которые необходимы для правильной работы Apache httpd.У него мало преимуществ — Apache быстрее, потребляет меньше ресурсов (ЦП и ОЗУ) и более устойчив к данным атакам. Обычно, когда появляется новая проблема безопасности, она скорее связана с одним из модулей, чем со всем httpd. Таким образом, у вас будет больше шансов избежать потенциальной угрозы безопасности, если некоторые функции отключены.
Так что отредактируйте главный файл конфигурации еще раз:
судо vi /usr/local/apache2/conf/httpd.conf
И установите модули, которые вы используете. Вот мой список включенных модулей:
# Эти модули должны быть включены, если вы хотите, чтобы Apache запускался
LoadModule модули authz_core_module / mod_authz_core.так
LoadModule модули mime_module / mod_mime.so
LoadModule log_config_module modules / mod_log_config.so
LoadModule модули unixd_module / mod_unixd.so
LoadModule модули dir_module / mod_dir.so
# Если вы используете PHP с PHP-FPM, я настоятельно рекомендую включить прокси-модули
LoadModule модули proxy_module / mod_proxy.so
LoadModule модули proxy_fcgi_module / mod_proxy_fcgi.so
# Включите красивые ссылки и mod_rewrite, который широко используется во всех фреймворках и CMS
LoadModule rewrite_module modules / mod_rewrite.так
# Полезно для сайтов WordPress - включает требование для настройки доступа к данным ресурсам.
LoadModule access_compat_module modules / mod_access_compat.so
# Еще одна полезная вещь для WordPress и Let's Encrypt - включение Alias. Если вы используете composer и wpackagist, это обязательно, в противном случае, если вы не планируете использовать псевдонимы, оставьте это отключенным
LoadModule модули alias_module / mod_alias.so
# Включить расширение gzip для сжатия статических файлов
LoadModule deflate_module модули / mod_deflate.так
LoadModule filter_module modules / mod_filter.so
# Включить заголовок expires для кеширования ресурсов на стороне браузера
LoadModule модули expires_module / mod_expires.so
# Включить SSL
LoadModule http2_module модули / mod_http2.so
LoadModule модули socache_shmcb_module / mod_socache_shmcb.so
LoadModule модули ssl_module / mod_ssl.so
# Включить модуль состояния для мониторинга Apache. Если вы не планируете использовать это, оставьте это закомментированным
LoadModule authz_host_module modules / mod_authz_host.так
LoadModule status_module модули / mod_status.so
Сохраните изменения и перезапустите Apache. Убедитесь, что после изменений он работает!
Настроить MPM
Настройка модулей мультиобработки состоит из двух частей. Сначала я переопределяю конфигурацию Apache по умолчанию для режима событий, который я выбрал во время компиляции. В этом случае вы будете знать, что на самом деле настроено. Итак, начнем с этого в первую очередь.
Внизу httpd.conf
нужно раскомментировать строку:
Включите conf / extra / httpd-mpm.conf
Он включит расширенную конфигурацию Apache httpd MPM и переопределит настройки по умолчанию.
Теперь отредактируйте разрешенный файл:
судо vi /usr/local/apache2/conf/extra/httpd-mpm.conf
Этот файл содержит конфигурацию всех MPM. Есть конфигурация для каждого модуля MPM, поэтому убедитесь, что вы устанавливаете правильные значения. Я включил режим событий
, поэтому мне важен этот раздел:
StartServers 5
MinSpareThreads 75
MaxSpareThreads 250
Темы для ребенка 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
Сохраните файл и перезапустите Apache.Это была самая простая часть настройки MPM.
Настоящая часть настройки MPM выполняется позже, когда вы запускаете свой рабочий веб-сайт. Когда вы чувствуете, что ваш веб-сайт / приложение начинает испытывать недостаток трафика, вы можете начать экспериментировать с этими значениями.
Важный момент, который вам нужно знать — не существует одного конфига , который бы правил всеми . Я хочу сказать, что одна конфигурация, которая хорошо работает на одном сервере, может работать не так хорошо, как на втором сервере.Существуют десятки факторов, таких как специфика приложения, ЦП и ОЗУ, трафик и т. Д. Я рекомендую вам поиграть с этими значениями, чтобы найти оптимальные настройки для вашего сервера.
Вот отличный пост, в котором подробно объясняется конфигурация MPM. У меня есть два совета по настройке производительности.
Во-первых, вам, вероятно, даже не нужно ничего менять, если у вас обычный веб-сайт без большого количества трафика. Просто хорошо знать, какие настройки применяются в конфигурации mpm.Когда файл httpd-mpm.conf
был закомментирован, вы не имели ни малейшего представления о настройках. Как только он включен, вы, по крайней мере, знаете, что настроено.
Второй совет — делайте это медленно. Настройка производительности — длительный процесс, и, как я уже сказал, он сильно зависит от различных факторов. Мне нравится изменять одни настройки, например, StartServers
, и я жду день или два и отслеживаю время отклика, использование ЦП и ОЗУ и т. Д. Иногда, даже если вы увеличите что-то, вы не увидите разницы во времени ответа, но вы увидите получить более высокую загрузку процессора.Тогда вы просто можете откатить изменения. Если вы изменяете 3 или 4 значения одновременно, трудно сказать, какое из них даст лучший (или какой-либо) результат.
Настройка сжатия GZIP
Использование сжатия GZIP серьезно влияет на производительность и время загрузки вашего сайта. Давайте включим его за несколько простых шагов. Чтобы использовать его, убедитесь, что mod_deflate
и mod_filter
включены.
Сначала создайте новый файл, который будет содержать настройки GZIP для Apache:
судо vi / usr / local / apache2 / conf / extra / httpd-deflate.conf
Вставьте туда следующее содержимое и сохраните файл:
AddOutputFilterByType DEFLATE application / ecmascript
AddOutputFilterByType DEFLATE application / javascript
AddOutputFilterByType DEFLATE application / rss + xml
AddOutputFilterByType DEFLATE application / xml
AddOutputFilterByType DEFLATE application / x-javascript
AddOutputFilterByType DEFLATE text / css
AddOutputFilterByType DEFLATE text / html
AddOutputFilterByType DEFLATE текст / простой
AddOutputFilterByType DEFLATE текст / xml
Он добавит сжатие GZIP к большинству популярных типов файлов, таких как HTML, CSS, JS и т. Д.Если вам нужно что-то еще, что требует сжатия, просто добавьте больше типов MIME.
После сохранения файла необходимо включить его в основную конфигурацию Apache. Итак, откройте httpd.conf
еще раз, и внизу страницы есть раздел, в котором вы включаете разные вещи, такие как MPM. В этом разделе добавьте следующую строку:
Включить conf / extra / httpd-deflate.conf
Сохраните изменения и перезапустите HTTPD. Сжатие Gzip будет включено!
Настроить кэширование ресурсов с истекающими заголовками
Еще одна важная вещь, которая серьезно влияет на производительность, — это кеширование.Если вы хотите использовать заголовки кеша, убедитесь, что вы включили mod_expires
для этой цели. Остальная часть процедуры аналогична включению сжатия GZIP.
Начните с создания файла, который будет содержать конфигурацию для кеширования:
судо vi /usr/local/apache2/conf/extra/httpd-expires.conf
Вставьте следующую конфигурацию и добавьте / удалите типы MIME или настройте время истечения срока действия, если вам нужно:
# Включить истечения срока
ExpiresActive On
# Срок действия для данного типа пантомимы
ExpiresByType image / gif "доступ плюс 1 месяц"
ExpiresByType image / ico "доступ плюс 1 месяц"
ExpiresByType image / jpg "доступ плюс 1 месяц"
ExpiresByType image / jpeg "доступ плюс 1 месяц"
ExpiresByType image / png "доступ плюс 1 месяц"
ExpiresByType text / css "доступ плюс 1 месяц"
ExpiresByType text / javascript "доступ плюс 1 месяц"
Как и раньше, вам нужно добавить запись в httpd.conf
и после этого перезапустите сервер:
Включить conf / extra / httpd-expires.conf
Включить конфигурацию SSL
Если вы планируете использовать HTTPS, который я настоятельно рекомендую, вам необходимо включить конфигурацию SSL. По умолчанию он закомментирован из основного файла конфигурации. Прежде чем включать этот файл, давайте сначала отредактируем его:
судо vi /usr/local/apache2/conf/extra/httpd-ssl.conf
Файл содержит безопасную конфигурацию и разумные значения по умолчанию, которые вам не нужно изменять.Он обеспечит безопасное соединение, предназначенное для большинства браузеров. Однако этот файл также содержит VirtualHost по умолчанию для HTTPS, который я всегда удаляю. Причина в том, что мне нравится знать, какие точки входа на сервер доступны. Поскольку на этой странице нет ничего полезного, мы можем просто удалить ее.
Итак, прокрутите до точки, где начинается раздел VirtualHost
, и удалите весь раздел. Это довольно долго, поэтому убедитесь, что вы удалили его полностью, включая
строк:
## Удалите эту деталь:
##
## Контекст виртуального хоста SSL
##
# ...
Сохранить изменения в файл. Теперь пора включить этот файл в файл httpd.conf
. Отредактируйте его и прокрутите вниз. По умолчанию SSL закомментирован, поэтому все, что вам нужно сделать, это раскомментировать его следующим образом:
# Безопасные (SSL / TLS) соединения
Включите conf / extra / httpd-ssl.conf
Сохраните изменения и перезапустите службу HTTPD. Это только начальная часть добавления HTTPS на ваш сайт. Чтобы иметь возможность успешно подключиться к вашему серверу с помощью SSL, есть еще несколько шагов.
Добавить интеграцию Let’s Encrypt
Если вы не используете бесплатные SSL-сертификаты Let’s Encrypt, вы можете пропустить эту часть.
Когда вы устанавливаете certbot
для получения сертификатов Let’s Encrypt, вы должны каким-то образом проверить домен. Я использую webroot
как аутентификатор.Это означает, что внутри каталога вашего сайта certbot создаст . Хорошо известный каталог
и попытается поместить туда несколько файлов. Это работает в большинстве случаев, если вы не начнете экспериментировать с корневым путем к своему сайту, например, поместив его в подкаталог. Иногда возникает проблема с разрешением.
Есть хитрый трюк, чтобы решить все эти проблемы. Когда вы создаете новый сертификат, укажите webroot в каталог / var / lib / letsencrypt
вместо каталога вашего домена, например / var / www / blacksaildivision.com / htdocs
Затем создайте новый файл для конфигурации Apache:
судо vi /usr/local/apache2/conf/extra/httpd-acme.conf
и вставьте туда следующее содержимое:
Псевдоним /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Каталог "/ var / lib / letsencrypt /">
AllowOverride Нет
Параметры MultiViews Индексы SymLinksIfOwnerMatch IncludesNoExec
Требовать метод GET POST OPTIONS
Обратите внимание, что mod_alias
должен быть включен.Что он будет делать при каждом запросе к .well-known / acme-challenge
, который использует certbot, он будет указывать его на каталог / var / lib / letsencrypt
. Это решает проблему для всех доменов глобально.
Последнее, что нужно сделать — включить эту функцию в основной конфигурации Apache. Отредактируйте файл и добавьте следующий раздел в нижней части файла, где размещаются все остальные включения:
# Интеграция с Let's Encrypt
Включите conf / extra / httpd-acme.conf
Перезапустите Apache, чтобы применить новые изменения.
Включить расширенный статус
Если вы хотите получить больше информации об Apache или планируете использовать инструменты мониторинга, такие как Datadog, целесообразно включить расширенную версию статуса. Это даст вам основную информацию о воркерах и самом httpd. Чтобы включить, отредактируйте основной файл конфигурации и где-нибудь и следующий код (я люблю помещать его непосредственно перед всеми разделами Include
):
# Включить расширенный статус
ExtendedStatus On
Помните, что вам нужно включить mod_status
и mod_authz_host
, чтобы статус работал. Mod_authz_host
потребуется позже, когда я покажу вам, как настроить localhost. Mod_status
Ответ должен быть ограничен, чтобы избежать раскрытия важной информации.
Чтобы применить изменения, перезапустите httpd.
Настройка корневого каталога
Начнем с заключительной части — настройки виртуальных хостов. Есть несколько подходов. Это зависит от того, сколько веб-сайтов вы планируете разместить на одном сервере, все ли ваши приложения имеют домены или это просто микросервисы и т. Д.Я покажу вам два своих подхода. Независимо от любого подхода, вам понадобится каталог, в котором вы будете хранить файлы и журналы приложений / веб-сайтов.
В CentOS должен быть каталог / var / www
, который рекомендуется использовать для хранения файлов веб-сайта. Если у вас нет такого каталога, сначала создайте его:
судо mkdir / var / www
Убедитесь, что у этого каталога есть действительные права и действительный владелец, который должен быть root:
судо chmod 755 / var / www
sudo chown корень: корень / var / www
Настройка каталогов веб-сайтов для файлов и журналов
Как только корневой каталог будет готов, самое время настроить каталоги для веб-сайтов.Предположим, я хочу создать структуру папок для веб-сайта blacksaildivision.com
. Итак, сначала я создаю каталог внутри / var / www
и назову его домен:
судо mkdir /var/www/blacksaildivision.com
Внутри этого каталога мне нужны два отдельных каталога. Один для файлов моего веб-сайта, таких как index.html и т. Д., И один для журналов. Есть много способов вести логи на сервере. Некоторые люди используют собственные каталоги, такие как / usr / local / apache2 / logs
или / var / log
, но я предпочитаю хранить все в одном месте.Таким образом, все журналы nginx / httpd / php будут идти в каталог logs
внутри моего каталога домена.
судо mkdir /var/www/blacksaildivision.com/htdocs
sudo mkdir /var/www/blacksaildivision.com/logs
После того, как каталоги созданы, самое время установить действительного владельца и разрешения. Начнем с владения:
sudo chown root: root /var/www/blacksaildivision.com
sudo chown разработчик: www /var/www/blacksaildivision.com/htdocs
sudo chown разработчик: www / var / www / blacksaildivision.com / журналы
Таким образом, основной каталог домена должен принадлежать корню
. Однако два каталога внутри должны принадлежать настраиваемому пользователю. В этом случае основной пользователь сервера называется разработчик
. Он обладает полномочиями sudo, имеет доступ к файлам веб-сайта и может выполнять такие команды, как git pull
, чтобы загрузить последний код.
Почему не httpd
пользователь, которого мы создали для Apache? Причины — разрешения. Когда вы загружаете файлы с помощью git pull
, поскольку develop
.