Nginx的proxy_pass及upstream的小型负载均衡
proxy_pass
Nginx的proxy_pass將請求代理到其他的后端服務器。例如
listen 9999;server_name wyc.com;location /test/aaa {content_by_lua_block {ngx.say('new:9999/test/aaa')}}location /test/aaa/bbb {content_by_lua_block {ngx.say('new:9999/test/aaa/bbb')}}location /ttt {proxy_pass http://wyc.com:9999/test;}上面請求http://localhost:9999/ttt/aaa/bbb,會匹配到/ttt進入,規則是去掉ttt,將后面的url和參數拼接到proxy_pass的后面,于是返回的new:9999/test/aaa/bbb,即location為/test/aaa/bbb的內容。
- 請求http://wychao.com:8888/user/wyc/wyc/aaa?aa=11&bb=22 (匹配到域名和端口和對應的location為/user/wyc,然后將后面的/wyc/aaa?aa=11&bb=22proxy_pass到需要代理到的服務,正好匹配到另一個server的location里)
結果:/user/wyc/aaa?aa=11&bb=22
| aaa.com/aa/bb?a=1 | /aa | http://bbb.com/cc | http://bbb.com/cc/bb?a=1 |
- 即最終代理到的url:將請求的uri去掉匹配到的location部分,其余部分拼接到proxy_pass后面,包括query_string部分。
如果proxy_pass http://aaa.wyc.com:8888不帶url,則是將匹配到的url附加到host之后。
upstream
upstream可以做簡單的負載均衡等,下面以百度為例,upstream在http段,
upstream search {server 180.149.132.47;}server {# List portlisten 8888;server_name wyc.com;location /s {#add_header 'Access-Control-Allow-Credentials' 'true';proxy_redirect off;proxy_set_header Host "www.baidu.com";proxy_set_header X-Real-Ip $remote_addr;proxy_set_header X-Forwarded-for $remote_addr;proxy_pass http://search;}}上面請求域名wyc.com,端口8888,location將代理到search的upstream中,訪問:
http://wyc.com:8888/s?wd=nba
和
http://baidu.com/s?wd=nba
的結果是一樣的
upstream支持多種負載均衡,下面一個最簡單的根據權重分配:
#server1:server {server_name wwyycc.com;listen 8888;location /user {content_by_lua_block {ngx.say('wwyycc.com:host')}}}#server2:server {server_name wwyycc.com;listen 9999;location /user {echo "user wwyycc user";}}#負載:server3:server_name:wyc.com 端口:8888upstream manageserver {server wwyycc.com:8888 weight=2;server wwyycc.com:9999;}location /user {#add_header 'Access-Control-Allow-Credentials' 'true';proxy_redirect off;proxy_set_header Host "wwyycc.com";proxy_set_header X-Real-Ip $remote_addr;proxy_set_header X-Forwarded-for $remote_addr;proxy_pass http://manageserver;}請求http://wyc.com:8888/user,結果按照順序返回兩次server1的結果,再返回一次server2的結果。(上面的例子要成功執行需要nginx的resolver解析,詳細見另一篇文章http://www.cnblogs.com/mentalidade/p/6934162.html),echo等指令也是第三方模塊echo-nginx-module,這些都是openresty自帶的。
轉載于:https://www.cnblogs.com/mentalidade/p/7028890.html
總結
以上是生活随笔為你收集整理的Nginx的proxy_pass及upstream的小型负载均衡的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pytorch使用GPU加速
- 下一篇: Vue教程路由以及axios的使用