#代理端口 #场景:服务器80端口开放,8080端口对外关闭,客户端需要访问到8080 #在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走 server { listen 80; location /api { proxy_pass http://127.0.0.1:8080/; proxy_redirect default; # 支持websocket反向代理 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host;# 当后端Web服务器上也配置有多个虚拟主机时,需要用该Header来区分反向代理哪个主机名, proxy_set_header X-Real-IP $remote_addr; #获取客户端真实IP地址设置到header中 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#获取所有转发请求的IP列表设置到header中 proxy_connect_timeout 30; #超时时间 单位秒 proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffer_size 32k; proxy_buffering on; #开启缓冲区,减少磁盘io proxy_buffers 4 128k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 256k; #当超过内存允许储蓄大小,存到文件 } }
从上往下,优先级越来越低。如果上面的匹配到,下面的就不会再尝试匹配了。
= /uri
精准匹配(url要完全匹配上),如果找到匹配=号的内容,立即停止搜索,并立即处理请求(优先级最高)^~ /uri
前缀匹配(url只要匹配到前面部分),只匹配字符串,不匹配正则表达式~ pattern
区分大小写的正则匹配pattern~* pattern
不区分大小写的正则匹配pattern/uri
前缀匹配(url只要匹配到前面部分)/
前面五个都没匹配上,就用/,优先级最低,兜底的。匹配是有优先级的,不是按照nginx的配置文件进行。
location / 这个是最常用的,优先级最低的。
官方的例子:
location = / { [ configuration A ] } location / { [ configuration B ] } location /documents/ { [ configuration C ] } location ^~ /images/ { [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] }
结论:
/
匹配A。/index.html
匹配B/documents/document.html
匹配C/images/1.gif
匹配D/documents/1.jpg
匹配的是E。server { listen 80; server_name blog.etiantian.org; location / { if ($http_user_agent ~* "android") { proxy_pass http://android_pools; } if ($http_user_agent ~* "iphone") { proxy_pass http://iphone_pools; } proxy_pass http://pc_pools; include extra/proxy.conf; } access_log off; }