如何将nginx设置为反向代理(堡垒);我有“400Bad请求:主机标头太多”

时间:2016-07-01 13:31:37

标签: nginx reverse-proxy

我尝试设置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。我需要改变什么?

1 个答案:

答案 0 :(得分:4)

此消息不是来自nginx,而是来自Golang(Syncthing是用Go编写的)。乍一看,我将此错误解释为意味着向nginx发送了太多或太大的标头。但它真正意味着有太多Host: abc.example.com标题。

在您的配置中,您有

proxy_set_header Host $http_host;

我敢打赌,在其他配置文件中,您有一个重复或类似的行,这会导致nginx向服务器发送两个HTTP Host:标头。大多数软件都不关心这一点,但Go的标准HTTP服务器会对此进行检查并拒绝 400 的请求。