轻量级HTTP服务器/反向代理服务器nginx 主讲人:高俊峰 华章培训网、[www.hztraining.com]华章培训网版权所有
Nginx的URL重写和反向代理功能 第二讲 内容概述 Nginx下常见的正则语法及含义 nginx的URL重写功能应用实例 实例介绍Nginx的反向代理功能 华章培训网、[www.hztraining.com]华章培训网版权所有
Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 nginx的URL重写模块是用的比较多的模块之一,因此拿出来单独讲述,常用的URL重写模块指令有if、rewrite、set、break、return等指令,分别讲述如下。
Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 if指令 语法:if (condition) { … } 默认值:none 使用字段:server, location 判断一个条件,如果条件成立,则后面的大括号内的语句将执行,相关配置从上级继承。 可以在判断语句中指定下列值:
Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 正则表达式匹配: ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配: -f和!-f用来判断是否存在文件 -d和!-d用来判断是否存在目录 -e和!-e用来判断是否存在文件或目录 -x和!-x用来判断文件是否可执行
Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 Nginx常用的内置全局变量含义: $args 此变量与请求行中的参数相等 $document_root 等同于当前请求的root指令指定的值 $document_uri 与$uri一样 $host 与请求头部中“Host”行指定的值 $limit_rate 允许限制的连接速率 $request_method 等同于request的method,通常是“GET”或“POST” $remote_addr 客户端ip $remote_port 客户端port $remote_user 等同于用户名,由ngx_http_auth_basic_module认证 $request_filename 当前请求的文件的路径名,由root或alias和URI request组合而成 $request_uri 含有参数的完整的初始URI $query_string 与$args一样 $server_name 请求到达的服务器名 $server_port 请求到达的服务器的端口号 $uri 等同于当前request中的URI。
Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 if指令示例配置: location ~*\.(gif|jpg|jpeg|png|bmp|swf|htm|html)$ { root /cicro/wcm/vhosts/www.kisslan.com/ROOT; if (!-f $request_filename) { root /cicro/wcm; } root /cicro/wcm/vhosts/common; location ~*\.(jsp)$ { proxy_pass http://127.0.0.1:8888;
Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 rewrite指令 语法:rewrite regex replacement flag 默认值:none 使用字段:server, location, if 按照相关的正则表达式与字符串修改URI,指令按照在配置文件中出现的顺序执行。可以在重写指令后面添加标记。如果替换的字符串以http://开头,请求将被重定向,并且不再执行多余的rewrite指令。尾部的标记(flag)可以是以下的值: * last 相当于Apache里的[L]标记,表示完成rewrite之后搜索相应的URI或location * break 终止匹配, 不再匹配后面的规则 * redirect 返回302临时重定向 地址栏会显示跳转后的地址 * permanent 返回301永久重定向 地址栏会显示跳转后的地址
Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 ~^ 表示只匹配字符串,不查询正则表达式。 示例配置1: 将请求为http://192.168.12.251:51888/best/index.html的页面重定向到http://demo.cicro.net/test/index.html而不引起浏览器地址栏中url的变化: location ~^/best/ { rewrite ^/best/(.*)$ /test/$1 break; proxy_pass http://demo.cicro.net; }
Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 set指令 语法:set variable value 默认值:none 使用字段:server, location, if 指令设置一个变量并为其赋值,其值可以是文本、变量和它们的组合。也可以使用set定义一个新的变量,但是不能使用set设置$http_xxx头部变量的值。
Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 示例配置: 将请求为http://192.168.12.251:51888/wp/?p=110的页面重写到地址http://192.168.12.251:51888/wordpress/?p=110,也就是重写带参数的URL的方法 set $query $query_string; rewrite /wp /wordpress?$query?; 这里涉及到$query_string变量,这个变量等于请求行中的参数,也可以用$args代替$query_string。
Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 break指令: 语法:break 默认值:none 使用字段:server, location, if 完成当前设置的规则,停止执行其他的重写指令。 示例: if ($slow) { limit_rate 10k; break; }
Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 return指令 语法:return code 默认值:none 使用字段:server, location, if 这个指令结束执行配置语句并为客户端返回状态代码,可以使用下列的值:204,400,402-406,408,410, 411, 413, 416与500-504。
实例介绍Nginx的反向代理功能 1.Nginx多域名跳转实例 aaa.com———>a.b.c.d:8080/web aaa.com/admin–>a.b.c.d:8080/admin bbb.com———->a.b.c.d:8080/wap nginx的简化配置如下: server aaa.com location / { proxy_pass http://a.b.c.d:8080/web/ } location /admin{ proxy_pass http://a.b.c.d:8080/admin server bbb.com proxy_pass http://a.b.c.d:8080/wap/
实例介绍Nginx的反向代理功能 2、新旧域名过渡时期通过nginx重定向的方法 要进行域名更换过度时期新旧域名的过度,可以通过设置nginx下面的方法实现: 第一种方法是判断nginx核心变量host,nginx老版本是http_host: server { server_name www.aaa.net www.bbb.net; if ($host != 'www.aaa.net' ) { rewrite ^/(.*)$ http://www.aaa.net/$1 permanent; } ... 第二种方法: server_name www.bbb.net; rewrite ^/(.*)$ http://www.aaa.net/$1 permanent; 这两种方法中, permanent是关键。
实例介绍Nginx的反向代理功能 3、alias在Nginx下的应用 location /i/ { alias /www/w3/images/; } 这个例子中,请求”/i/top.gif”将返回这个文件: ”/www/w3/images/top.gif”。正如我们所看到的,uri中location后面的部分会追加到这个目录后面,而location自身是“丢弃的” 如果使用root指令的话会进行完整的追加,如上例中,如果使用root指令则返回:”/www/w3/images/i/top.gif” Alias同样可以用于带正则表达式的location,如: location ~ ^/download/(.*)$ { alias /home/website/files/$1; }请求”/download/book.pdf”将返回”/home/website/files/book.pdf”。同样注意,uri中location后面的部分会追加到这个目录后面。同样,也可以在别名目录字段中使用变量。
实例介绍Nginx的反向代理功能 3、alias在Nginx下的应用 Alias与root的区别: location /abc/ { alias /home/html/abc/; } 在这段配置下,http://test/abc/a.html就指定的是/home/html/abc/a.html。这段配置亦可改成 root /home/html/; 这样,nginx就会去找/home/html/目录下的abc目录了,得到的结果是相同的。 总结:一般情况下,在location /中配置root,在location /other中配置alias是一个好习惯。
实例介绍Nginx的反向代理功能 4、location指令应用实例 基本用法: location = / { # 只匹配对 / 目录的查询. } location / { # 匹配以 / 开始的查询,即所有查询都匹配。 location ^~ /images/ { # 匹配以 /images/ 开始的查询,并且停止搜索。任何正则表达式将不会被检查。 location ~* \.(gif|jpg|jpeg)$ { # 匹配以gif, jpg, or jpeg结尾的文件,但优先级低于“^~ /images/ ”。
实例介绍Nginx的反向代理功能 4、location指令应用实例 Nginx 实现Apache一样目录列表 location / { autoindex on; } 使用ngx_http_access_module限制ip访问 deny 192.168.12.1; allow 192.168.12.0/24; allow 10.1.1.0/16; deny all;
实例介绍Nginx的反向代理功能 4、location指令应用实例 禁止访问某个目录 location ~ ^/(WEB-INF)/ { deny all; } Nginx下禁止访问*.txt、*.doc文件 location ~* \.(txt|doc)${ root /data/www/wwwroot/test;
http://www. hztraining.com 感谢您对华章培训网的支持! http://www. hztraining.com