一、location

1.1 概述

  location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。

1.2 location的语法

  1. =开头表示精确匹配
  2. ^~ 开头表示uri以某个常规字符串开头,不是正则匹配
  3. ~ 开头表示区分大小写的正则匹配;
  4. ~* 开头表示不区分大小写的正则匹配
  5. / 通用匹配, 如果没有其它匹配,任何请求都会匹配到

1.3 Location正则案例

  1. 精确匹配,/后面不能带任何字符
server {
listen 80;
server_name www.haoworld.cn;
#精确匹配,注解后面不能带任何字符
location =/ {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
  1. 匹配所有以/开头请求
server {
listen 80;
server_name www.haoworld.cn;
#匹配所有以/开头请求
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
  1. 以开头/hao_8080拦截 默认开启不区分大小写

  • 在nginx中配置proxy_pass时,当在后面的url加上了/,相当于是绝对路径,则nginx不会把location中匹配的路径部分加入代理uri;如果没有/,则会把匹配的路径部分加入代理uri。

server {
listen 80;
server_name www.hao.cn; #访问www.hao.cn/hao_8080 最终跳转到 http://127.0.0.1:8080/;
location /hao_8080/ {
proxy_pass http://127.0.0.1:8080/;
index index.html index.htm;
} #访问www.hao.cn/hao_8081 最终跳转到http://127.0.0.1:8081/;
location /hao_8081/ {
proxy_pass http://127.0.0.1:8081/;
index index.html index.htm;
} #访问www.hao.cn/hao_8081 最终跳转到http://127.0.0.1:8081/hao_8081;
location /hao_8081/ {
proxy_pass http://127.0.0.1:8081; # 注意这里结尾处没有/ ;
index index.html index.htm;
} }

二、nginx rewrite

  1. Nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。rewrite只能放在server{},location{},if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用。
  2. Rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。
  3. 通过Rewrite规则,可以实现规范的URL、根据变量来做URL转向及选择配置。

2.1 rewrite全局变量

  nginx的rewrite规则就是使用正则匹配请求的url,然后根据定义的规则进行重写和改变,需ngx_http_rewrite_module模块来支持url重写功能,该模块是标准模块,默认已经安装。

变量       含义
$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相同。

2.2 判断IP地址来源

 ## 如果访问的ip地址为192.168.5.165,则返回403
if ($remote_addr = 192.168.5.166) {
return 403;
}

2.3 限制浏览器访问

## 不允许谷歌浏览器访问 如果是谷歌浏览器返回500
if ($http_user_agent ~ Chrome) {
return 500;
}

最新文章

  1. 相同根域名下跨域共享session的解决方案
  2. QT-4.8.6 编译配置过程
  3. IOS - 屏幕适配
  4. html行内元素和块元素标签分组
  5. 自己写jstl标签解析long时间
  6. Samba & Nginx - Resource temporarily unavailable
  7. 使用LayUI操作数据表格
  8. ASP.NET CORE入门之读取Json配置文件
  9. Angular UI框架 Ng-alain @delon的脚手架的生成开发模板
  10. JSON File Parse
  11. Netty 系列七(那些开箱即用的 ChannelHandler).
  12. height、clientHeight、offsetHeight、scrollHeight、height()、 innerHeight()、outerHeight()等的区别
  13. docker-compose学习
  14. Android应用系列:手把手教你做一个小米通讯录(附图附源码)
  15. i.s.h.med Enhancement for cancelling an appointment
  16. ArcGIS案例学习笔记-查找重叠的多边形
  17. jsonp的理解
  18. svn commit --cl app 时手动输入提交的注释,而不是在 -m 'comments here'这里输入
  19. 多页面应用_vue
  20. MFC+WinPcap编写一个嗅探器之一(准备)

热门文章

  1. 自定义itemCheckView
  2. pipreqs 生成requirements.txt文件时编码错误问题
  3. python basemap readshapefile二三事
  4. final,权限,引用类型数据
  5. Mac 安装 homebrew 流程 以及 停在 Updating Homebrew等 常见错误解决方法
  6. js全选与取消全选
  7. HBase 系列(五)——HBase 常用 Shell 命令
  8. Yarn上常驻Spark-Streaming程序调优
  9. Android进阶之绘制-自定义View完全掌握(五)
  10. C++ 重载运算符(详)