Введение
Помимо Apache значительную роль рынка занимает Nginx (на самом деле примерно поровну). Однако nginx так же часто используют в качестве балансировщика нагрузки и прокси сервера.
Алгоритм настройки
- Установка
- Добавление Virtual Host
- Создание каталога и файлов сайта
- Настройка доступа к файлу на уровне файловой системы
- Настройка firewalld и selinux
- Запуск службы веб-сервера и добавление её в автозапуск
Настройка
Установка
apt install nginx -yNginx - веб-сервер
- Создадим для nginx новый файл настроек сайта:
- Для этого откопируем файл defaults с именем
site1.vm.local
- Для этого откопируем файл defaults с именем
# заходим в каталог с сайтами
cd /etc/nginx/sites-availabe
# копируем
cp default site1.vm.local-
Откройте этот файл и измените следующие настройки:
-
Сайт не должен быть сайтом по умолчанию
- Удаляем параметр
default_server
- Удаляем параметр
-
Должен располагаться в каталоге
/var/www/site1- Меняем в параметр root
/var/www/htmlна/var/www/site1
- Меняем в параметр root
-
Должен ожидать имя
site1.vm.local- Меняем в параметре server_name
_наsite1.vm.local
- Меняем в параметре server_name
-
-
После создания и настройки файла сайта, нужно его активировать:
- Создадим символическую ссылку для сайта в каталог sites-enabled:
# команду нельзя укорачивать
ln -s /etc/nginx/sites-available/site1.vm.local /etc/nginx/sites-enabled/- Создайте каталог /var/www/site1 и файл index.html
mkdir /var/www/site1
echo "<h1> Site1 </h1>" > /var/www/site1/index.html- Выполните перезагрузку службы nginx
service nginx restartНастройка HTPS
Указание порта и сертификатов
server {
listen 443 ssl;
server_name vm.test;
root /usr/share/nginx/html;
ssl_certificate "/etc/ssl/CA/vm.test.crt";
ssl_certificate_key "/etc/ssl/CA/vm.test.key";
location / {
}
}-
listen 443 ssl;- указывает что на нашем порту будет ssl сокет -
ssl_certificateиssl_certificate_key- пути к сертификату и закрытому ключу
Если в блок `location` добавить `proxy_pass http://имя_сайта`, то получится прокси сервер, который устанавливает HTTPS соединение с клиентом, и по HTTP запрашивает данные у сервера или пула серверов.
Nginx - прокси-сервер
- Настроим nginx для перенаправления запросов с сайта
vm.localнаsite1.vm.local - Создайте новый файл настроек сайта с именем
vm.local- Установите доменное имя сайта “server_name”
- Удалите параметр “root” устанавливающий корневую директорию
- Удалите параметр “try_files”
- В блок location добавьте следующую строку:
proxy_pass http://site1.vm.local;- Активировать сайт
# команду нельзя укорачивать
ln -s /etc/nginx/sites-available/vm.local /etc/nginx/sites-enabled/- Перезагрузите службу nginx
Nginx - балансировщик нагрузки
Так же Nginx позволяет перенаправлять запросы не на один сервер, а на пул серверов. Что позволит распределить нагрузку между ними.
- Измените порт на котором работают сайты: site1 и site2 на 8081 и 8082 соответственно
- Откройте файл настроек сайта
vm.local - Перед блоком server добавьте следующие строки:
upstream vmLocal {
server 172.16.9.130:8081;
server 172.16.9.130:8082;
}-
Данный блок описывает пул серверов которым будет переслан запрос. В нашем случае это будет тот же сервер но разные порты, но обычно пересылка ведется на другие сервера, что б разделить время на обработку и процессорные мощности
-
Изменим параметр proxy_pass, так что бы он использовал для перенаправления созданный нами пул адресов:
proxy_pass http://vmLocal;
- Перезагрузите службу
Проверка
- Откройте на CLNT сайт:
vm.local- Обновите страницу несколько раз
Стандартный файл сайта
- Перейдите в каталог /etc/nginx/sites-available
- Откройте файл: default
- Если убрать комментарии то он выглядит так:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}- То что мы наблюдаем это стандартное описание сайта, аналогичное настройке VirtualHost в apache. Оно имеет следующие параметры:
- listen - указывает с какого сокета будет происходить прослушивание запросов. (Тут нам не нужно будет отдельно указывать порты как в apache)
- default_server - говорит, что если у нас нет сопоставленного сайта с запрошенным доменным именем, то мы вернем этот сайт. Такая запись может быть только у одного сайта в nginx
- root - путь до корневой директории сайта
- index - название файла, который nginx будет искать в корневом каталоге сайта для его отображения клиенту
- server_name - доменное имя сайта
- нижнее подчеркивание говорит о том что нас устроит любое имя сайта
- location - позволяет настроить обработку дополнительных параметров, следующих после указания доменного имени.
- location / - в таком положении все возможные запросы будут обработаны одинаково
- try_files - параметр проверки наличия файла или каталога
- $uri - проверит на существование полученный url, если его нет, проверит наличие каталога с таким путем, и если не найдет, вернет ошибку 404
- try_files - параметр проверки наличия файла или каталога
- location / - в таком положении все возможные запросы будут обработаны одинаково
- listen - указывает с какого сокета будет происходить прослушивание запросов. (Тут нам не нужно будет отдельно указывать порты как в apache)