Введение

Помимо Apache значительную роль рынка занимает Nginx (на самом деле примерно поровну). Однако nginx так же часто используют в качестве балансировщика нагрузки и прокси сервера.

Алгоритм настройки

  1. Установка
  2. Добавление Virtual Host
  3. Создание каталога и файлов сайта
    1. Настройка доступа к файлу на уровне файловой системы
  4. Настройка firewalld и selinux
  5. Запуск службы веб-сервера и добавление её в автозапуск

Настройка

Установка

apt install nginx -y

Nginx - веб-сервер

ln

  1. Создадим для nginx новый файл настроек сайта:
    1. Для этого откопируем файл defaults с именем site1.vm.local
# заходим в каталог с сайтами
cd /etc/nginx/sites-availabe
 
# копируем
cp default site1.vm.local
  1. Откройте этот файл и измените следующие настройки:

    1. Сайт не должен быть сайтом по умолчанию

      • Удаляем параметр default_server
    2. Должен располагаться в каталоге /var/www/site1

      • Меняем в параметр root /var/www/html на /var/www/site1
    3. Должен ожидать имя site1.vm.local

      • Меняем в параметре server_name _ на site1.vm.local
  2. После создания и настройки файла сайта, нужно его активировать:

    • Создадим символическую ссылку для сайта в каталог sites-enabled: 
# команду нельзя укорачивать
ln -s /etc/nginx/sites-available/site1.vm.local /etc/nginx/sites-enabled/
  1. Создайте каталог /var/www/site1 и файл index.html
mkdir /var/www/site1
 
echo "<h1> Site1 </h1>" > /var/www/site1/index.html
  1. Выполните перезагрузку службы 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 - прокси-сервер

  1. Настроим nginx для перенаправления запросов с сайта vm.local на site1.vm.local
  2. Создайте новый файл настроек сайта с именем vm.local
    1. Установите доменное имя сайта “server_name”
    2. Удалите параметр “root” устанавливающий корневую директорию
    3. Удалите параметр “try_files”
    4. В блок location добавьте следующую строку:
proxy_pass    http://site1.vm.local;
  1. Активировать сайт
# команду нельзя укорачивать
ln -s /etc/nginx/sites-available/vm.local /etc/nginx/sites-enabled/
  1. Перезагрузите службу nginx

Nginx - балансировщик нагрузки

Так же Nginx позволяет перенаправлять запросы не на один сервер, а на пул серверов. Что позволит распределить нагрузку между ними.

  1. Измените порт на котором работают сайты: site1 и site2 на 8081 и 8082 соответственно
  2. Откройте файл настроек сайта vm.local
  3. Перед блоком server добавьте следующие строки:
upstream vmLocal {
	server 172.16.9.130:8081;
	server 172.16.9.130:8082;
}
  1. Данный блок описывает пул серверов которым будет переслан запрос. В нашем случае это будет тот же сервер но разные порты, но обычно пересылка ведется на другие сервера, что б разделить время на обработку и процессорные мощности

  2. Изменим параметр proxy_pass, так что бы он использовал для перенаправления созданный нами пул адресов:

 proxy_pass http://vmLocal;
  1. Перезагрузите службу

Проверка

  1. Откройте на CLNT сайт: vm.local
    1. Обновите страницу несколько раз

Стандартный файл сайта

  1. Перейдите в каталог /etc/nginx/sites-available
  2. Откройте файл: default
  3. Если убрать комментарии то он выглядит так:
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;
        }
}
  1. То что мы наблюдаем это стандартное описание сайта, аналогичное настройке VirtualHost в apache. Оно имеет следующие параметры:
    1. listen - указывает с какого сокета будет происходить прослушивание запросов. (Тут нам не нужно будет отдельно указывать порты как в apache)
      1. default_server - говорит, что если у нас нет сопоставленного сайта с запрошенным доменным именем, то мы вернем этот сайт. Такая запись может быть только у одного сайта в nginx
      2. root - путь до корневой директории сайта
      3. index - название файла, который nginx будет искать в корневом каталоге сайта для его отображения клиенту
      4. server_name - доменное имя сайта
        1. нижнее подчеркивание говорит о том что нас устроит любое имя сайта
      5. location - позволяет настроить обработку дополнительных параметров, следующих после указания доменного имени.
        1. location / - в таком положении все возможные запросы будут обработаны одинаково
          1. try_files - параметр проверки наличия файла или каталога
            1. $uri - проверит на существование полученный url, если его нет, проверит наличие каталога с таким путем, и если не найдет, вернет ошибку 404