Nginx
子目錄 url 中 Ngnix 反向代理後面的 Nextcloud
我使用 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/**。
這可能會解決您的問題,但我建議您更改 nextcloud 上的基本網址,請參見此處: https ://help.nextcloud.com/t/change-url-nextcloud/52415