2017-10-18 174 views
1

我正在玩Nginx,我成功地設置了一個簡單的(現在僅用於HTTP)反向代理。作爲一個新手,我想知道我需要修改什麼來使這個生產準備就緒。這使我對以下幾個問題: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

如果你把所有的http塊你proxy_set_header語句,它們將被繼承到server塊,然後進入location塊。繼承只發生在沒有其他proxy_set_header聲明的塊中。詳情請參閱this document

或者,通過使用include指示將通用語句放入單獨的文件中,並將它們拖到您的配置的任何部分。詳情請參閱this document

您應該設置哪些標題取決於您的應用程序。但this article討論了防止某些報頭被傳遞給代理服務器,例如

proxy_set_header Accept-Encoding ""; 

而且this article緩解與HTTPoxy漏洞:

proxy_set_header Proxy "";