文章目录
反向代理
#代理端口
#场景:服务器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; #当超过内存允许储蓄大小,存到文件
}
}
location匹配规则和优先级
从上往下,优先级越来越低。如果上面的匹配到,下面的就不会再尝试匹配了。
-
= /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;
}