nginx使用Proxy-protocal

配置文件开启proxy_protocal

server {
    listen 80   proxy_protocol;
    listen 443  ssl proxy_protocol;
    ...
}
前端

Q&A

  1. proxy protocal是什么node

代理协议是一种 Internet 协议,用于将链接信息从请求链接的源传递到请求链接到的目标。Elastic Load Balancing 使用代理协议版本 1,该版本使用用户可读的标头格式。默认状况下,当对前端和后端链接使用传输控制协议 (TCP) 或安全套接字层 (SSL) 时,您的负载均衡器会将请求转发到后端实例,而不修改请求标头。若是您启用代理协议,则会向请求标头添加一个用户可读的标头,其中包含链接信息(如源 IP 地址、目标 IP 地址和端口号)。该标头随后做为请求的一部分发送到后端实例。nginx

  1. 为何要使用proxy protocal呢web

咱们知道nginx使用的最普遍的功能就是反向代理,如tomcat,node,django,tornado等,同时nginx也能够代理tcp流和websocketsdjango

可是若是你的应用服务器自己就在一个负载均衡器(好比aws的ELB)的后端那么就会出现问题ELB自己能够作http/https/tcp的负载均衡。若是你是用来代理http协议的话那么ELB就会注入X-Forwarded-For这个header,这里面会包含客户端的源地址。假如使用的TCP的负载均衡将不会获取到http header,那么天然就没法获取client ip,这样你的应用服务器也就没法知道链接到它的真是客户端是谁。也就没法正常的提供服务了。所以只有使用proxy protocal协议来传递真实的头信息后端

  1. 背景tomcat

proxy protocal是由haproxy项目开发来解决上述问题的。亚马逊在2013年夏天也将proxy protocal加入到了ELB服务中。同时在nginx-1.5.12 release版本中也开始支持proxy protocal安全

相关文章
相关标签/搜索