Nginx(仅限HTTP)生产中的反向代理设置

时间:2017-10-18 19:57:58

标签: nginx nginx-reverse-proxy

我正在使用Nginx,我成功地设置了一个简单的(仅限HTTP)反向代理。作为一个新手,我想知道我需要修改什么来使这个生产准备好。这引出了以下问题:

  • 有没有办法统一proxy_set_header指令,以便我不需要为每个虚拟主机重复一次?
  • 我是否遗漏了除X-Forwarded-ProtoX-Url-SchemeX-Forwarded-ForHost以外的任何其他重要主机标头修改内容?

nginx.conf

worker_processes 1;

events {
    worker_connections 1024;
}

http {
  sendfile on;
  gzip on;
  # skip log_format/access_log

  server {
    listen 80;
    server_name server1.company.com;

    location / {
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Url-Scheme $scheme;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_pass http://server1;  # IP or FQDN would be better here
    }
  }

  server {
    listen 80;
    server_name server2.company.com;

    location / {
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Url-Scheme $scheme;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_pass http://server2;  # IP or FQDN would be better here
    }
  }
}

任何反馈/指向某个方向都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

如果您将所有proxy_set_header语句放在http块中,它们将被继承到server块中,然后继承到location块中。继承只发生在没有另一个proxy_set_header语句的块中。有关详细信息,请参阅this document

或者,将公共语句放入单独的文件中,并使用include指令将它们拉入配置的任何部分。有关详细信息,请参阅this document

您应该设置哪些标头取决于您的应用程序。但this article讨论了阻止某些标头传递给代理服务器,例如

proxy_set_header Accept-Encoding "";

并且this article通过以下方式缓解了HTTPoxy漏洞:

proxy_set_header Proxy "";