2 поддомена 2 сервера NGINX дважды HTTPS

Вопрос или проблема

Я начинаю с nginx.

Я пытаюсь иметь два сервера nginx в моей локальной сети. Один для Odoo, один для Passbolt.

Вот так:
LAN Nginx 2 сервера 2 подсети

У меня есть сервер Odoo с сертификатом Let’s Encrypt, который работает прекрасно.

odoo.domain.com, 192.168.1.159, NAT редирект, с этой конфигурацией nginx:

#сервер odoo
upstream odoo {
  server 127.0.0.1:8069;
}
upstream odoochat {
  server 127.0.0.1:8072;
}
map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

# http -> https
server {
  listen 80;
  server_name odoo.domain.fr;
  rewrite ^(.*) https://$host$1 permanent;
}

server {
  listen 443 ssl;
  server_name odoo.domain.fr;
  proxy_read_timeout 720s;
  proxy_connect_timeout 720s;
  proxy_send_timeout 720s;

  # SSL параметры
  ssl_certificate /etc/letsencrypt/live/odoo.domain.fr/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/odoo.domain.fr/privkey.pem;
  ssl_session_timeout 30m;
  ssl_protocols TLSv1.2;
  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;

  # лог
  access_log /var/log/nginx/odoo.access.log;
  error_log /var/log/nginx/odoo.error.log;

  # Перенаправление запросов веб-сокетов на порт odoo gevent
  location /websocket {
    proxy_pass http://odoochat;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
   }

  # Перенаправление запросов на сервер бэкенда Odoo
  location / {
    # Добавить заголовки для режима прокси Odoo
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_redirect off;
    proxy_pass http://odoo;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
  }

  # общий gzip
  gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
  gzip on;
}

Я начал устанавливать сервер Passbolt, и он требует обязательного HTTPS на 443 с сертификатом Let’s Encrypt. На passbolt.domain.com, 192.168.1.160, если я изменяю NAT редирект на IP сервера Passbolt в роутере, это тоже работает прекрасно.

С этой конфигурацией nginx:

#
#  Passbolt.conf - конфигурационный файл Nginx для работы программного обеспечения Passbolt.
#

server {

  # Управляется Passbolt
  server_name passbolt.domain.fr;

  client_body_buffer_size     100K;
  client_header_buffer_size   1K;
  client_max_body_size        5M;

  client_body_timeout   10;
  client_header_timeout 10;
  keepalive_timeout     5 5;
  send_timeout          10;

  root /usr/share/php/passbolt/webroot;
  index index.php;
  error_log /var/log/nginx/passbolt-error.log info;
  access_log /var/log/nginx/passbolt-access.log;

  # Управляется Passbolt
  # include __PASSBOLT_SSL__

  location / {
    try_files $uri $uri/ /index.php?$args;
  }

  location ~ \.php$ {
    try_files                $uri =404;
    include                  fastcgi_params;
    fastcgi_pass             unix:/run/php/php8.3-fpm.sock;
    fastcgi_index            index.php;
    fastcgi_intercept_errors on;
    fastcgi_split_path_info  ^(.+\.php)(.+)$;
    fastcgi_param            SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param            SERVER_NAME $http_host;
    fastcgi_param PHP_VALUE  "upload_max_filesize=5M \n post_max_size=5M";
  }

    listen [::]:443 ssl ipv6only=on; # управляется Certbot
    listen 443 ssl; # управляется Certbot
    ssl_certificate /etc/letsencrypt/live/passbolt.domain.fr/fullchain.pem; # управляется Certbot
    ssl_certificate_key /etc/letsencrypt/live/passbolt.domain.fr/privkey.pem; # управляется Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # управляется Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # управляется Certbot

}

server {
    if ($host = passbolt.domain.fr) {
        return 301 https://$host$request_uri;
    } # управляется Certbot

  listen 80;
  listen [::]:80;
  server_name passbolt.domain.fr;
    return 404; # управляется Certbot

}

Я не знаю, как перенаправить запросы для “passbolt.domain.fr” на другой сервер nginx. Какой сервер nginx должен управлять сертификатом для “passbolt.domain.fr”? Это сервер Odoo?

Может кто-нибудь помочь мне?

Я пытался перенаправить с новым upstream на сервере Odoo, и перенаправлять, но ошибки с сертификатом и SSL все еще возникают, или сервер Odoo переставал работать.

Ответ или решение

Настройка двух NGINX серверов с поддержкой HTTPS для поддоменов Odoo и Passbolt

Введение

Ваша задача состоит в том, чтобы настроить два NGINX сервера в одной локальной сети (LAN) для двух различных приложений: Odoo и Passbolt, с использованием HTTPS и сертификатов Let’s Encrypt. Важно правильно распределить запросы и обеспечить безопасность соединения через SSL. В этом документе мы обсудим, как можно организовать такую архитектуру и ответим на ваши вопросы.

Архитектура решения

  1. Поддомены и NAT-направления

    • Odoo: odoo.domain.fr, IP: 192.168.1.159
    • Passbolt: passbolt.domain.fr, IP: 192.168.1.160

    Убедитесь, что ваш маршрутизатор правильно перенаправляет запросы для соответствующих поддоменов на локальные IP-адреса NGINX серверов.

  2. Общая схема работы
    Каждый сервер будет отвечать за свои поддомены. Это значит, что каждый сервер (NGINX) должен иметь корректные настройки для обработки SSL-сертификатов.

Настройки NGINX для Odoo

Ваш текущий конфигурационный файл NGINX для Odoo выглядит достаточно хорошо. Важно убедиться, что все параметры настроены корректно. Вот некоторые рекомендации:

  • Убедитесь, что есть директивы для переадресации с HTTP на HTTPS.
  • SSL-трафик проходит на стандартном порту 443.
  • Включите правильные заголовки для передачи информации о клиенте.

Настройки NGINX для Passbolt

Вы также правильно настроили сервер для Passbolt. Обратите внимание на следующие моменты:

  • Сертификаты Let’s Encrypt нужно получить отдельно для passbolt.domain.fr.
  • Проверьте, что в конфигурации NGINX прописаны все необходимые параметры для работы PHP.
  • Оба сервера должны иметь собственные SSL-сертификаты и не должны конфликтовать друг с другом.

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

server {
    listen 80;
    server_name passbolt.domain.fr;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name passbolt.domain.fr;

    ssl_certificate /etc/letsencrypt/live/passbolt.domain.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/passbolt.domain.fr/privkey.pem;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # Логирование
    access_log /var/log/nginx/passbolt.access.log;
    error_log /var/log/nginx/passbolt.error.log;
}

Управление сертификатами

Каждый сервер NGINX (для Odoo и Passbolt) должен иметь свои собственные сертификаты Let’s Encrypt. Это значит, что для passbolt.domain.fr вы должны сгенерировать сертификат, который будет установлен исключительно на сервере Passbolt.

Возможные проблемы и их решение

  1. SSL ошибки: Убедитесь, что на каждом сервере правильно прописаны пути к SSL сертификатам.
  2. Конфликты: Не используйте один и тот же конфигурационный файл для двух различных поддоменов. Каждый сервер должен иметь свой конфигурационный файл.
  3. Проверка доступа: Убедитесь, что у вас открыты соответствующие порты на firewall (обычно 80 и 443).

Заключение

Настройка двух NGINX серверов для обслуживания двух поддоменов с поддержкой HTTPS требует внимательного подхода к конфигурации и управлению сертификатами. Правильное распределение трафика, корректные настройки для SSL и четкая маршрутизация запросов обеспечат надёжную и безопасную работу ваших приложений. Убедитесь, что у вас есть резервные копии конфигурационных файлов перед внесением изменений и проверьте работоспособность каждого приложения после настройки.

Оцените материал
Добавить комментарий

Капча загружается...