我在 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