Разное

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/*.conf

User apache

Group apache

Listen 127.0.0.1:8080

ServerName 127.0.0.1:8080

ServerAdmin root@localhost

ServerSignature Off

ServerTokens Prod

RLimitMEM 786432000

TimeOut 250

AddDefaultCharset utf-8

DefaultLanguage ru

KeepAlive Off

ContentDigest Off

EnableSendfile off

ErrorLog "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.site

 DocumentRoot /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, etc

display_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 = On

implicit_flush = Off

output_buffering = 4K

realpath_cache_size = 2M

realpath_cache_ttl = 1800

zend.enable_gc = On

max_input_time = 200

max_execution_time = 30

file_uploads = On

memory_limit = 256M

post_max_size = 8M

upload_max_filesize = 2M

max_file_uploads = 4

extension_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 = Off

allow_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 – это инструмент, упрощающий процесс получения SSL-сертификатов от Let’s Encrypt и автоматического включения HTTPS на вашем сервере.

Пакет certbot предоставляется EPEL. Если репозиторий EPEL не установлен в вашей системе, вы можете установить его, используя следующую команду:

sudo yum install epel-release

 

После того, как репозиторий EPEL включен, установите пакет certbot, введя:

sudo yum install certbot

 

Обмен ключами Diffie-Hellman (DH) – это метод безопасного обмена криптографическими ключами по необеспеченному каналу связи. Создайте новый набор параметров 2048 бит DH для усиления безопасности:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

 

Вы можете изменить размер до 4096 бит, но в этом случае генерация может занять более 30 минут в зависимости от энтропии системы.

Чтобы получить сертификат 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 +, как показано ниже:

Сертификаты 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

Homepage

Как установить 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

.

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

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