我尝试设置nginx来验证传入的https请求,并将它们传递到同一Intranet(LAN)中不同主机上的服务器。来自不同的来源,我到达以下conf文件:
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwared-For proxy_add_x_forwarded_for;
upstream syncthing_gui
{
server 10.0.0.129:8329;
}
server {
listen 443 ssl;
server_name geras.duckdns.org;
ssl on;
ssl_certificate /etc/letsencrypt/live/geras.duckdns.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/geras.duckdns.org/privkey.pem;
auth_basic "Username and Password required (syncthing)";
auth_basic_user_file /etc/nginx/.htpasswd;
location /sync {
error_log /var/log/nginx/error.log info;
access_log /var/log/access.log;
proxy_pass http://syncthing_gui;
}
}
但我收到错误400 Bad Request: too many Host headers
。我需要改变什么?
答案 0 :(得分:4)
此消息不是来自nginx,而是来自Golang(Syncthing是用Go编写的)。乍一看,我将此错误解释为意味着向nginx发送了太多或太大的标头。但它真正意味着有太多Host: abc.example.com
标题。
在您的配置中,您有
proxy_set_header Host $http_host;
我敢打赌,在其他配置文件中,您有一个重复或类似的行,这会导致nginx向服务器发送两个HTTP Host:
标头。大多数软件都不关心这一点,但Go的标准HTTP服务器会对此进行检查并拒绝 400 的请求。