本篇文章摘抄于他人的文章,来自于CSDN的JeremyIT同窗,但我仍是本身从新敲一遍。html
需求1:访问网站的任何页面,都跳转到同一个页面,而这一个页面就是维护页面。(外部用户和公司内部的人都跳转到维护页面)nginx
server { listen 80; index index.html index.htm; server_name www.example.com;
if ($request_uri !~ "^/maintain.html$") { rewrite ^(.*) http://www.example.com/maintain.html permanent; } location / { ... } }
需求2:测试
(1) 不能关闭全部页面的访问,对于某些重要页面仍是得开放给外部用户,好比充值页面等。网站
(2) 对于新上线的功能,咱们只是不但愿外部访问到,可是咱们公司内部得能访问,这样就能进行测试,测试完后再对外开放。spa
server { listen 80; server_name www.example.com; set $flag 0; if ($remote_addr !~ "192.168.198.2") { set $flag "${flag}1"; } if ($request_uri !~* ^(/maintain.html|/pay/index.html)$) { set $flag "${flag}2"; } if ($flag = "012") { rewrite ^(.*) http://192.168.198.131/maintain.html permanent; } location / { ... } }
对于公司内部(192.168.198.2)来讲,咱们能够访问一切位置。.net
对于外部人员来讲,若是咱们访问的页面不是/maintain.html或者/pay/index.html时,那么会强制跳转到/maintain.html页面。code
等同于说,对外部人员开放的只有/maintain.html和/pay/index.html页面,其余业务无权访问。server
这样就实现了需求。htm
备注:我在测试时,始终没有绕过弯,一直卡在对于外网地址,分为跳转和不跳转,结果一直没写出来。其实应该换一个思惟,那就是哪些对外开放,哪些对外不开放。blog
开放的只有/maintain.html和/pay/index.html,其余都不开放。
需求3::当用户访问咱们的网站,出现502状态码时,nginx自动跳到个性化页面,而不是显示冰冷的502数字。
server { listen 80; server_name www.example.com; # ... 省略掉 N 行代码 error_page 502 = @tempdown; location @tempdown { rewrite ^(.*)$ /custom.html break; } }