1 ~ #表示匹配过程中区分大小写; 2 ~* #表示匹配过程中不区分大小写; 3 !~ #如果 ‘~‘ 匹配失败时,那么该条件就为true; 4 !~* #如果 ‘~*‘ 匹配失败时,那么该条件就为true。
1 if ($http_user_agent ~ MSIE) { 2 …… 3 }
1 if ( $http_user_agent ~* "(Android)|(iPhone)|(Mobile)|(WAP)|(UCWEB)" ){ 2 rewrite ^/$ http://www.cnblogs.com permanent; 3 }
1 -f #如果请求的文件存在,那么该条件为true; 2 !-f #如果该文件的目录存在,该文件不存在,那么返回true。如果该文件和目录都不存
1 if (-f $request_filename) { 2 …… 3 }
1 if (!-f $request_filename) { 2 …… 3 }
1 -d #如果请求的目录存在,则返回true。否则返回false; 2 !-d #如果请求的目录不存在,但是该请求的上级目录存在,则返回true。如果该上级目录不存在,则返回false。 3 -e和!-e #用来判断是否存在文件或目录 4 -x和!-x #用来判断文件是否可执行
1 last #表示完成rewrite,之后继续向下匹配新的location URI规则,浏览器地址栏URL地址不变。 2 break #本条规则匹配完成后,终止匹配, 不再匹配后面的规则,完成重写指令,浏览器地址栏URL地址不变。 3 redirect #返回302临时重定向,浏览器地址会显示跳转新的URL地址。 4 permanent #返回301永久重定向,浏览器地址会显示跳转新的URL地址。
$args #该变量中存放了请求URL中的请求指令,同$query_string; $content_length #该变量中存放了HTTP请求头中的Content-length字段。; $content_type #该变量中存放了HTTP请求头中的Content-type字段; $document_root #该变量中存放了针对当前请求的根路径。 $document_uri #该变量中存放了请求的当前URI, 但是不包括请求指令; $host #变量中存放了请求的URL中的主机部分字段,如果请求中没有Host行,则等于设置的服务器名; $http_host #该变量与$host唯一区别带有端口号; $http_user_agent #该变量中存放客户端的代理信息; $http_cookie #该变量中存放客户端的cookie信息。 $limit_rate #对连接速率的限制; $request_method #请求的方法,比如"GET"、"POST"等; $remote_addr #该变量中存放客户端的地址; $remote_port #该变量中存放了客户端与服务器建立连接的端口号; $remote_user #该变量中存放客户端的用户名,认证用; $request_filename #该变量中存放了当前请求的资源文件的路径名; $request_body_file #该变量中存放了发给后端服务器的本地文件资源的名称; $request_method #该变量中存放了客户端的请求方式,比如 ‘GET‘、‘POST‘等。 $request_uri #该变量中存放了当前请求的URI,并且带请求指令,即带查询字符串,不包含主机名,如:”/foo/bar.php?arg=baz”; $query_string #与$args相同; $scheme #该变量中存放了客户端请求使用的协议,比如http或者是https; $server_protocol #该变量中存放了客户端请求协议的版本请求的协议版本,"HTTP/1.0"或"HTTP/1.1"; $server_addr #服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费); $server_name #请求到达的服务器名; $server_port #请求到达的服务器端口号; $uri #请求的URI,可能和最初的值有不同,比如经过重定向之类的。
$host:demo.linuxds.com $server_port:88 $request_uri:http://demo.linuxds.com:88/test1/test2/test.php $document_uri:/test1/test2/test.php $document_root:/var/www/html $request_filename:/var/www/html/test1/test2/test.php
server{ listen 80; server_name www.linuxds.com; return 403; rewrite /(.*) /abc/$1; #该行配置位于return后,则不会被执行。 }
示例02:
server { ..... if ($request_uri ~ "\.htpasswd|\.bak") { return 404; rewrite /(.*) /aaa.txt; #该行配置位于return后,则不会被执行。 } #如下为其他server,不受上一个server中的return影响,即若下面还有其他配置,会被执行。 ..... }
1 server{ 2 listen 80; 3 server_name www.linuxds.com; 4 return 200 "hello"; 5 }
1 location ^~ /aming { 2 default_type application/json ; 3 return 200 ‘{"name":"xhy","id":"100"}‘; 4 } #返回的字符串也支持json数据。
1 location /test { 2 return 200 "$host $request_uri"; 3 } #返回的字符串也支持变量
server{ listen 80; server_name www.linuxds.com; return http://www.linuxds.com/123.html; rewrite /(.*) /abc/$1; #该行配置位于return后,则不会被执行。 }
1 rewrite ^/(.*) http://www.baidu.com/$1 permanent;
[root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite01.conf server { listen 80; server_name cnblogs.linuxds.com; access_log /var/log/nginx/cnblogs.access.log main; error_log /var/log/nginx/cnblogs.error.log warn; location / { if ($host = ‘cnblogs.linuxds.com‘) { rewrite ^/(.*) http://www.cnblogs.com redirect; } } }
1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf #检查配置文件 2 [root@nginx01 ~]# nginx -s reload #重载配置文件
1 [root@nginx01 ~]# mkdir /usr/share/nginx/file/ 2 [root@nginx01 ~]# echo ‘<h1>File</h1>‘ > /usr/share/nginx/file/index.html
[root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite02.conf server { listen 80; server_name file.linuxds.com; access_log /var/log/nginx/file.access.log main; error_log /var/log/nginx/file.error.log warn; location ~ .* { root /usr/share/nginx/file; if ( !-e $request_filename ) { rewrite ^ http://www.cnblogs.com redirect; } } }
1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf #检查配置文件 2 [root@nginx01 ~]# nginx -s reload #重载配置文件
1 [root@nginx01 ~]# mkdir /usr/share/nginx/constant/ 2 [root@nginx01 ~]# echo ‘<h1>Constant</h1>‘ > /usr/share/nginx/constant/index.html
[root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite03.conf server { listen 80; server_name constant.linuxds.com; access_log /var/log/nginx/constant.access.log main; error_log /var/log/nginx/constant.error.log warn; location ~ .* { root /usr/share/nginx/constant; if ( !-e $request_filename ) { rewrite ^ /itzgr/ break; proxy_pass http://www.cnblogs.com; } } }
1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf #检查配置文件 2 [root@nginx01 ~]# nginx -s reload #重载配置文件 配置解释:结合if指令来对nginx请求进行判断,若访问http://constant.linuxds.com的资源存在root目录,则返回,若当前请求的资源文件不存在,则进行重定向跳转,重定向至http://www.cnblogs.com/itzgr。 浏览测试:访问不存在的资源http://constant.linuxds.com/aaaa,进行测试。 clipboard 2.4 配置示例04 1 [root@nginx01 ~]# mkdir /usr/share/nginx/last/ 2 [root@nginx01 ~]# echo ‘<h1>Last</h1>‘ > /usr/share/nginx/last/index.html
[root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite04.conf server { listen 80; server_name last.linuxds.com; access_log /var/log/nginx/last.access.log main; error_log /var/log/nginx/last.error.log warn; location ~ .* { root /usr/share/nginx/last; rewrite /last.html /index.html last; } }
1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf #检查配置文件 2 [root@nginx01 ~]# nginx -s reload #重载配置文件
1 [root@nginx01 ~]# mkdir /usr/share/nginx/break/ 2 [root@nginx01 ~]# echo ‘<h1>Break</h1>‘ > /usr/share/nginx/break/index.html
[root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite05.conf server { listen 80; server_name break.linuxds.com; access_log /var/log/nginx/break.access.log main; error_log /var/log/nginx/break.error.log warn; location ~ .* { root /usr/share/nginx/break; rewrite /break.html /index.html break; } }
1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf #检查配置文件 2 [root@nginx01 ~]# nginx -s reload #重载配置文件
1 [root@nginx01 ~]# mkdir /usr/share/nginx/rewrite/ 2 [root@nginx01 ~]# echo ‘<h1>Rewrite</h1>‘ > /usr/share/nginx/rewrite/index.html
[root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite06.conf server { listen 80; server_name rewrite.linuxds.com; access_log /var/log/nginx/rewrite.access.log main; error_log /var/log/nginx/rewrite.error.log warn; location ~ .* { root /usr/share/nginx/rewrite; rewrite /rewrite.html /index.html redirect; } }
1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf #检查配置文件 2 [root@nginx01 ~]# nginx -s reload #重载配置文件
1 [root@nginx01 ~]# mkdir /usr/share/nginx/permanent/ 2 [root@nginx01 ~]# echo ‘<h1>Permanent</h1>‘ > /usr/share/nginx/permanent/index.html
[root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite07.conf server { listen 80; server_name permanent.linuxds.com; access_log /var/log/nginx/permanent.access.log main; error_log /var/log/nginx/permanent.error.log warn; location ~ .* { root /usr/share/nginx/permanent; rewrite /permanent.html /index.html permanent; } }
1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf #检查配置文件 2 [root@nginx01 ~]# nginx -s reload #重载配置文件
1 [root@nginx01 ~]# mkdir -p /usr/share/nginx/dirweb/dir 2 [root@nginx01 ~]# echo ‘<h1>Dirweb</h1>‘ > /usr/share/nginx/dirweb/dir/index.html
[root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite08.conf server { listen 80; server_name dirweb.linuxds.com; access_log /var/log/nginx/dirweb.access.log main; error_log /var/log/nginx/dirweb.error.log warn; location ~ .* { root /usr/share/nginx/dirweb/; rewrite ^/html/(.+?).html$ /dir/$1.html permanent; } }
1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf #检查配置文件 2 [root@nginx01 ~]# nginx -s reload #重载配置文件
1 [root@nginx01 ~]# mkdir -p /usr/share/nginx/lbreak 2 [root@nginx01 ~]# echo ‘<h1>Lbreak</h1>‘ > /usr/share/nginx/lbreak/index.html 3 [root@nginx01 ~]# echo ‘<h1>Test_Lbreak</h1>‘ > /usr/share/nginx/lbreak/test.html
[root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite09.conf server { listen 80; server_name lbreak.linuxds.com; access_log /var/log/nginx/lbreak.access.log main; error_log /var/log/nginx/lbreak.error.log warn; root /usr/share/nginx/lbreak/; location / { rewrite /last/ /test.html last; rewrite /break/ /test.html break; } location = /test.html { return http://www.cnblogs.com; } }
1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf #检查配置文件 2 [root@nginx01 ~]# nginx -s reload #重载配置文件
1 [root@nginx01 ~]# mkdir -p /usr/share/nginx/admin/xhy 2 [root@nginx01 ~]# echo ‘<h1>Admin</h1>‘ > /usr/share/nginx/admin/admin.html
1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite10.conf 2 server { 3 listen 80; 4 server_name admin.linuxds.com; 5 access_log /var/log/nginx/admin.access.log main; 6 error_log /var/log/nginx/admin.error.log warn; 7 root /usr/share/nginx/admin/; 8 location / { 9 rewrite /xhyadmin.html /admin.html break; 10 } 11 location /admin.html { 12 return 403; 13 } 14 }
1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf #检查配置文件 2 [root@nginx01 ~]# nginx -s reload #重载配置文件
1 # 如果文件不存在则返回400 2 if (!-f $request_filename) { 3 return 400; 4 }
1 # 如果host不是demo.linuxds.com,则301到www.baidu.com中 2 if ( $host != ‘demo.linuxds.com‘ ){ 3 rewrite ^/(.*)$ https://www.baidu.com/$1 permanent; 4 }
1 # 如果请求类型不是POST则返回405 2 if ($request_method = POST) { 3 return 405; 4 }
1 # 如果参数中有 a=1 则301到demo.linuxds.com 2 if ($args ~ a=1) { 3 rewrite ^ http://demo.linuxds.com/ permanent; 4 }
1 # 如果客户使用IE浏览器访问,则重定向到/nginx-ie目录下: 2 if ($http_user_agent ~ MSIE) { 3 rewrite ^(.*)$ /nginx-ie/$1 break; 4 }
1 # 多目录重定向为参数的形式。 2 # 将xhy.linuxds.com/images/girl 重定向为 xhy.linuxds.com/index.php?act=images&name=xhy&id=girl参数的形式。 3 if ($host ~* (.*)\.domain\.com) { 4 set $sub_name $1; 5 rewrite ^/images\/(\d+)\/?$ /index.php?act=images&cid=$sub_name&id=$1 last; 6 }
1 # 将目录对调,/images/girl -> /girl?id=images。 2 rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;
1 # 目录通过重定向自动追加/ 2 if (-d $request_filename){ 3 rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; 4 }
1 # 简单域名重定向 2 server 3 { 4 listen 80; 5 server_name xhy.linuxds.com; 6 index index.html index.htm index.php; 7 root /usr/share/nginx/xhy/; 8 rewrite ^/ http://www.cnblogs.com; 9 access_log off; 10 } 11 server { 12 listen 80; 13 server_name linuxds.com www.linuxds.com; 14 if ($host != ‘www.linuxds.com‘ ) { 15 rewrite ^/(.*)$ http://www.linuxds.com/$1 permanent; 16 } 17 }
1 # 指定域名重定向 2 server_name xhy.linuxds.com xhy.linuxds.cn; 3 index index.html index.htm index.php; 4 root /usr/share/nginx/xhy/; 5 if ($host ~ "linuxds\.cn") { 6 rewrite ^(.*) http://xhy.linuxds.com$1/ permanent; 7 }
1 # 多域名重定向 2 server_name xhy.linuxds.com xhy.linuxds.cn xhy.linuxds.net; 3 index index.html index.htm index.php; 4 root /usr/share/nginx/xhy/; 5 if ($host !~ "linuxds\.com") { 6 rewrite ^(.*) http://xhy.linuxds.com/$1 permanent; 7 }
1 # 三级域名跳转。 2 if ($http_host ~* "^(.*)\.i\.linuxds\.com$") { 3 rewrite ^(.*) http://xhy.linuxds.com$1/; 4 break; 5 }
1 # 域名镜像 2 server 3 { 4 listen 80; 5 server_name mirror.linuxds.com; 6 index index.html index.htm index.php; 7 root /usr/share/nginx/xhy/; 8 rewrite ^/(.*) http://xhy.linuxds.com/$1 last; 9 access_log off; 10 }
原文:https://www.cnblogs.com/liujunjun/p/14128992.html