即使服务已启动并正在运行且端口正确,Nginx 在转发时也会返回错误网关

即使服务已启动并正在运行且端口正确,Nginx 在转发时也会返回错误网关

我在 Debian 10 上设置了 Nginx 1.23.2,将特定请求转发到 gitea 正在运行的端口 3999。

Nginx 配置:

server {
        listen                  443 ssl;
        server_name             www.subdomain.domain.com subdomain.domain.com;
        access_log              logs/subdomain.domain.com.access.log main;
        
        ssl_certificate         /home/gitea/ssl/cert.pem;
        ssl_certificate_key     /home/gitea/ssl/privkey.pem;
        ssl_protocols           TLSv1.2 TLSv1.3;

        location / {
                proxy_pass                              https://127.0.0.1:3999/;
                proxy_set_header                        Host    $host;
                proxy_set_header X-Real-IP              $remote_addr;
                proxy_set_header X-Forwarded-For        &proxy_add_x_forwarded_for;
        }
}

nginx -T 命令的部分输出证明配置已被采用:

...
# configuration file /etc/nginx/conf.d/gitea.ispf.sk.conf:
server {
        listen                  443 ssl;
        server_name             www.subdomain.domain.com subdomain.domain.com;
        access_log              logs/subdomain.domain.com.access.log main;

        ssl_certificate         /home/gitea/ssl/cert.pem;
        ssl_certificate_key     /home/gitea/ssl/privkey.pem;
        ssl_protocols           TLSv1.2 TLSv1.3;

        location / {
                proxy_pass                              https://127.0.0.1:3999/;
                proxy_set_header                        Host    $host;
                proxy_set_header X-Real-IP              $remote_addr;
                proxy_set_header X-Forwarded-For        &proxy_add_x_forwarded_for;
        }
}
...

(显然域名已更改)

但是当我输入www.subdomain.domain.com我收到 502 错误网关错误。

输出自ss-tulpn证明 nginx 正在监听 443 端口并且 gitea 正在 3999 端口运行的命令:

Netid            State             Recv-Q            Send-Q                       Local Address:Port                        Peer Address:Port            Process                                                                                                                                                      
tcp              LISTEN            0                 511                                0.0.0.0:443                              0.0.0.0:*                users:(("nginx",pid=306831,fd=8),("nginx",pid=306830,fd=8),("nginx",pid=306829,fd=8))                                                                      
tcp              LISTEN            0                 4096                                     *:3999                                   *:*                users:(("gitea",pid=305999,fd=14))   

gitea配置服务器部分:

[server]
SSH_DOMAIN       = subdomain.domain.com
DOMAIN           = subdomain.domain.com
HTTP_ADDR        = 0.0.0.0
HTTP_PORT        = 3999
DISABLE_SSH      = true
OFFLINE_MODE     = false

Gitea版本是1.17.3。我输入以下命令就可以访问gitea服务器的IP地址:3999 到浏览器的地址栏中。

我究竟做错了什么?

答案1

您的app.ini不包含

[server]
PROTOCOL = https

协议默认值为 plain http,而反向代理的目的是添加 TLS 加密,如HTTPS 设置用于加密与 Gitea 的连接

因此,你需要

proxy_pass http://127.0.0.1:3999/;

http://而不是https://

此外,您可能希望阻止直接非 TLS 连接

[server]
HTTP_ADDR = 127.0.0.1

相关内容