我是靠谱客的博主 无心手链,这篇文章主要介绍nginx做透明代理,现在分享给大家,希望可以做个参考。

http://d.ream.at/nginx-for-transparent-proxy/

nginx做透明代理

在VPN网关上设置一个透明代理能在一定程度上提高客户端的下载速度。最适合做透明代理的自然是squid,但squid有两个缺点:

  1. 不支持多CPU;
  2. 存在内存泄漏问题,我设置squid内存缓存64m,结果睡一觉起来发现squid吃了200m+。

后来听kangzi说nginx也可以架设http代理,所以考虑把squid换成nginx。

nginx并不是为正向代理设计的,所以如果你的机器上没有出现上面的两个问题,或者内存不是非常紧张(squid占的内存比nginx多),用squid就行了。

nginx做透明代理的配置文件分两段,第一段是在http{}里定义内存缓存,nginx自身不支持内存缓存,但linux有特殊的文件系统/dev/shm,将缓存目录指向这里就是用内存做缓存了。示例如下:

?[Copy to clipboard] View Code BASH
复制代码
1
2
3
4
1 2 3 4
复制代码
1
2
3
4
http { proxy_cache_path /dev/shm/nginx/proxy_cache levels=2 keys_zone=mem_cache:64m inactive=7d max_size=64m; proxy_temp_path /dev/shm/nginx/proxy_temp; }

如果缓存在/dev/shm上存不下,nginx会给客户端返回404。
/dev/shm的大小与内存并不等值,用

?[Copy to clipboard] View Code BASH
复制代码
1
1
复制代码
1
df -h /dev/shm

可以查看。

第二段是在server里配置代理。如果VPN客户端有用Dropbox,那么应该设置较长的proxy_xxx_timeout项——Dropbox有一个HTTP的ping-pong机制,服务器响应时间会在60s以上,而nginx默认的timeout都是60s,会返回502 Gateway Timeout,这时客户端就会掉线。示例如下:

?[Copy to clipboard] View Code BASH
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
1 2 3 4 5 6 7 8 9 10 11 12 13
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server { listen 3128; resolver 8.8.8.8; proxy_cache mem_cache; proxy_max_temp_file_size 4m;   location / { proxy_pass http://$host$request_uri; proxy_connect_timeout 60; proxy_send_timeout 120; proxy_read_timeout 120; } }

补充:我测试了debian打包的两个版本,0.7.67(squeeze的)和0.8.54(sid的),0.7.67在处理cookie相关的缓存时有bug,0.8.54还没有出现这个问题。

最后

以上就是无心手链最近收集整理的关于nginx做透明代理的全部内容,更多相关nginx做透明代理内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部