Установка и настройка Nginx reverse proxy, web сервер на на CentOS 7

Материал из Шпаргалка знаний
Перейти к навигации Перейти к поиску

После установки на сервер CentOS 7 (Minimal) (x86_64) 2Gb RAM, 4 CPU, 16Gb SSD, приступаем к подготовке сервера.

Подготовка сервера

yum update -y
yum install wget nano mc net-tools htop open-vm-tools -y
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
yum install epel-release -y

Настройка времени

Устанавливаем корректный часовой пояс:

timedatectl set-timezone Europe/Moscow

Теперь установим утилиту для синхронизации времени и запустим ее.

yum install chrony -y
systemctl enable chronyd --now

Безопасность

Отключение SELinux:

setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

Брандмауэр

Для нормальной работы proxy сервера нужно открыть порты:

  • 80 — основной порт (http).
  • 443 — SSL порт (https).
firewall-cmd --permanent --add-port={80,443}/tcp
firewall-cmd --reload

Установка NGINX

Для установки самой свежей стабильной версии nginx создаем конфиг:

nano /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

Устанавливаем NGINX:

yum install nginx -y

Внесем небольшую корректировку в файл nginx.conf:

nano /etc/nginx/nginx.conf
http {
    ...
    server_names_hash_bucket_size 64;
    ....
}

Разрешаем автозапуск сервиса и запустим его:

systemctl enable nginx --now

Проверим, что веб-сервер работает. Для этого открываем браузер на другом компьютере, который находится в одной сети и вводим в адресной строке IP-адрес сервера. В итоге мы должны увидеть заголовок «Welcome to nginx!»:

  • обратите внимание, что данное приветствие может иметь и другой вид.

Редактируем rонфиг:

nano /etc/nginx/conf.d/default.conf

Пример моей настройки.

map $scheme $port { default 80; http 80; https 443; }

server {
    listen 80;
    server_name wiki.putyato.ru;
    # enforce https
    return 301 https://$server_name$request_uri;
    }

server {
    listen 443 ssl;
    # SSL config
    ssl_certificate /etc/letsencrypt/live/wiki.putyato.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/wiki.putyato.ru/privkey.pem;
    server_name wiki.putyato.ru;
    set $upstream 10.1.1.5;
    access_log /var/log/nginx/wiki.putyato.ru-access.log;
    error_log /var/log/nginx/wiki.putyato.ru-error.log;
    set_real_ip_from 34.238.98.137;
    real_ip_header X-Real-IP;

    location / {
    proxy_pass_header Authorization;
    proxy_pass https://$upstream;
    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_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffering off;
    client_max_body_size 0;
    proxy_read_timeout 36000s;
    proxy_redirect off;
    proxy_ssl_session_reuse off;
    }
}

#----------------------------------------------------------------------------

server {
    listen  80;
    server_name www.putyato.ru putyato.ru;
    access_log /var/log/nginx/www.putyato.ru-access.log;
    error_log /var/log/nginx/www.putyato.ru-error.log;
    set_real_ip_from 34.238.98.137;
    real_ip_header X-Real-IP;

location / {
    proxy_pass http://10.1.1.5:80;
    proxy_http_version  1.1;
    proxy_cache_bypass  $http_upgrade;
    proxy_set_header Upgrade           $http_upgrade;
    proxy_set_header Connection        "upgrade";
    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_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host  $host;
    proxy_set_header X-Forwarded-Port  $server_port;
  }
error_page 404 /404.html;
    location = /40x.html {
    }
error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
}   

#---------------------------------------------------------------------------------
  • proxy_http_version 1.1 — определяет версию протокола HTTP для проксирования, по умолчанию она установлена на 1.0. Для Websockets и keepalive соединений вам необходимо использовать версию 1.1.
  • proxy_cache_bypass $http_upgrade — Устанавливает условия, при которых ответ не будет взят из кеша.
  • Upgrade $http_upgrade и Connection "upgrade" — эти поля заголовка необходимы, если ваше приложение использует веб-сокеты.
  • Host $host — Переменная $host в следующем порядке приоритета содержит: имя хоста из строки запроса, или имя хоста из поля заголовка запроса Host , или имя сервера, соответствующее запросу.
  • X-Real-IP $remote_addr — перенаправляет удаленный IP-адрес реального посетителя на прокси-сервер.
  • X-Forwarded-For $proxy_add_x_forwarded_for — список, содержащий IP-адреса каждого сервера, через который клиент прошел проксирование.
  • X-Forwarded-Proto $scheme — при использовании внутри блока HTTPS-сервера каждый HTTP-ответ от проксируемого сервера перезаписывается на HTTPS.
  • X-Forwarded-Host $host — определяет исходный хост, запрошенный клиентом.
  • X-Forwarded-Port $server_port — определяет исходный порт, запрошенный клиентом.

Проверяем правильность настроек nginx:

nginx -t

И перезагружаем его:

systemctl restart nginx