这篇文章主要介绍了详解nginx配置url重定向-反向代理 ,nginx的重定向和nginx的反向代理的原理还是有区别的。有兴趣的可以了解一下。
本文系统:Centos6.5_x64
三台主机:nginx主机,hostname: master.lansgg.com IP: 192.168.10.128
apache主机,hostname: client1.lansgg.com IP: 192.168.10.129
一、nginx 地址重定向
二、nginx 反向代理
1、地址重定向:是指当使用者浏览某个网址时,将他导向到另一个网址的技术。常用在把一串很长的网址,转成较短的网址。因为当要传播某网站时,常常因为网址太长,不好记忆;又有可能因为换了网路的免费网页空间,网址又必须要变更,不知情的使用者还以为网站关闭了。这时就可以用网路上的转址了。这个技术使一个网页是可借由不同的统一资源定位符(URL)连结。
1.1、这 个模块允许使用正则表达式重写URI(需PCRE库),并且可以根据相关变量重定向和选择不同的配置。如果这个指令在server字段中指定,那么将在被 请求的location确定之前执行,如果在指令执行后所选择的location中有其他的重写规则,那么它们也被执行。如果在location中执行这 个指令产生了新的URI,那么location又一次确定了新的URI。这样的循环可以最多执行10次,超过以后nginx将返回500错误
正则表达式匹配,其中:
-
~ 为区分大小写匹配
-
~* 为不区分大小写匹配
-
!和!*分别为区分大小写不匹配及不区分大小写不匹配
文件及目录匹配,其中:
-
-f和!-f用来判断是否存在文件
-
-d和!-d用来判断是否存在目录
-
-e和!-e用来判断是否存在文件或目录
-
-x和!-x用来判断文件是否可执行
flag标记有:
-
last 相当于Apache里的[L]标记,表示完成rewrite
-
break 终止匹配, 不再匹配后面的规则
-
redirect 返回302临时重定向 地址栏会显示跳转后的地址
-
permanent 返回301永久重定向 地址栏会显示跳转后的地址
一些可用的全局变量有,可以用做条件判断
a
r
g
s
,
请
求
中
的
参
数
;
args, 请求中的参数;
args,请求中的参数;content_length, HTTP请求信息里的"Content-Length";
c
o
n
t
e
n
t
t
y
p
e
,
请
求
信
息
里
的
"
C
o
n
t
e
n
t
−
T
y
p
e
"
;
content_type, 请求信息里的"Content-Type";
contenttype,请求信息里的"Content−Type";document_root, 针对当前请求的根路径设置百度收录批量查询值;
d
o
c
u
m
e
n
t
u
r
i
,
与
document_uri, 与
documenturi,与uri相同;
h
o
s
t
,
请
求
信
息
中
的
"
H
o
s
t
"
,
如
果
请
求
中
没
有
H
o
s
t
行
,
则
等
于
设
置
的
服
务
器
名
;
host, 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;
host,请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;limit_rate, 对连接速率的限制;
r
e
q
u
e
s
t
m
e
t
h
o
d
,
请
求
的
方
法
,
比
如
"
G
E
T
"
、
"
P
O
S
T
"
等
;
request_method, 请求的方法,比如"GET"、"POST"等;
requestmethod,请求的方法,比如"GET"、"POST"等;remote_addr, 客户端地址;
r
e
m
o
t
e
p
o
r
t
,
客
户
端
端
口
号
;
remote_port, 客户端端口号;
remoteport,客户端端口号;remote_user, 客户端用户名,认证用;
r
e
q
u
e
s
t
f
i
l
e
n
a
m
e
,
当
前
请
求
的
文
件
路
径
名
request_filename, 当前请求的文件路径名
requestfilename,当前请求的文件路径名request_body_file
r
e
q
u
e
s
t
u
r
i
,
请
求
的
U
R
I
,
带
查
询
字
符
串
;
request_uri, 请求的URI,带查询字符串;
requesturi,请求的URI,带查询字符串;query_string, 与
a
r
g
s
相
同
;
args相同;
args相同;scheme, 所用的协议,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com
1
r
e
d
i
r
e
c
t
;
1 redirect;
1redirect;server_protocol, 请求的协议版本,“HTTP/1.0"或"HTTP/1.1”;
s
e
r
v
e
r
a
d
d
r
,
服
务
器
地
址
,
如
果
没
有
用
l
i
s
t
e
n
指
明
服
务
器
地
址
,
使
用
这
个
变
量
将
发
起
一
次
系
统
调
用
以
取
得
地
址
(
造
成
资
源
浪
费
)
;
server_addr, 服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费);
serveraddr,服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费);server_name, 请求到达的服务器名;
s
e
r
v
e
r
p
o
r
t
,
请
求
到
达
的
服
务
器
端
口
号
;
server_port, 请求到达的服务器端口号;
serverport,请求到达的服务器端口号;uri, 请求的URI,可能和最初的值有不同,比如经过重定向之类的。
rewrite 指令:可以使用在 server, location, if 区域;
语法:rewrite regex replacement flag
按照相关的正则表达式与字符串修改URI,指令按照在配置文件中出现的顺序执行。