![Nginx 反向代理到 Docker 容器的 502 错误代码](https://linux22.com/image/707259/Nginx%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E5%88%B0%20Docker%20%E5%AE%B9%E5%99%A8%E7%9A%84%20502%20%E9%94%99%E8%AF%AF%E4%BB%A3%E7%A0%81.png)
我已经运行了一个带有 nextcloud 镜像的 docker 容器(来自这里https://hub.docker.com/_/nextcloud/)使用此脚本:
docker run \
--rm \
--detach \
--publish 54002:80 \
--name cloud.example.com \
--volume /srv/cloud.example.com/:/var/www/html \
nextcloud
我已经用 nginx 做了一个反向代理:
server {
listen *:80;
server_name cloud.example.com;
proxy_set_header Host cloud.example.com;
location / {
rewrite ^(.*)$ https://cloud.example.com$1 permanent;
}
}
server {
listen *:443 ssl http2;
server_name cloud.example.com;
proxy_set_header Host cloud.example.com;
set $service_port 54002;
set $service_ip 192.168.2.33;
ssl_certificate /etc/letsencrypt/live/cloud.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/cloud.example.com/privkey.pem;
add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
location / {
proxy_pass http://$service_ip:$service_port;
}
}
我收到 502 错误代码。我已从本地网络检查http://服务器ip:54002,它工作正常,而且只有带代理的 http 站点也能工作! 有效的 Http Nginx 配置:
server {
set $service_port 54002;
set $service_ip 192.168.2.33;
set $domain_name cloud.example.com;
listen *:80;
server_name $domain_name;
proxy_set_header Host $domain_name;
location / {
proxy_pass http://$service_ip:$service_port;
}
}
我的 https 配置有什么问题?
答案1
在花了好几个小时解决这个问题后,我终于在我的服务器配置中发现了一个错误。使用 nginx 一切都很好,但我忘记在 ufw 中允许 443 端口。我错误地认为规则“Nginx HTTP”足以用于 http 和 https 连接,但实际上只有 80/tcp 端口是开放的,所以我输入后 ufw allow 443/tcp
所有错误都消失了!@alexus 和其他人请原谅我浪费了你们的时间!