Назад | Перейти на главную страницу

Nextcloud за обратным прокси-сервером Nginx в URL-адресе подкаталога

Я использую обратный прокси-сервер Ngnix, чтобы несколько служб докеров находились за HTTPS и в одном DNS.

В основном я хочу получить доступ к Nextcloud с помощью: https://server.<my-dns>.fr/cloud/
У меня есть доступ к странице инициализации, но все зависимости не загружаются (css, js, изображения ...), потому что базовый URL-адрес кажется неверным.

Например, мой браузер пытается загрузить https://server.<my-dns>.fr/core/js/dist/main.js в то время как правильный https://server.<my-dns>.fr/cloud/core/js/dist/main.js

Другие мои службы работают, как ожидалось, но не этот.

nginx.conf

events { }

http {
  proxy_cache_path /tmp/cache keys_zone=one:10m;

  # HTTP
  server {
    listen 80;
    server_name server.<my-dns>.fr;

    # For SSL cretificate validation
    location /.well-known/acme-challenge/ {
      root /var/www/certbot;
    }

    # Redirect everything to https
    location / {
      return 301 https://$host$request_uri;
    }
  }

  # HTTPS
  server {
    listen 443 ssl;
    server_name server.<my-dns>.fr;

    # HTTPS configuration
    ssl_certificate /etc/letsencrypt/live/server.<my-dns>.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/server.<my-dns>.fr/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # Auth configuration
    auth_basic "Registry realm";
    auth_basic_user_file /etc/nginx/conf.d/nginx.htpasswd;

    location /glance/ {
      proxy_pass http://localhost:61208/;
      rewrite ^/glance(.*)$ $1 break;
    }

    # Other services ...

    location /cloud/ {
      auth_basic off;
      proxy_pass http://localhost:8181/;
      rewrite ^/cloud(.*)$ $1 break;
    }
  }
}

docker-compose.yml

version: '3'

services:
  nextcloud_db:
    image: mariadb
    container_name: nextcloud_db
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: unless-stopped
    volumes:
      - ./data/db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=*****
      - MYSQL_PASSWORD=*****
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud
    ports:
      - 8181:80
    links:
      - nextcloud_db
    volumes:
      - ./data/nextcloud:/var/www/html
    restart: unless-stopped
    depends_on:
      - nextcloud_db

Я понимаю, что Nginx не переписывает URL-адреса зависимостей, но как это решить?
Я попытался изменить настройки базового URL-адреса Nextcloud, но безуспешно. Я тоже пробовал это Nextcloud в подкаталоге nginx guide но я этого не очень понимаю.

Попробуй это:

location /cloud/ {
  auth_basic off;
  proxy_pass http://localhost:8181/;
  rewrite ^/cloud(.*)$ $1 break;
  sub_filter "/core/" "/cloud/core/";
  sub_filter_once off;
}


Это заменяет все / core / к / облако / ядро ​​/ в ответ прокси пройти.

ngx_http_sub_module

Это может решить вашу проблему, но я бы порекомендовал изменить базовый URL-адрес в nextcloud, см. Здесь: https://help.nextcloud.com/t/change-url-nextcloud/52415

С помощью Шахриар Шоджиб ответ, я решил это так:

docker-compose.yml

...
location /cloud/ {
  auth_basic off;
  proxy_pass http://localhost:8181/cloud/;
  rewrite ^/cloud(.*)$ $1 break;
}

Nextcloud config.php

...
'overwritehost' => 'server.<my-dns>.fr',
'overwritewebroot' => '/cloud'

Увидеть Документация Nextcloud.