本文共 1470 字,大约阅读时间需要 4 分钟。
proxy 模块是 nginx 中最碉堡的模块之一。就是有了 proxy 模块,nginx 才能和其它 http 服务器关联起来,极大程度地提高了 nginx 的可用性。proxy 这个模块比较大,光是指令就有一大堆。这里我们只是简单地介绍一下它最核心的指令 —— proxy_pass 。location /api { proxy_pass http://127.0.0.1:1234;}
当客户端请求 /api 这个路径下的资源时服务器就会帮助我们去 127.0.0.1 的 1234 端口上取资源,解决了跨域的问题。proxy_pass 会将当前的 $uri 带过去,所以如果 /api 这个路由是我们擅自加的,在发送到目标服务前可以使用 rewrite 来处理掉这个多余的路由,比如: location /api/ { rewrite ^/api/(.*) /$1 break; proxy_pass http://127.0.0.1:1234;}
rewrite 的作用是修改 $uri,但要注意 rewrite 要有个重新匹配 location 的副作用。由于 proxy_pass 的处理阶段比 location 处理更晚,所以这里需要 break 掉,以防止 rewrite 进入下一次 location 匹配而丢失 proxy_pass。 location /api { proxy_pass http://xxx;}
nginx: [emerg] host not found in upstream "xxx"
而且由于 nginx 解析域名是在启动时做的,所以在 nginx 启动之后修改域名的解析对 nginx 是不会生效的。 location /api { proxy_set_header Host api.web-tinker.com; proxy_pass http://127.0.0.1:8080;}
除了设置 Host 这个请求头之外,proxy_set_header 还能设置别的头,只要你的脑洞够大就可以用它来做更多奇怪的事情! location /api { proxy_http_version 1.1; proxy_pass http://127.0.0.1:8080;}
转载地址:http://vzhdi.baihongyu.com/