Веб-сервер на связке NGINX + Apache (httpd) + MariaDB + PHP + PHPMyAdmin +FTP на CentOS 7

Разворачиваем веб-сервер на связке NGINX + Apache (httpd) + MariaDB + PHP + PHPMyAdmin +FTP, или по-простому NGINX + LAMP.

Будем следовать следующему принципу — сначала всё установим, а потом уже будем заниматься настройкой.

Устанавливаем компоненты

Это своего рода чек-лист для проверки наличия компонентов:

  1. NGINX — подробно описано в этой статье.
  2. PHP и PHP-FRM — подробно описано в этой статье.
  3. Apache (httpd) — подробно описано в этой статье.
  4. MariaDB — подробно описано в этой статье.
  5. PhpMyAdmin — подробно описано в этой статье.

Перед настройкой. Важно для понимания!

Общая картина выглядит следующим образом:

  1. Настройка сервера на какой-нибудь домен — это настройка всего ДВУХ основных компонентов — httpd и nginx. Для домена создается один конфиг в httpd и другой в nginx, и все по сути.
  2. Но, чтобы прописать конфиги правильно, нужно заранее определиться со структурой папок для сайта на своем сервере, потому что в конфигах пишутся пути до этих папок, и нужно их заранее знать уже.

Ну, и сразу тогда разберемся со структурой этих папок, подготовим их.

Вы можете придумать свою структуру, но лично я, как и многие другие вебмастера, использую следующую (просто посмотрите, а чуть позже создадим):

/web создаем новую папку в самом корне сервера, т.е. на одном уровне с папками etc, var и др.

Это будет основной раздел, где будут все наши сайты.

/web/site1.ru

/web/site2.ru

/web/site3.ru

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

И для каждого сайта создаем две папки:

  1. в одной будут просто все файлы сайта,
  2. а в другой логи.
/web/site1.ru/www эта папка будет содержать все файлы сайта (сюда будем заливать по ftp)
/web/site1.ru/logs а сюда будут сваливаться все логи

Теперь создаем это все одной командой:

mkdir /web && mkdir /web/site1.ru && mkdir /web/site1.ru/www && mkdir /web/site1.ru/logs

*таким образом мы создали все необходимые папки для одного сайта.

Не забываем назначить владельца папки:

chown -R apache. /web

И дать права на эту папку:

chmod -R 775 /web

Переходим к настройке связки NGINX + Apache (httpd)

Важно для понимания!

Как мы помним, для того, чтобы наш сервер обслуживал какой-нибудь домен, нужно для этого домена:

  1. написать конфиг в httpd
  2. написать конфиг в nginx

То есть всего лишь 2 конфига и все!

Конфиг для httpd

Перед созданием нового конфига, нужно проверить, чтобы в основном конфиге сервиса /etc/httpd/conf/httpd.conf была раскомментирована строка (она обычно в самом конце):

IncludeOptional conf.d/*.conf

*тогда наш отдельный новый конфиг будет подхватываться сервисом автоматически.

Открываем на редактирование и правим (раскомментируем):

mcedit /etc/httpd/conf/httpd.conf

Сохраняем.

Теперь заходим в директорию /etc/httpd/conf.d/ и внутри нее создаем файл-конфиг с названием сайта site1.ru.conf 

То есть можно выполнить команду:

mcedit /etc/httpd/conf.d/site1.ru.conf

*тогда откроется несуществующий файл, мы туда занесем инфу, сохраним его и файл тут же создастся с этим содержимым.

Классический конфиг выглядит так:

#в связке nginx+apache ставим именно порт 8080
<VirtualHost *:8080>

#тут все понятно, пишем домен и его алиас
ServerName site1.ru
ServerAlias www.site1.ru

#определяем корневую папку сайта для доступа из интернета
DocumentRoot /web/site1.ru/www

#определяем куда будут сваливаться логи ошибок и доступа
ErrorLog /web/site1.ru/logs/error.log
CustomLog /web/site1.ru/logs/access.log common

#следующий блок определяет опции и разрешения для корневой папки сайта
<Directory /web/site1.ru/www>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>

</VirtualHost>

Сохраняем и проверяем корректность настроек конфига:

apachectl configtest

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

systemctl restart httpd

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

Настройка конфига httpd для перфекционистов

Этот блок можно пропустить и читать уже про наcтройку конфига nginx. Здесь я просто попытаюсь его изменить так, чтобы для каждого нового сайта исправлять конфиг приходилось самый минимум, то есть сделать его практически универсальным.

Мы видим, что у нас часто повторяется название сайта site1.ru. И для каждого нового домена придется менять его снова во многих местах. Это неудобно, поэтому сделаем так, чтобы его приходилось менять только в одном месте.

Для этого название сайта определим в переменную, а потом будем просто использовать эту переменную в любом месте.

Никуда не пишем, просто для понимания:

Define domain site1.ru #команда define определяет переменную

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

${domain}

Теперь берем наш классический конфиг (которые уже сделали выше) и сначала задаем переменную, а потом везде site1.ru меняем на ${domain}.

Итоговый конфиг такой:

#в связке nginx+apache ставим именно порт 8080
<VirtualHost *:8080>

#определяем переменную, пишем это в самом начале
Define domain site1.ru

#тут все понятно, пишем домен и его алиас
ServerName ${domain}
ServerAlias www.${domain}

#определяем корневую папку сайта для доступа из интернета
DocumentRoot /web/${domain}/www

#определяем куда будут сваливаться логи ошибок и доступа
ErrorLog /web/${domain}/logs/error.log
CustomLog /web/${domain}/logs/access.log common

#следующий блок определяет опции и разрешения для корневой папки сайта
<Directory /web/${domain}/www>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>

</VirtualHost>

— этот конфиг удобен тем, что название сайта нужно менять только в одном месте,  там где задается переменная. А в остальных местах подставляется эта самая переменная.

Если идти еще дальше, то одинаковые куски кода можно вынести в дефолтный конфиг httpd, который лежит вот здесь  /etc/httpd/conf/httpd.conf.

Здесь одинаковым блоком может стать:

<Directory /web/${domain}/www>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Но, чтобы он стал универсальным и подходил для любого домена, нужно ${domain} заменить на * (звездочку).

<Directory /web/*/www>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>

И запихать этот код в дефолтный конфиг /etc/httpd/conf/httpd.conf, а в классическом конфиге тогда этот кусок нужно вырезать.

Не забываем перезапустить httpd.

Конфиг для NGINX

Перед созданием нового конфига, нужно проверить, чтобы в основном конфиге сервиса /etc/nginx/nginx.conf была раскомментирована строка:

include /etc/nginx/conf.d/*.conf

*тогда наш новый конфиг подхватится сервисом автоматически.

Открываем и проверяем:

mcedit /etc/nginx/nginx.conf

Аналогично, заходим в директорию /etc/nginx/conf.d/ и внутри нее создаем файл-конфиг с названием сайта site1.ru.conf или просто выполняем команду:

mcedit /etc/nginx/conf.d/site1.ru.conf

И в него заносим:

server {
	listen 80;
	server_name site1.ru www.site1.ru;
	
	gzip on;
	gzip_disable "msie6";
	gzip_min_length 1000;
	gzip_vary on;
	gzip_proxied expired no-cache no-store private auth;
	gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

# Ведём журнал доступа:
	access_log /web/site1.ru/logs/access.log;

# Разделяем статику и динамку, статику храним в кэше 10 дней:
	location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ {
	root /web/site1.ru/www;
	expires 10d;
}

location / {
	proxy_pass         http://127.0.0.1:8080/;
	proxy_redirect     off;
	log_not_found      off;
	proxy_set_header   X-Real-IP $remote_addr;
	proxy_set_header   Host $http_host;
	proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

В данном конфиге — для нового сайта нужно заменить имя сайта в четырех местах.

Проверяем корректность настройки конфига:

nginx -t

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

systemctl restart nginx

Важно! После каждого изменения любого конфига, необходим перезапуск сервиса!

FTP

В качестве ftp лучше использовать sftp. Установка sftp на centos 7 рассмотрена в этой статье.

3260cookie-checkВеб-сервер на связке NGINX + Apache (httpd) + MariaDB + PHP + PHPMyAdmin +FTP на CentOS 7
Оцените статью
Техдокументация вебмастера
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии