合肥比较好的网站建设公司,外链seo软件下载,乐山网站建设,中小学建设网站大家好#xff0c;我是 17。
今天和大家聊聊 pass_proxy 代理。
pass_proxy 代理
在前端代理主要是为了跨域。虽然前端跨域有多种方法#xff0c;各有利弊#xff0c;但用代理来跨域对开发是最友好的。用代理可以不用修改产品代码切换线上线下#xff0c;非常安全。pass…大家好我是 17。
今天和大家聊聊 pass_proxy 代理。
pass_proxy 代理
在前端代理主要是为了跨域。虽然前端跨域有多种方法各有利弊但用代理来跨域对开发是最友好的。用代理可以不用修改产品代码切换线上线下非常安全。pass_proxy 默认会把 cookie 也一同转发。 常用的配置非常简单。
不带斜杠
前端 /api/user
后端 /api/user location ^~ /api/ {proxy_pass http://127.0.0.1:3001;}不带斜杠把 path 直接拼接在 url后面
带斜杠
前端 /api/user
后端 /user location ^~ /api/ {proxy_pass http://127.0.0.1:3001/;}带斜杠会先去掉匹配到的 path, 再拼接。
正则匹配的时候不能带斜杠
~ 区分大小写正则匹配 ~* 不区分大小写正则匹配 。location 用正则匹配的时候proxy_pass 后面不能以 / 结尾因为 nginx 不能处理这种情况。 location ~ /api/ {proxy_pass http://127.0.0.1:3001/;}本例中请求 localhost:3000/ 会导致 nginx 报错。
斜杠后面加路径
前端 /api/user
后端 /web/api/user location ^~ /api/ {proxy_pass http://127.0.0.1:3001/web$request_uri;}代理之前rewrite
location /search/ {rewrite /search/([^/]) /s?wd$1 break;proxy_pass http://127.0.0.1:3001;
}服务端获取真实ip 反向代理: 简单来说 proxy_pass 把请求转发到其它服务地址的时候就是反向代理。 如果是客户端与服务器直接连接nginx 变量 $remote_addr 就可以拿到真实ip。$remote_addr 是不能伪造的。但是如果客户端是经过反向代理连接的服务器服务器能拿到的只有代理服务器的 IP。为了能拿到客户端真实 IP,代理服务器在转发的时候需要加上一个 http 扩展头部 X-Forwarded-For。
所有代理的 ip 依次列出来从远及近。
X-Forwarded-For: IP0, IP1, IP2X-Forwarded-For 是一个 HTTP 扩展头部。HTTP/1.1RFC 2616协议并没有对它的定义它最开始是由 Squid 这个缓存代理软件引入用来表示 HTTP 请求端真实 IP。如今它已经成为事实上的标准被各大 HTTP 代 理、负载均衡等转发服务广泛使用并被写入 RFC 7239Forwarded HTTP Extension标准之中。 location /api/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:3000/;}$proxy_add_x_forwarded_for变量包含客户端请求头中的X-Forwarded-For与$remote_addr用逗号分开如果没有X-Forwarded-For 请求头则$proxy_add_x_forwarded_for等于$remote_addr。$remote_addr变量的值是客户端的IP。
可能你会担心ip会不会被伪造。即使客户端伪造了 ipnginx 也会用真实的 ip 进行重置。所以 $remote_addr 是可信的。