====== NGINX как обратный прокси для веб-публикации 1С:Предприятие ======

===== Установка и первичная настройка NGINX =====

  - <code bash>apt install curl gnupg2</code>
  - <code bash>curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor > /usr/share/keyrings/nginx-archive-keyring.gpg</code>
  - <code bash>echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian `lsb_release -cs` nginx"  > /etc/apt/sources.list.d/nginx.list</code>
  - <code bash>apt update
apt install nginx</code>
  - <code bash>systemctl start nginx
systemctl status nginx</code>

===== Получение сертификата Let's Encrypt и настройка SSL-шифрования =====

  - <code bash>apt install certbot</code>
  - <code bash>nano /etc/nginx/sites-available/00-1c.it-31.lab.conf</code>\\ <code bash>server {

listen 80;
server_name 1c.it-31.lab;

  location ^~ /.well-known/acme-challenge/ {
     default_type "text/plain";
     root /var/www/letsencrypt;
  }

  location = /.well-known/acme-challenge/ {
     return 404;
  }

  return 301 https://$host$request_uri;
}</code>
  - <code bash>ln -s  /etc/nginx/sites-available/00-1c.it-31.lab.conf /etc/nginx/sites-enabled</code>
  - <code bash>nginx -t 
nginx -s reload</code>
  - <code bash>mkdir /var/www/letsencrypt
chown -R nginx:nginx /var/www/letsencrypt</code>
  - <code bash>certbot certonly --webroot -w /var/www/letsencrypt -d 1c.it-31.lab</code>
  - После успешного получения сертификата откроем файл с настройками домена /etc/letsencrypt/renewal/1c.it-31.lab.conf и внесем в секцию [renewalparams] следующую опцию: <code bash>[renewalparams]
...
renew_hook = nginx -s reload</code>
  - <code bash>openssl dhparam -out /etc/ssl/private/dhparam.pem 2048</code>
  - Теперь откроем /etc/nginx/sites-available/00-1c.it-31.lab.conf и добавим в него секцию: <code bash>server {

  listen 443 ssl http2;
  server_name 1c.it-31.lab;

  ssl_certificate /etc/letsencrypt/live/1c.it-31.lab/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/1c.it-31.lab/privkey.pem;
  ssl_session_timeout 1d;
  ssl_session_cache shared:SSL:50m;
  ssl_session_tickets off;
  ssl_dhparam /etc/ssl/private/dhparam.pem;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  ssl_prefer_server_ciphers off;

  add_header Strict-Transport-Security "max-age=63072000" always;

  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_trusted_certificate /etc/letsencrypt/live/1c.it-31.lab/chain.pem;
  resolver 8.8.8.8;
}</code>
  - <code bash>nginx -t 
nginx -s reload</code>

===== Настройка переадресации запросов для веб-публикации 1С:Предприятие =====

ля работы обратного прокси мы должны для каждой базы создать отдельный URL с ее именем. Снова откроем /etc/nginx/sites-available/00-1c.it-31.lab.conf и добавим внутрь секции server вложенную секцию: <code bash>location /HRM-1/ {
   proxy_pass http://IIS-SRV-1C.LOC/HRM-1/;
   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;
   proxy_set_header X-Forwarded-Proto https;
 }</code>

Повторяем данные действия для всех остальных публикаций, теперь они будут доступны извне по адресам:<code bash>nginx -t 
nginx -s reload</code>

===== Настройка дополнительной аутентификации по паролю =====

  - Для этого установим дополнительный набор утилит: <code bash>apt install apache2-utils</code>
  - Теперь создадим базу пользователей, первого пользователя заводим с использованием ключа -с, в этом случае будет создан новый файл паролей, а существующий перезаписан: <code bash>htpasswd -c /etc/nginx/.htpasswd glavbuch</code>
  - Для следующих пользователей используйте команду: <code bash>htpasswd /etc/nginx/.htpasswd buch1</code>
  - После чего в каждую секцию с информационной базой в /etc/nginx/sites-available/00-1c.it-31.lab.conf добавим строки: <code bash>location /HRM-1/ {
   auth_basic "1C users only";
   auth_basic_user_file /etc/nginx/.htpasswd;</code>
  - Еще раз проверим конфигурацию и перезапустим сервер: <code bash>nginx -t 
nginx -s reload</code>
