Nginx(6)

rewrite

用于地址跳转、协议跳转、URL静态化(将动态URL地址显示为静态URL地址的一种技术)。
主要功能是用来重写URL或URL跳转。

sed

设定一个变量,并给这个变量赋予一个值。

if

条件判断语句。
sed与if组合实现域名跳转配置示例1:

server {
	listen 80;
	server_name url.wenjie.com.zh url.wenjie.com.jp;
	location / {
		# 判断用户请求的域名是zh还是jp
		if ( $http_host ~* "zh") {
			set $language zh;
		}
		if ( $http_host ~* "jp") {
			set $language jp;
		}
	}
		# 配置rewrite跳转规则
		rewrite ^/$ http://url.wenjie.com/$language/ permanent;
}

上面代码实现的是我们访问url.wenjie.com.zh自动跳转url.wenjie.com/zh/,访问url.wenjie.com.jp自动跳转到url.wenjie.com/jp/。

sed与if组合实现域名跳转配置示例2:

server {
	listen 80;
	server_name url.wenjie.com;
	root /opt;
	location / {
		index index.html;
		# 如果用户请求的uri中a1=3256,那么就通过反向代理代理到10.16.3.5:8080端口
		if ($request_uri ~* 'a1=3256') {
			proxy_pass 10.16.3.5:8080;
			# 为了便于展示结果,我们可以在这里加一个返回值来确认实现成功。
			return 200 'ok...';
		}
	}
}
# 测试命令为:
curl -L HHost: url.wenjie.com http://10.0.0.7?a1=3256

return

用于返回数据、字符串以及url地址等等。
配置示例;

return:主要用来返回数据|返回字符串|返回url地址。

1/如果用户使用 IE 访问  url.oldxu.com 则返回字符串  ( 请更换您的浏览器。 )  chrome			[返回数据]
server {
	listen 80;
	server_name url.oldxu.com;
	root /opt;
	charset gbk,utf-8;
	location / {
		index index.html;
		default_type text/html;
		#判断用户使用的是否是 chrome浏览器,如果是则 返回一段话,如果不是则正常访问。
		if ( $http_user_agent ~* "chrome|MSIE" ) {
			return 200 'Please change Browser!!!';
		}
	}
}

2.如果使用IE访问,直接报错 500.									[返回状态码]
server {
	listen 80;
	server_name url.wenjie.com;
	root /opt;
	charset gbk,utf-8;
	location / {
		index index.html;
		default_type text/html;
		#判断用户使用的是否是 chrome浏览器,如果是则 返回一段话,如果不是则正常访问。
		if ( $http_user_agent ~* "chrome|MSIE" ) {
			return 500;
		}
	}
}

3.如果使用IE访问,直接跳转至浏览器下载页面。http://www.firefox.com.cn/					[返回一个url地址]

server {
	listen 80;
	server_name url.wenjie.com;
	root /opt;
	charset gbk,utf-8;
	location / {
		index index.html;
		default_type text/html;
		#判断用户使用的是否是 chrome浏览器,如果是则 返回一段话,如果不是则正常访问。
		if ( $http_user_agent ~* "chrome|MSIE" ) {
			return 302 http://www.firefox.com.cn;
		}
	}
}

rewrite语法

rewrite 正则匹配 替换后的结果 [标识]
例:

[root@web01 ~]# cat   /etc/nginx/conf.d/url.oldxu.com.conf
server {
    listen 80;
    server_name url.oldxu.com;
    root /code;

    location / {
        rewrite /1.html /2.html;
        rewrite /2.html /3.html last;
    }

    location /2.html {
        rewrite /2.html /a.html;
    }

    location /3.html {
        rewrite /3.html /b.html;
    }
}

break

表示停止匹配,只要该条规则匹配成功,后面的匹配规则就不会被匹配。(所有location都不会匹配)

last

表示匹配成功后,不再匹配本location中的其他内容。在匹配成功后,会重新向server发起请求,哪个匹配执行哪个。

permanent

表示永久跳转,状态码是301.

redirect

表示临时跳转,状态码为302.

http–https场景下:
permanent:状态码301,永久跳转。 新跳转的网站有排名,旧网站排名会被清空。
redirect: 状态码302,临时跳转。 旧网站排名无影响,新网站没有排名。

企业案例介绍

  1. 根据用户浏览器请求头中携带的语言调度到不同的页面。
server {
    listen 80;
    server_name url.wenje.com;
    root /opt;

	#判断浏览器语言
	if ($http_accept_language ~* "zh|zh-cn" ) {
		set $language /zh;
	}

	if ($http_accept_language ~* "jp|ja" ) {
		set $language /jp;
	}

	#rewrite跳转
	rewrite  ^/$ $language;

	location / {
		index index.html;
	}
}


  1. 用户通过手机设备访问 url.wenjie.com,跳转至url.wenjie.com/m
server {
    listen 80;
    server_name url.wenjie.com;
    root /opt;

	#判断是否是手机
	if ($http_user_agent ~* 'android|iphone|ipad') {
		rewrite ^/$ /m last;
	}
	location / {
		index  index.html;
	}
}

  1. 用户通过手机设备访问 url.wenjie.com 跳转至 m.wenjie.com
server {
    listen 80;
    server_name url.wenjie.com;
    root /opt;

	#判断是否是手机
	if ($http_user_agent ~* 'android|iphone|ipad') {
		rewrite ^/$ http://m.wenjie.com redirect;
	}

	location / {
		index  index.html;
	}
}

server {
	listen 80;
	server_name m.wenjie.com;
	root  /opt/m;

	location / {
		index index.html;
	}
}


  1. 用户通过http协议请求,能自动跳转至https协议。
server {
    listen 80;
    server_name url.oldxu.com;
    root /opt;

	rewrite ^/$ https://$http_host;
	或
	return 302 $https://$server_name$request_uri;

}
  1. 网站在维护过程中,希望用户访问所有网站重定向至一个维护页面。
server {
    listen 80;
    server_name url.oldxu.com;
    root /opt;

	#维护状态
	rewrite ^(.*)$ /wh.html break;

	location / {
		index index.html;
	}
}
  1. 当服务器遇到 403 403 502 等错误时,自动转到临时维护的静态页。
server {
    listen 80;
    server_name url.oldxu.com;
    root /opt;

	location / {
		index index.html;
	}
	error_page 403 404 502 = @tempdown;
	location @tempdown {
		rewrite ^(.*)$ /wh.html break;
	}
}
--------------https://404.life/   错误页面模板
[root@web01 error_page]# cat /etc/nginx/conf.d/url.oldxu.com.conf
server {
    listen 80;
    server_name url.oldxu.com;
    root /opt;

	location / {
		index index.html;
	}

	#碰到403 404 502 -->tempdown,tempdown内部重定向
	error_page 403 404 502 = @tempdown;
	location @tempdown {
		root /opt/error_page;
		rewrite ^(.*)$ /index.html break;
	}

}
  1. 公司网站在停机维护时,指定的IP能够正常访问,其他的IP跳转到维护页。
server {
    listen 80;
    server_name url.oldxu.com;
    root /opt;
	#初始一个变量为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;
	}
}

或

server {
    listen 80;
    server_name url.oldxu.com;
    root /opt;


	location / {
		index index.html;
		allow 10.0.0.7/32;
		deny all;
	}

	location /error_page {
		root /opt;
	}


	error_page 403 = @temp;
	location @temp {
		return 302 'http://url.oldxu.com/error_page/index.html';
	}
}

  1. 公司网站后台/admin,只允许公司的出口公网IP可以访问,其他的IP访问全部返回500,或直接跳转至首页。
server {
    listen 80;
    server_name url.oldxu.com;
    root /opt;

	location / {
		index index.html;
	}

	location /admin {
		index index.html;

	#设定一个初始变量,变量名为ip,变量的值为0
		set $ip 0;
	#判断来源的用户IP是多少,如果是10.0.0.7,则将变量名ip的值重置为1
		if ($remote_addr ~ "10.0.0.7") {
			set $ip 1;
		}
	#判断ip变量为0的,直接500拒绝。
		if ($ip = 0) {
			#return 500;
			return 302 'https://www.xuliangwei.com';
		}
	}
}











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值