您的位置:首页 > 运维架构 > Nginx

nginx配置location总结及rewrite规则写法

2017-01-16 00:00 633 查看
http://seanlook.com/2015/05/17/nginx-location-rewrite/
https://segmentfault.com/a/1190000002797606
1.1 正则

.
: 匹配除换行符以外的任意字符

?
: 重复0次或1次

+
: 重复1次或更多次

*
: 重复0次或更多次

\d
:匹配数字

^
: 匹配字符串的开始

$
: 匹配字符串的介绍

{n}
: 重复n次

{n,}
: 重复n次或更多次

[c]
: 匹配单个字符c

[a-z]
: 匹配a-z小写字母的任意一个 ~ 区分大小写匹配
~* 不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
^ 以什么开头的匹配
$ 以什么结尾的匹配

小括号
()
之间匹配的内容,可以在后面通过
$1
来引用,
$2
表示的是前面第二个
()
里的内容。正则里面容易让人困惑的是
\
转义特殊字符。

1.2 常用变量

$args
: #这个变量等于请求行中的参数,同
$query_string


$content_length
: 请求头中的Content-length字段。

$content_type
: 请求头中的Content-Type字段。

$document_root
: 当前请求在root指令中指定的值。

$host
: 请求主机头字段,否则为服务器名称。

$http_user_agent
: 客户端agent信息

$http_cookie
: 客户端cookie信息

$limit_rate
: 这个变量可以限制连接速率。

$request_method
: 客户端请求的动作,通常为GET或POST。

$remote_addr
: 客户端的IP地址。

$remote_port
: 客户端的端口。

$remote_user
: 已经经过Auth Basic Module验证的用户名。

$request_filename
: 当前请求的文件路径,由root或alias指令与URI请求生成。

$scheme
: HTTP方法(如http,https)。

$server_protocol
: 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。

$server_addr
: 服务器地址,在完成一次系统调用后可以确定这个值。

$server_name
: 服务器名称。

$server_port
: 请求到达服务器的端口号。

$request_uri
: 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。

$uri
: 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。

$document_uri
: 与$uri相同。

1.3 flag标志位

last
: 相当于Apache的[L]标记,表示完成rewrite

break
: 停止执行当前虚拟主机的后续rewrite指令集

redirect
: 返回302临时重定向,地址栏会显示跳转后的地址

permanent
: 返回301永久重定向,地址栏会显示跳转后的地址

#路径重写配置Demo
location /demo/test/ {
#以/demo/test路径开始
#原始路径: http://127.0.0.1:8080/demo/test/1.html  重写后:http://127.0.0.1:8888/demo/test2/1.html
rewrite ^/demo/test/(.*)$ http://127.0.0.1:8888/demo/test2/$1 break;

#以html文件结尾
#原始路径: http://127.0.0.1:8080/demo/test/1.html  重写后:http://127.0.0.1:8888/test/demo/test/1.html
# 此种方式配置会改变浏览器地址,引发跨域请求的问题
#rewrite ^/(.*\.html)$ http://127.0.0.1:8888/test/$1 break;

# 此种方式,结合proxy_pass 重写后则不会改变浏览器地址,不存在跨域问题
#rewrite ^/(.*\.html)$ /test/$1 break;
#proxy_pass  http://127.0.0.1:8888; }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: