nginx rewrite模块之if和return

ngx_http_rewrite_module

将用户请求的URI基于PCRE regex所描述的模式进行检查,而后完成重定向替换
 

if:
Syntax: if (condition) { ... }
  Default: —
  Context: server, location
  条件满足时,执行配置块中的配置指令
condition:
  比较操作符:
    = 相同 != 不同
    ~ 模式匹配,区分字符大小写
    ~* 模式匹配,不区分字符大小写
    !~ 模式不匹配,区分字符大小写
    !~* 模式不匹配,不区分字符大小写
  文件及目录存在性判断:
    -e,!-e 存在与否(包括文件,目录,软链接)
    -f,!-f 文件
    -d,!-d 目录
    -x,!-x 执行

 

注意: if (condition) { ... } 语句中,如果$变量的值为空字符串或是以0开头的任意字符串,则 if 指令认为该条件为false,其它条件为true

 

return:
  return code [text]; #返回客户端指定的状态码和文本说明
  return code URL;
  return URL;

停止处理,并返回给客户端指定的响应码(包括: 204, 400, 402 — 406, 408, 410, 411, 413, 416, 500 — 504),
对 301, 302, 303, 307, 308跳转到URL
  在版本1.1.16和1.0.13之前,代码307没有被视为重定向
  在版本1.13.0之前,代码308未被视为重定向
Default: —
Context: server, location, if

示例:return实现URL重写

[root@centos7.6 certs]# vim /apps/nginx4/conf/conf.d/test.conf 

server {
        listen 443 ssl;
        listen 80;
        server_name www.magedu.org;
        root /data/site14/;
        #ssl on;
        ssl_certificate /apps/nginx4/ssl/magedu.org.crt;
        ssl_certificate_key /apps/nginx4/ssl/magedu.org.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;
        access_log /apps/nginx4/logs/magedu.org.ssl.access.log  access_json ;
        location / {
                if ( $scheme = http ){
                        return 301 https://www.magedu.org;      #条件判断重定向
                }
        }
}
#server {

#       server_name www.magedu.org;
#       root /data/site14/;
#       access_log /apps/nginx4/logs/magedu.org.access.log  access_json ;
#       default_type text/html ;
#}

验证:

[root@centos7.6 certs]# curl -I http://www.magedu.org/
HTTP/1.1 301 Moved Permanently
Server: nginx/1.14.2
Date: Sun, 07 Mar 2021 07:16:56 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: https://www.magedu.org

[root@centos7.6 certs]# curl -Lk http://www.magedu.org/
/data/site14/index.html

示例:拒绝curl访问

配置:
[root@centos7.6 certs]# vim /apps/nginx4/conf/conf.d/test.conf server { listen 443 ssl; listen 80; server_name www.magedu.org; root /data/site14/; #ssl on; ssl_certificate /apps/nginx4/ssl/magedu.org.crt; ssl_certificate_key /apps/nginx4/ssl/magedu.org.key; ssl_session_cache shared:sslcache:20m; ssl_session_timeout 10m; access_log /apps/nginx4/logs/magedu.org.ssl.access.log access_json ; location / { if ($http_user_agent ~* curl) { return 301; } } }
验证: [root@centos7.
6 certs]# curl http://www.magedu.org <html> <head><title>301 Moved Permanently</title></head> <body bgcolor="white"> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx/1.14.2</center> </body> </html>

 

配置:
[root@centos7.6 certs]# vim /apps/nginx4/conf/conf.d/test.conf server { listen 443 ssl; listen 80; server_name www.magedu.org; root /data/site14/; #ssl on; ssl_certificate /apps/nginx4/ssl/magedu.org.crt; ssl_certificate_key /apps/nginx4/ssl/magedu.org.key; ssl_session_cache shared:sslcache:20m; ssl_session_timeout 10m; access_log /apps/nginx4/logs/magedu.org.ssl.access.log access_json ; location / { if ($http_user_agent ~* curl) { return 444; } } }
验证:停止处理并将指定的代码返回给客户端。非标准代码444在不发送响应报头的情况下关闭连接 [root@centos7.
6 certs]# curl http://www.magedu.org curl: (52) Empty reply from server

 

配置:
[root@centos7.6 certs]# vim /apps/nginx4/conf/conf.d/test.conf server { listen 443 ssl; listen 80; server_name www.magedu.org; root /data/site14/; #ssl on; ssl_certificate /apps/nginx4/ssl/magedu.org.crt; ssl_certificate_key /apps/nginx4/ssl/magedu.org.key; ssl_session_cache shared:sslcache:20m; ssl_session_timeout 10m; access_log /apps/nginx4/logs/magedu.org.ssl.access.log access_json ; location / { if ($http_user_agent ~* curl) { return 405 ; } } }
验证: [root@centos7.
6 certs]# curl http://www.magedu.org <html> <head><title>405 Not Allowed</title></head> <body bgcolor="white"> <center><h1>405 Not Allowed</h1></center> <hr><center>nginx/1.14.2</center> </body> </html>

 

配置:临时跳转
[root@centos7.6 certs]# vim /apps/nginx4/conf/conf.d/test.conf server { listen 443 ssl; listen 80; server_name www.magedu.org; root /data/site14/; #ssl on; ssl_certificate /apps/nginx4/ssl/magedu.org.crt; ssl_certificate_key /apps/nginx4/ssl/magedu.org.key; ssl_session_cache shared:sslcache:20m; ssl_session_timeout 10m; access_log /apps/nginx4/logs/magedu.org.ssl.access.log access_json ; location / { if ($http_user_agent ~* curl) { return http://www.magedu.com ; #curl的结果默认302,临时跳转 } } } 配置:永久跳转 [root@centos7.6 certs]# vim /apps/nginx4/conf/conf.d/test.conf server { listen 443 ssl; listen 80; server_name www.magedu.org; root /data/site14/; #ssl on; ssl_certificate /apps/nginx4/ssl/magedu.org.crt; ssl_certificate_key /apps/nginx4/ssl/magedu.org.key; ssl_session_cache shared:sslcache:20m; ssl_session_timeout 10m; access_log /apps/nginx4/logs/magedu.org.ssl.access.log access_json ; location / { if ($http_user_agent ~* curl) { return 301 http://www.magedu.com ; #curl的结果301,永久跳转 } } }

 

 

 

posted @ 2024-08-29 09:09  起点·漫步前行  阅读(127)  评论(0)    收藏  举报