用nginx做forward proxy,借助于免费又支持SSL的heroku app,实现http proxy。
首先申请一个免费的heroku app做测试,heroku会分配一个域名,比如xxx.herokuapp.com
,同时还支持SSL访问,这个是关键。
heroku的app不能直接用作代理,因为访问heroku app大概路径是,xxx.herokuapp.com
解析到了heroku的前端nginx集群,然后再反向代理到自己的app。nginx会检查Host是否是heroku的app,不是的话会报404 Object Not Found。
思路是,
把要访问的网站嵌入到url里,比如http://xxx.herokuapp.com/p/www.google.com
,然后我们在app里去请求www.google.com,然后把结果返回(包括response headers),这样我们访问http://xxx.herokuapp.com/p/www.google.com
返回了google的内容!可以把这个app强化一下,处理一下refer,url等,完全就是heroku app的壳,里面套了其他网站的内容。
为了偷懒,简化这里的处理,可以在本地用nginx做一个forward proxy,把header里的host rewrite到url里。(开始是用flask写的一个程序做这个事情,后来发现还是nginx简单)
最后在浏览器里配置一下http proxy就行了。
PS,
heroku的免费app比较坑爹的地方是,如果一段时间inactive后,会自动关闭。
最后奉上nginx的配置和示例代码:
nginx server段配置如下,其他省略,
|
|
app.py用的flask(网络上搜索到的一个例子改了一点,用其他也是OK的)
cat Procfile
|
|
cat requirements.txt(flask已经有新版本了)
|
|
cat app.py
|
|