Nginx

子目錄 url 中 Ngnix 反向代理後面的 Nextcloud

  • January 8, 2020

我使用 Ngnix 反向代理將多個 docker 服務保留在 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;
   }
 }
}

碼頭工人-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,但如何解決這個問題?

我嘗試更改 Nextcloud 基本 url 設置但沒有成功。我還在nginx 指南的子目錄中嘗試了這個 Nextcloud,但我不太明白。

在Shahriar Shojib回答的幫助下,我以這種方式解決了這個問題:

碼頭工人-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 文件

試試這個:

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

這會將代理傳遞的響應中的所有/core/ 替換為**/cloud/core/**。

ngx_http_sub_module

這可能會解決您的問題,但我建議您更改 nextcloud 上的基本網址,請參見此處: https ://help.nextcloud.com/t/change-url-nextcloud/52415

引用自:https://serverfault.com/questions/998024