1

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

  • 有没有办法统一proxy_set_header指令,这样我就不需要为每个虚拟主机重复自己?
  • 除了,和之外X-Forwarded-Proto,我是否遗漏了任何其他重要的主机头修改?X-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
    }
  }
}

任何反馈/指向一个方向将不胜感激。

4

1 回答 1

1

如果将所有proxy_set_header语句都放在http块中,它们将被继承到server块中,然后再到location块中。继承只发生在没有其他proxy_set_header语句的块中。有关详细信息,请参阅此文档

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

您应该设置哪些标头取决于您的应用程序。但是本文讨论了防止某些标头被传递到代理服务器,例如

proxy_set_header Accept-Encoding "";

本文通过以下方式缓解HTTPoxy漏洞:

proxy_set_header Proxy "";
于 2017-10-18T20:25:43.007 回答