15、Nginx – rewrite重写模块-生产环境实例

版权声明:原创作品,谢绝转载!否则将追究法律责任。 ————— 作者:kirin


生产环境实例:

(1)根据用户浏览器请求头中携带的语言调度到不同的页面
server {
    listen 80;
    server_name localhost;
    root /test;
 
    if ($http_accept_language ~* "zh|zh-cn" ) {
        set $language zh;
    }
    if ($http_accept_language ~* "en|en-us" ) {
        set $language en;
    }
 
    rewrite_log on;
    rewrite ^/$ /$language last;
    #rewrite ^([^\.]*)$ /$language last;
 
    location / {
        index  index.html;
    }
}

(2)用户通过手机设备访问test.cp.com,跳转至test.cp.com/m

server {
    listen 80;
    server_name cp.test.com;
    root /test;
    rewrite_log on;
 
    if ($http_user_agent ~* 'android|iphone|ipad') {
        rewrite ^/$ /phone last;
    }
    
    location / {
        index  index.html;
    }
}

(3)用户通过手机设备访问test.cp.com,跳转至phone.cp.com

server {
    listen 80;
    server_name cp.test.com;
    root /test;
    rewrite_log on;
 
    if ($http_user_agent ~* 'android|iphone|ipad') {
        rewrite ^/$ http://m.oldxu.com redirect;
    }
    
    location / {
        index  index.html;
    }
}

(4)用户访问网站时将http协议强制跳转到https

server {
    listen 80;
    server_name test.cp.com;
    rewrite_log on;
    rewrite ^(.*)$ https://$server_name$1 redirect;
    #return 302 https://$server_name$request_uri;
}
 
server {
    listen 443 ssl;
    server_name test.cp.com;
    root /test;
 
    ssl_certificate ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;
 
    location / {
        index index.html;
    }
}

(5)网站在维护过程中,希望用户的访问都重定向至一个维护页面。

server {
    listen 80;
    server_name test.cp.com;
    root /test;
 
    rewrite_log on;
    rewrite ^(.*)$ /wh.html break;
 
    location / {
        index index.html;
    }
}

(6)当服务器遇到 403 404 502 等状态码时,自动跳转到维护页面。

server {
    listen 80;
    server_name test.cp.com;
    root /test;
    rewrite_log on;
    
	location / {
		index index.html;
	}
	error_page 403 404 502 = @error;
	location @error {
		rewrite ^(.*)$ /wh.html break;
	}
}

(7)网站在停机维护时,除指定的IP能够正常访问,其它的IP全部跳转到维护页面。

server {
    listen 80;
    server_name test.cp.com;
    root /test;
    rewrite_log on;
    
	#设定一个变量$ip初始值为0。
	set $ip 0;
	#判断来源IP是否在允许列表里,如果在则设定$ip变量为1。
	if ($remote_addr ~ "10.0.0.1|10.0.0.2") {
		set $ip 1;
	}
	#判断$ip变量是否等于0,如果等于直接跳转到维护页面。
	if ($ip = 0) {
		rewrite ^(.*)$ /wh.html  break;
	}
 
	location / {
		index index.html;
	}
}

当然这里只是使用rewrite方式演示,实际使用访问限制模块更加方便高效。

server {
    listen 80;
    server_name test.cp.com;
    root /test;
    rewrite_log on;
 
	location / {
		index index.html;
		allow 10.0.0.1;
	allow 10.0.0.2;        
		deny all;
	}
	#访问受限会返回403状态码
    error_page 403 = @error;
	location @error {
		rewrite ^(.*)$ /wh.html break;
}

(8)网站后台/admin,只允许10.0.0.1访问,其他的IP访问直接强制跳转至首页。

server {
    listen 80;
    server_name test.cp.com;
    root /test;
    rewrite_log on;
 
	location / {
		index index.html;
	}
 
	location /admin {
		index index.html;
 
	    #设定一个变量$ip初始值为0。
		set $ip 0;
	    #判断来源IP是否在允许列表里,如果在则设定$ip变量为1。
		if ($remote_addr ~ "10.0.0.1") {
			set $ip 1;
		}
	    #判断$ip变量是否等于0,如果等于直接跳转到维护页面。
		if ($ip = 0) {
			return 302 http://$server_name;
		}
	}
}

 

posted @ 2022-07-06 10:24  kirin(麒麟)  阅读(81)  评论(0编辑  收藏  举报
Δ