nginx使用Proxy-protocal
配置文件開啟proxy_protocal
server {
listen 80 proxy_protocol;
listen 443 ssl proxy_protocol;
...
}
Q&A
proxy protocal是什麽?
代理協議是一種 Internet 協議,用於將連接信息從請求連接的源傳遞到請求連接到的目標。Elastic Load Balancing 使用代理協議版本 1,該版本使用用戶可讀的標頭格式。默認情況下,當對前端和後端連接使用傳輸控制協議 (TCP) 或安全套接字層 (SSL) 時,您的負載均衡器會將請求轉發到後端實例,而不修改請求標頭。如果您啟用代理協議,則會向請求標頭添加一個用戶可讀的標頭,其中包含連接信息(如源 IP 地址、目標 IP 地址和端口號)。該標頭隨後作為請求的一部分發送到後端實例。
為什麽要使用proxy protocal呢?
我們知道nginx使用的最廣泛的功能就是反向代理,如tomcat,node,django,tornado等,同時nginx也可以代理tcp流和websockets。
但是如果你的應用服務器本身就在一個負載均衡器(比如aws的ELB)的後端那麽就會出現問題。ELB本身可以做http/https/tcp的負載均衡。如果你是用來代理http協議的話那麽ELB就會註入X-Forwarded-For這個header,這裏面會包含客戶端的源地址。假如使用的TCP的負載均衡將不會獲取到http header,那麽自然就無法獲取client ip,這樣你的應用服務器也就無法知道連接到它的真是客戶端是誰
背景
proxy protocal是由haproxy項目開發來解決上述問題的。亞馬遜在2013年夏天也將proxy protocal加入到了ELB服務中。同時在nginx-1.5.12 release版本中也開始支持proxy protocal。
本文出自 “技術為王” 博客,請務必保留此出處http://wangzhenyu.blog.51cto.com/2996939/1976499
nginx使用Proxy-protocal