Как настроить Nginx Proxy Manager для прокси-сервера OnlyOffice Document Server Docker Container?

#docker #nginx #ssl #proxy #onlyoffice

Вопрос:

Я потратил много времени, пытаясь решить эту проблему. Я использую Nginx Proxy Manager, и у меня не было никаких проблем с ним примерно до начала октября. До этого я использовал настройки по умолчанию в Nginx Proxy Manager, подключенные к OnlyOffice. Я использую подстановочный SSL-сертификат от Let’s Encrypt with DNS challenge через DigitalOcean.

Это мой docker-compose.yml для сервера документов OnlyOffice:

 # ------------------------------------------------------------------------------
# OnlyOffice
#
# use port 80 with Nginx Proxy Manager
# ------------------------------------------------------------------------------
version: "3"
services:
  onlyoffice:
    container_name: onlyoffice
    domainname: mydomain.tdl
    environment:
      - JWT_ENABLED=true
      - JWT_SECRET=anAmazingSecretThatWillBlowYourMind
      - WOPI_ENABLED=true
    hostname: onlyoffice
    image: onlyoffice/documentserver
    networks:
      proxy_network:
        aliases:
          - onlyoffice
    restart: unless-stopped
    volumes:
      - ./config/onlyoffice/app:/var/lib/onlyoffice
      - ./config/onlyoffice/data:/var/www/onlyoffice/Data
      - ./config/onlyoffice/fonts:/usr/share/fonts/truetype/custom
      - ./config/onlyoffice/log:/var/log/onlyoffice
      - ./config/onlyoffice/postgresql:/var/lib/postgresql
      - ./config/onlyoffice/rabbitmq:/var/lib/rabbitmq
      - ./config/onlyoffice/redis:/var/lib/redis
networks:
  proxy_network:
    external: true
 

И это мой файл Nginx Proxy Manager docker-compose.yml:

 
# ------------------------------------------------------------------------------
# Nginx Proxy Manager
#
# use port 81 with Nginx Proxy Manager
# ------------------------------------------------------------------------------
version: "3"
services:
  nginxproxymanager:
    container_name: nginxproxymanager_app
    depends_on:
      - mariadb-aria
    domainname: mydomain.tdl
    environment:
      - DB_MYSQL_HOST=nginxproxymanager_db
      - DB_MYSQL_PORT=3306
      - DB_MYSQL_USER=nginxproxymanager_user
      - DB_MYSQL_PASSWORD=TheMostSecurePas5w0rd
      - DB_MYSQL_NAME=nginxproxymanager_db
      - DISABLE_IPV6=true
    hostname: nginxproxymanager_app
    image: jc21/nginx-proxy-manager
    networks:
      default:
        aliases:
          - nginxproxymanager_app
      macvlan_network:
        aliases:
          - nginxproxymanager
        ipv4_address: www.xxx.yyy.zzz
      proxy_network:
        aliases:
          - nginxproxymanager
    restart: unless-stopped
    volumes:
      - ./config/data:/data
      - ./config/letsencrypt:/etc/letsencrypt
  mariadb-aria:
    container_name: nginxproxymanager_db
    domainname: mydomain.tdl
    environment:
      - MYSQL_ROOT_PASSWORD=EvenM0reSecurePas5w0rd
      - MYSQL_DATABASE=nginxproxymanager_db
      - MYSQL_USER=nginxproxymanager_user
      - MYSQL_PASSWORD=TheMostSecurePas5w0rd
    hostname: nginxproxymanager_db
    image: jc21/mariadb-aria
    networks:
      default:
        aliases:
          - nginxproxymanager_db
    restart: unless-stopped
    volumes:
      - /cache/nginxproxymanager/mariadb-aria:/var/lib/mysql
networks:
  default:
  macvlan_network:
    external: true
  proxy_network:
    external: true
 

Это файл Nginx Proxy Manager CONF по умолчанию, который создается с использованием настроек, которые я использовал:

 # ------------------------------------------------------------
# onlyoffice.mydomain.tdl
# ------------------------------------------------------------


server
{
  set $forward_scheme http;
  set $server "onlyoffice";
  set $port 80;

  listen 80;
  #listen [::]:80;

  listen 443 ssl http2;
  #listen [::]:443;


  server_name onlyoffice.mydomain.tdl;


  # Let's Encrypt SSL
  include conf.d/include/letsencrypt-acme-challenge.conf;
  include conf.d/include/ssl-ciphers.conf;
  ssl_certificate /etc/letsencrypt/live/npm-4/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/npm-4/privkey.pem;


  # Asset Caching
  include conf.d/include/assets.conf;


  # Block Exploits
  include conf.d/include/block-exploits.conf;


  # HSTS (ngx_http_headers_module is required) (63072000 seconds = 2 years)
  add_header Strict-Transport-Security "max-age=63072000;includeSubDomains; preload" always;


  # Force SSL
  include conf.d/include/force-ssl.conf;


  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection $http_connection;
  proxy_http_version 1.1;


  access_log /data/logs/proxy-host-44_access.log proxy;
  error_log /data/logs/proxy-host-44_error.log warn;


  location /
  {


    # HSTS (ngx_http_headers_module is required) (63072000 seconds = 2 years)
    add_header Strict-Transport-Security "max-age=63072000;includeSubDomains; preload" always;


    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_http_version 1.1;


    # Proxy!
    include conf.d/include/proxy.conf;
  }


  # Custom
  include /data/nginx/custom/server_proxy[.]conf;
}
 

Если я удалю сертификат SSL из записи прокси-хоста для OnlyOffice в Nginx Proxy Manager, он будет работать так, как ожидалось. Я смотрел видео Spaceinvader One на YouTube среди других по этой теме и не смог решить эту проблему. Я добавил все дополнительные параметры, с которыми я столкнулся, включая те, которые Spaceinvader One имеет в своем примере конфигурации Nginx во всех комбинациях, которые я могу придумать.

Я включаю этот скриншот ошибки, которую я получаю в настоящее время при попытке получить доступ к редактору примеров в Google Chrome. Я получаю эту ошибку, или редактор просто не загружается вообще. Я также сталкиваюсь с этими ошибками и в других браузерах.

Скриншот ошибки

При попытке использовать соединитель OnlyOffice в NextCloud он не может подключиться и отображает это сообщение:

Ошибка соединителя OnlyOffice NextCloud

Я надеюсь, что кто-нибудь может указать мне правильное направление или предложить помощь, потому что я, честно говоря, понятия не имею, где еще искать, и на страницах 4 и 5 моих поисковых запросов Google ищу ответы.

Я переключился с использования контейнера SWAG на linuxserver.io в Nginx Proxy Manager в январе, потому что я не всегда рядом, и мне намного проще рассказать кому-нибудь, как что-то делать на сервере, когда меня нет рядом, если у него есть графический интерфейс.

Спасибо за ваше время.

Ответ №1:

После того, как я потратил некоторое время на решение этой проблемы, я вернулся к ней сегодня вечером. После обновления всех задействованных контейнеров я добавил следующие строки в поле пользовательских местоположений Nginx Proxy Manager:

 resolver 127.0.0.11 valid=30s;
proxy_redirect off;
proxy_set_header X-Forwarded-Host $server_name;
 

И, похоже, теперь все работает так, как ожидалось.

введите описание изображения здесь

Комментарии:

1. Вы буквально спасли мне жизнь, я был с этой проблемой в течение нескольких часов…. Не могли бы вы объяснить мне, что именно делает эта конфигурация?