1 / 21

轻量级 HTTP 服务器 / 反向代理服务器 nginx

轻量级 HTTP 服务器 / 反向代理服务器 nginx. 主讲人: 高俊峰. 华章培训网、 [www.hztraining.com] 华章培训网版权所有. Nginx 的 URL 重写和反向代理功能 第二讲. 内容概述 Nginx 下常见的正则语法及含义 nginx 的 URL 重写功能应用实例 实例介绍 Nginx 的反向代理功能. 华章培训网、 [www.hztraining.com] 华章培训网版权所有. Nginx 下常见的正则语法及含义. 1 、 URL 重写模块( Rewrite )常用指令

leann
Download Presentation

轻量级 HTTP 服务器 / 反向代理服务器 nginx

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 轻量级HTTP服务器/反向代理服务器nginx 主讲人:高俊峰 华章培训网、[www.hztraining.com]华章培训网版权所有

  2. Nginx的URL重写和反向代理功能第二讲 内容概述 Nginx下常见的正则语法及含义 nginx的URL重写功能应用实例 实例介绍Nginx的反向代理功能 华章培训网、[www.hztraining.com]华章培训网版权所有

  3. Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 nginx的URL重写模块是用的比较多的模块之一,因此拿出来单独讲述,常用的URL重写模块指令有if、rewrite、set、break、return等指令,分别讲述如下。

  4. Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 if指令 语法:if (condition) { … } 默认值:none 使用字段:server, location 判断一个条件,如果条件成立,则后面的大括号内的语句将执行,相关配置从上级继承。 可以在判断语句中指定下列值:

  5. Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 正则表达式匹配: • ~ 为区分大小写匹配 • ~* 为不区分大小写匹配 • !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配: • -f和!-f用来判断是否存在文件 • -d和!-d用来判断是否存在目录 • -e和!-e用来判断是否存在文件或目录 • -x和!-x用来判断文件是否可执行

  6. 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。

  7. 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; } if (!-f $request_filename) { root /cicro/wcm/vhosts/common; } } location ~*\.(jsp)$ { root /cicro/wcm/vhosts/www.kisslan.com/ROOT; if (!-f $request_filename) { root /cicro/wcm/vhosts/common; } proxy_pass http://127.0.0.1:8888; }

  8. 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永久重定向 地址栏会显示跳转后的地址

  9. 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; }

  10. Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 set指令 语法:set variable value 默认值:none 使用字段:server, location, if 指令设置一个变量并为其赋值,其值可以是文本、变量和它们的组合。也可以使用set定义一个新的变量,但是不能使用set设置$http_xxx头部变量的值。

  11. 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。

  12. Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 break指令: 语法:break 默认值:none 使用字段:server, location, if 完成当前设置的规则,停止执行其他的重写指令。 示例: if ($slow) { limit_rate 10k; break; }

  13. Nginx下常见的正则语法及含义 1、URL重写模块(Rewrite)常用指令 return指令 语法:return code 默认值:none 使用字段:server, location, if 这个指令结束执行配置语句并为客户端返回状态代码,可以使用下列的值:204,400,402-406,408,410, 411, 413, 416与500-504。

  14. 实例介绍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 location / { proxy_pass http://a.b.c.d:8080/wap/ }

  15. 实例介绍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 { server_name www.bbb.net; rewrite ^/(.*)$ http://www.aaa.net/$1 permanent; } 这两种方法中, permanent是关键。

  16. 实例介绍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后面的部分会追加到这个目录后面。同样,也可以在别名目录字段中使用变量。

  17. 实例介绍Nginx的反向代理功能 3、alias在Nginx下的应用 Alias与root的区别: location /abc/ { alias /home/html/abc/; } 在这段配置下,http://test/abc/a.html就指定的是/home/html/abc/a.html。这段配置亦可改成 location /abc/ { root /home/html/; } 这样,nginx就会去找/home/html/目录下的abc目录了,得到的结果是相同的。 总结:一般情况下,在location /中配置root,在location /other中配置alias是一个好习惯。

  18. 实例介绍Nginx的反向代理功能 4、location指令应用实例 基本用法: location = / { # 只匹配对 / 目录的查询. } location / { # 匹配以 / 开始的查询,即所有查询都匹配。 } location ^~ /images/ { # 匹配以 /images/ 开始的查询,并且停止搜索。任何正则表达式将不会被检查。 } location ~* \.(gif|jpg|jpeg)$ { # 匹配以gif, jpg, or jpeg结尾的文件,但优先级低于“^~ /images/ ”。 }

  19. 实例介绍Nginx的反向代理功能 4、location指令应用实例 Nginx 实现Apache一样目录列表 location / { autoindex on; } 使用ngx_http_access_module限制ip访问 location / { deny 192.168.12.1; allow 192.168.12.0/24; allow 10.1.1.0/16; deny all; }

  20. 实例介绍Nginx的反向代理功能 4、location指令应用实例 禁止访问某个目录 location ~ ^/(WEB-INF)/ { deny all; } Nginx下禁止访问*.txt、*.doc文件 location ~* \.(txt|doc)${ root /data/www/wwwroot/test; deny all; }

  21. 感谢您对华章培训网的支持! http://www. hztraining.com

More Related