location
Nginx 的 locaiton 作⽤是根据⽤户请求的 URI 不同,来执行不同的应用。针对用户请求的网站URL 进行匹配,匹配成功后进行对应的操作。
location [ = | ~| ~* | ^~ ] url {#指定对应的动作
}
正则表达式解释
匹配符 | 匹配规则 | 优先级 |
= | 精确匹配 | 1 |
^~ | 以某个字符串开头,不做正则 | 2 |
~* | 正则匹配 | 3 |
/blog/ | 匹配常规字符串,有正则就优先正则 | 4 |
/ | 通⽤匹配,不符合其他location的默认匹配 | 5 |
实战
修改 nginx.conf
#user nobody;
worker_processes 1;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;# gzip on;server {listen 83;server_name _;#最低级匹配,不符合其他locaiton就来这location / {return 401;}#优先级最⾼location = / {return 402;}#以/blog/开头的url,来这⾥,如符合其他locaiton,则以其他优先location /blog/ {return 403;}#匹配任何以/img/开头的请求,不匹配正则location ^~ /img/ {return 404;}}
}
访问localhost:83/
访问localhost:83/blog/
访问localhost:83/img/
rewrire
Nginx rewrire技术主要是实现URL地址重写,且⽀持正则表达式的规则。 通过rewrite可以规范URL、根据变量进⾏URL跳转等,常⽤的功能如
- 对于爬⾍的封禁,让其跳转无用页面
- 动态的URL伪装成HTMl⻚⾯,便于搜索引擎的抓取
- 旧域名、旧⽬录的更新,需要跳转到新的URL地址
语法
rewrite ^/(.*) http://www.baidu.com/$1 permanent;
rewrite是指令,开启⼀个跳转规则正则是 ^/(.*) 表示匹配所有,匹配成功后跳转到后⾯的url地址$1 表示取出前⾯正则括号⾥的内容permanent表示 301 重定向的标记
参数解析
标记 | 解释 |
last | 规则匹配完成后,继续向下匹配新的 Locaiton |
break | 本条规则完成匹配后,⽴即停⽌ |
redirect | 返回 302 临时重定向,浏览器地址栏显示跳转后的 URL |
permanent | 返回 301 永久重定向,浏览器地址显示跳转后的 URL |
- last和break⽤于实现URL重写,浏览器地址栏不发⽣变化
- redirect和permanent⽤于实现URL跳转,浏览器地址栏跳转新的URL
访问localhost:90/
跳转百度