docker - 通过 Nginx Webserver 上的子域代理的 Nextcloud Docker 容器上的 502 Bad Gateway 错误
问题描述
我在我的 Raspberry Pi 4 上运行 Nginx Web 服务器。我正在尝试将子域上的反向代理配置到 Nextcloud Docker 容器。但是,当我尝试在浏览器中访问此容器时,出现 502 Bad Gateway 错误。我已确保为我尝试为 Nextcloud 提供服务的子域生成 SSL 证书。
这是我的子域的服务器块的样子:
server {
listen 443 ssl;
server_name subdomain.domain.tld;
ssl_certificate /pathtokey/subdomain.domain.tld/fullchain.pem;
ssl_certificate_key /pathtokey/subdomain.domain.tld/privkey;
location / {
proxy_pass https://127.0.0.1:9000/;
proxy_ssl_server_name on;
}
}
这就是我的 Nextcloud docker-compose.yml 文件的样子:
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: linuxserver/mariadb
# command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: always
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=<rootPassword>
- MYSQL_PASSWORD=<mysqlPassword>
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud:fpm
ports:
- 127.0.0.1:9000:9000
links:
- db
volumes:
- /mnt/hdd/nextcloud:/var/www/html
restart: always
更改 .yml 文件后,我确保运行 docker-compose up -d。更改 nginx.conf 文件后,我运行 sudo systemctl restart nginx。我还运行了 sudo nginx -t。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
我不确定我在这些配置中的错误在哪里。我将不胜感激有关如何解决此问题的任何建议。
解决方案
您正在使用的nextcloud:fpm
图像只是一个没有 Web 服务器的 php fpm 实例。
您的 nginx 代理配置很好,但它不起作用,因为您需要 nginxfastcgi_proxy
才能将请求代理到后端 php 实例。
这是一个简单的例子:
nginx(fastcgi) <-> php-fpm(nextcloud) <-> db
第一种解决方案:
nginx的配置可以参考nextcloud官方文档或者直接复制配置:nginx配置
第二种解决方案:
改用nextcloud:apache
图像。此图像已经包含一个 apache Web 服务器,您可以直接访问它而无需另一个 nginx 实例。
推荐阅读
- javascript - 如何从javascript中第二个数组中存在的数组中删除元素?
- jquery - 取消隐藏时如何以正确的宽度显示隐藏的选择?
- c++ - 语言设计问题:为什么 C 和 C++ 将类型和函数的声明与定义分开?
- canvas - 用 declut 标记 Declutter Circles
- r - 如何在闪亮的应用程序中通过日期范围对已加载的文件进行子集化
- vba - 在没有任何 id 的 Pre Tag 中获取文本
- makefile - 仅显示当前目录,而不是所有路径,并在 makefile 中使用它们在 c 中 tar
- c# - 我可以将 JSON 数组反序列化为类的属性吗?
- python - Python中的静态方法和类方法有什么区别?
- java - 如何使用所有可能的对组合进行for循环(+- 1,+- 2)