以下列配置为例
server {
listen 80;
server_name jouypub.com;
location ^~ /. {return 404;}
location ^~ /api {proxy_pass http://localhost:8000;}
location / {root /services/apps/front/;}
}
location 语法规则:location [=|~|~*|^~] /uri/ {…}
=
开头表示精确匹配 ^~
开头表示 uri 以某个常规字符串开头,理解为匹配 url 路径即可~
表示区分大小写的正则匹配~*
表示不区分大小写的正则匹配!~
和!~*
分别为区分大小写不匹配及不区分大小写不匹配 的正则/
通用匹配,任何请求都会匹配到。
如果匹配规则以 ^
开头,就是匹配以指定字符串开头的路径,如果没有就是匹配 url 中的内容是否包含指定字符串
如果匹配规则以 $
结尾,就是匹配以指定字符串结尾的路径
多个 location 配置的情况下匹配顺序为(当有匹配成功时候,停止匹配,按当前匹配规则处理请求):
- 优先匹配
=
- 其次匹配
^~
- 按照文件中的匹配顺序执行
- 最后匹配
/
举例
1、必选规则
location / {root /services/apps/front/;}
2、匹配静态资源
location ^~ /static/ {root /services/apps/front/static;}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {root /webroot/res/;}
3、防盗链
location ~* \.(gif|jpg|swf)$ {
valid_referers none blocked jouypub.com files.jouypub.com;
if ($invalid_referer) {rewrite ^/ http://$host/logo.png;}
}
jouypub.com、files.jouypub.com 是运行出现的白名单
4、根据文件类型设置过期时间
location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {if (-f $request_filename) {
expires 1h;
break;
}
}
5、禁止访问某个目录
location ~* \.(txt|doc)${
root /services/apps/front/doc;
deny all;
}
location 中的 /
结尾和非 /
结尾
location ^~ /api {proxy_pass http://localhost:8000;}
location ^~ /api {proxy_pass http://localhost:8000/;}
访问路径 http://www.jouypub.com/api/a.html
,
规则 1 会被转发到:http://localhost:8000/api/a.html
规则 2 会被转发到:http://localhost:8000/a.html
欢迎订阅「K 叔区块链」– 专注于区块链技术学习
博客地址:http://www.jouypub.com
简书主页:https://www.jianshu.com/u/756c9c8ae984
segmentfault 主页:https://segmentfault.com/blog/jouypub
腾讯云主页:https://cloud.tencent.com/developer/column/72548