为什么会有这个需求?还不是因为BA的问题… 接到“内容不符”的通知,要么滚要么大改。运营上线已久,大改不现实,滚到外地的话即浪费资金又不利于国内优秀资源的使用。冒险用上这招,继续低调行事… 得益于linux 平台及强大nginx,还有被Q了的Google,最终才能使方案得以顺利实现。码文记录也顺便分享给有需要的朋友,虽然过分很简单,但真的很有用。对于nginx 的理解仍然是冰山一角!

需求及思路

用户访问www.xxx.com 时,需要展示“符合要求”的内容,而用户入口非www.xxx.com 时则展示“不太符合要求”的内容。 方案一: 这个第一时间想到的,就是新建目录,把现有内容放置在新目录下并绑定二级域名继续使用,而根目录随意放置一个静态文件供展示就可以了。 弊端:工作量相对大了;整站放置在二级目录,不知道会不会影响其他已绑定二级域名的子频道;不利于日后大动作。 方案二: 根据来访域名,动态变换主页。nginx 可以用set 来设置变量,简单!方便!快捷!

方案实施

最终实现预期功能的nginx 这一小段 配置文件如下:

if ($host = ‘www.xxx.com') {
set $index “default.php”;
set $index_more “index.php”;
}
if ($host != ‘www.xxx.com') {
set $index “index.php”;
set $index_more “default.php”;
}
index $index index.htm $index_more;
# index index.html index.htm index.php;

也就是$host 为www.xxx.com 时,index 最优先的默认文档为default.php。当$host 不是www.xxx.com 时,则优先使用原来的index.php! 修改保存后,使用nginx -t测试提示successful。然后通过nginx -s reload重新加载nginx 配置。大功告成!


*这里新增加一个$index_more 的变量(variable)是折衷的办法,当我使用如下判断时,遇到了403 错误:

if ($host = ‘www.xxx.com') {
set $index “default.php index.htm index.php”;
}
if ($host != ‘www.xxx.com') {
set $index “index.php index.htm default.php”;
}
index $index;
# index index.html index.htm index.php;

似乎是因为变量赋值出现空格而导致了403。度娘无解,Google 也不知道怎么描述具体问题,有机会的话,还想去stackoverflow 咨询一下。如果有朋友知晓个中缘由的,希望能分享一下解决方法。

Comments