Small APP迁移之nginx配置+程序修改
[| 2010/10/29 14:17]
由于想保持博客主题和app的独立性,所以在编写supermail的时候使用了另一套ci框架,有心给app开一个二级域名,但是想了一下为了不由于公用ip导致降低博客在搜索引擎中的权重,决定先监听在一个别的端口,日后再迁移到博客/smapp/**下。
今天下午图书馆不开,加之买的书还没到,决定完成迁移工作。
首先需要优化程序,在所有的url链接处都用echo base_url()来组成完整url,这样迁移的时候通过修改config里面的base_url可以保证不会因使用绝对路径导致的问题。
其次是需要修改nginx。有如下三个方案:
1,对于location /smapp/,设置不同的root,这个方法是效率最高的,也最容易配置,不过我感觉这么设置总是别扭,不大想用。
2,使用curl,在博客的controller中建立一个smapp.php,对不同的url分别用curl抓取内容,然后返回。相当于做了个网页代理。但是搞了一会后发现实现困难,并且效率低,兼容性差。
3,反向代理,之前supermail监听的端口不变,不过由监听0.0.0.0改为监听127.0.0.1,这样此端口在外界看起来是封闭了。然后在nginx中对location /smapp/做反向代理。
从nginx文档上看到的是说,在对url做proxy_pass(反向代理)之前不能rewrite,于是我一开始先是把location /smapp/放在了rewrite规则的前面,结果发现还是被rewrite了,说明nginx在处理的时候是先把rewrite规则都匹配完毕后才处理location。不以位置改变这两者的顺序。于是只能加了一条rewrite规则,对/smapp/段的直接break。
然后配置反向代理,设置:
location /smapp/ {
proxy_pass http://127.0.0.1:****/;
break;
}
注意,proxy_pass后面的url的末尾是否带'/'是有区别的,假如不带,那么反向代理的uri中带有/smapp/这一段,假如带,uri中直接以/smapp/后面的部分开始。我刚开始加'/'的时候总是报错,也许是由于前面rewrite没有break掉的缘故。后来加上后成功了。
现在已经完成了迁移,不过美中不足之处是rewrite规则多了一步,稍稍有些影响效率,不过可以通过配置反响代理缓存来弥补这一性能缺失。
今天下午图书馆不开,加之买的书还没到,决定完成迁移工作。
首先需要优化程序,在所有的url链接处都用echo base_url()来组成完整url,这样迁移的时候通过修改config里面的base_url可以保证不会因使用绝对路径导致的问题。
其次是需要修改nginx。有如下三个方案:
1,对于location /smapp/,设置不同的root,这个方法是效率最高的,也最容易配置,不过我感觉这么设置总是别扭,不大想用。
2,使用curl,在博客的controller中建立一个smapp.php,对不同的url分别用curl抓取内容,然后返回。相当于做了个网页代理。但是搞了一会后发现实现困难,并且效率低,兼容性差。
3,反向代理,之前supermail监听的端口不变,不过由监听0.0.0.0改为监听127.0.0.1,这样此端口在外界看起来是封闭了。然后在nginx中对location /smapp/做反向代理。
从nginx文档上看到的是说,在对url做proxy_pass(反向代理)之前不能rewrite,于是我一开始先是把location /smapp/放在了rewrite规则的前面,结果发现还是被rewrite了,说明nginx在处理的时候是先把rewrite规则都匹配完毕后才处理location。不以位置改变这两者的顺序。于是只能加了一条rewrite规则,对/smapp/段的直接break。
然后配置反向代理,设置:
location /smapp/ {
proxy_pass http://127.0.0.1:****/;
break;
}
注意,proxy_pass后面的url的末尾是否带'/'是有区别的,假如不带,那么反向代理的uri中带有/smapp/这一段,假如带,uri中直接以/smapp/后面的部分开始。我刚开始加'/'的时候总是报错,也许是由于前面rewrite没有break掉的缘故。后来加上后成功了。
现在已经完成了迁移,不过美中不足之处是rewrite规则多了一步,稍稍有些影响效率,不过可以通过配置反响代理缓存来弥补这一性能缺失。