nginx配置多IP代理非典型问题

johnnyhg 发布于 2012/12/28 14:20
阅读 1K+
收藏 1

问题描述如下,这个是一个不那么常见的nginx配置问题,欢迎高手解答?
要实现的目的如下:
1、购买了10个独立IP作为爬虫抓取的代理服务
2、只有一台服务器,所以希望将这10个独立IP全部绑定到这台服务上去,然后利用这10个IP作为代理抓取网站页面内容?
下面是我的操作:
1、在这台服务器上的网卡绑定上述十个IP地址;sudo vim /etc/network/interfaces;配置如下:

/etc/network/interface的配置如下:
auto eth0 iface eth0 inet static
address xxx.xxx.xxx.001 netmask
255.255.255.192 network xxx.xxx.xxx.128 broadcast
xxx.xxx.xxx.191 gateway
xxx.xxx.xxx.129 auto eth0:2 iface
eth0:2 inet static
address xxx.xxx.xxx.002
netmask 255.255.255.192
network xxx.xxx.xxx.128
broadcast xxx.xxx.xxx.191
gateway xxx.xxx.xxx.129

auto eth0:3 iface eth0:3 inet static
address xxx.xxx.xxx.003
netmask 255.255.255.192
network xxx.xxx.xxx.128
broadcast xxx.xxx.xxx.191
gateway xxx.xxx.xxx.129

auto eth0:4 iface eth0:4 inet static
address xxx.xxx.xxx.004
netmask 255.255.255.192
network xxx.xxx.xxx.128
broadcast xxx.xxx.xxx.191
gateway xxx.xxx.xxx.129

auto eth0:5 iface eth0:5 inet static
address xxx.xxx.xxx.005
netmask 255.255.255.192
network xxx.xxx.xxx.128
broadcast xxx.xxx.xxx.191
gateway xxx.xxx.xxx.129

auto eth0:6 iface eth0:6 inet static
address xxx.xxx.xxx.006
netmask 255.255.255.192
network xxx.xxx.xxx.128
broadcast xxx.xxx.xxx.191
gateway xxx.xxx.xxx.129

auto eth0:7 iface eth0:7 inet static
address xxx.xxx.xxx.007
netmask 255.255.255.192
network xxx.xxx.xxx.128
broadcast xxx.xxx.xxx.191
gateway xxx.xxx.xxx.129

auto eth0:8 iface eth0:8 inet static
address xxx.xxx.xxx.008
netmask 255.255.255.192
network xxx.xxx.xxx.128
broadcast xxx.xxx.xxx.191
gateway xxx.xxx.xxx.129

2、安装nginx,并配置如下信息:

server {
listen 8000;
server_name xxx.xxx.xxx.001 xxx.xxx.xxx.002 xxx.xxx.xxx.003
xxx.xxx.xxx.004 xxx.xxx.xxx.005
xxx.xxx.xxx.006 xxx.xxx.xxx.007
xxx.xxx.xxx.008 xxx.xxx.xxx.009
xxx.xxx.xxx.010;

location / {
#root html;
#index index.html index.htm;
resolver xx.xx.xx.xx;
proxy_pass $scheme://$host$request_uri;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
proxy_buffers 256 4k;
} #access_log off;
}

3、在程序中依次设置代理去抓取内容:
request.proxy = "xxx.xxx.xxx.001:8000"
4、问题来了,在nginx中的日志如下所示:

xxx.xxx.xxx.001 - -
[27/Dec/2012:02:50:07 +0800] "GET
http://item.taobao.com/item.htm?id=21054888967
HTTP/1.1" 200 41296 "-" "Ruby"

无论是使用002、003或者其他代理,nginx的日志都是上面这条,就是说,无论如何切换代理去抓取,最后出去的时候,还是使用xxx.xxx.xxx.001这个IP出去的,这样就完全没有达到我用代理的目的了。
我要求达到的效果是,当使用002、003代理的时候,日志出现:

xxx.xxx.xxx.002 - -
[27/Dec/2012:02:50:07 +0800] "GET
http://item.taobao.com/item.htm?id=21054888967
HTTP/1.1" 200 41296 "-" "Ruby"
xxx.xxx.xxx.003 - -
[27/Dec/2012:02:50:07 +0800] "GET
http://item.taobao.com/item.htm?id=21054888967
HTTP/1.1" 200 41296 "-" "Ruby"

5、问题就来了,不知道是因为多个IP绑定同一个网关还是应为Nginx没有配置正确的缘故?请教各位大牛。



加载中
0
hongshenghe
hongshenghe

没想到还可以这么玩,不过貌似你是想修改出口ip,是不是应该从操作系统和网络上面着手,比如通过修改默认出口地址

route add -net default gw 8.8.8.8 dev eth0:0

hongshenghe
hongshenghe
回复 @johnnyhg : 策略路由是否可以解决你的问题
johnnyhg
johnnyhg
通过命令行切换出口地址,时间有点长,而且没有办法通过程序自由切换,没有办法灵活处理啊。
返回顶部
顶部