折腾: Nginx 方便的反向代理

» 2013-10-27 折腾 56条评论

香港的 VPS 速度杠杠的,但是贵 + 带宽不足……其实我有一台 VPS 在香港,但已经被几个朋友用钱“霸占”了,如果我的博客也搬过去,无法负荷了,当然可以加内存神马的,但要加钱不合算啊,囧~ 就这样,自己的博客无法进驻自己的 VPS……

说实在的,我还是喜欢把博客放在美国的服务器,linode 嘛太贵鸟,对于单个博客来说太浪费,而且国人一窝蜂+linode太出名,好像现在很容易碰到被x的IP,好吧,被x无所谓啦,linode 换机房很容易啦,主要是 $ 的问题 - -

我用过好多个 vps 商的 vps,自己觉得比较 ok 的有 Linode.com、ramhost.us、ecvps.com、vr.org、kvmla.com、fedvps.com

linode 贵,ramhost 因为机房问题导致电信访问慢,vr 最低套餐都是 1G 以上了(我要那么大干嘛),最后我就一直把博客放在 fedvps.com 了,都 1 年多了吧,一直很稳定,期间换了 IP。

呃,扯远了,我是想说,既然香港的 VPS 无法再负荷我的博客,那么是否可以用 Nginx 的反向代理 + proxy_cache 缓存来加速呢?答案是肯定的,但同时因为技术不够无法完美解决也是纳闷的。

其实我以前折腾过这种方案,而且也上线了几天,发现 cookie 会混乱 + 会丢失,后来不得不停止了这种方式来加速。

最近不知道哪根筋不对,又开始折腾这个方式了,最终我解决了 cookie 问题,但是测试中发现:无法实现“有了新评论更新首页和当前文章的缓存”……

刚欣喜若狂又打入冷宫了……然后,只能妥协了:博客反向代理,只缓存图片、js、css等静态文件,这样也能起到加速作用。下面简单说说配置:

1. 服务器 A 为后端,正常方式配置网页服务器,如神马 lnmp 一键包/手动安装 lnmp 啊/lamp/虚拟主机也行,反正就是能正常运行/访问你的博客就行了(我的博客就在 fedvps.com 的 vps,因为服务器在美国,所以国内访问速度没香港的服务器快)
- 这里举例这服务器 A 的 IP 为 100.111.122.133

2. 服务器 B 作为前端(如我的香港 VPS),通常都是选择速度快的,不然就没意义了——哦,也不对,其实这样可以提高安全性。
这里贴一下我的反向代理 nginx 设置:
- 这里举例这服务器 B 的 IP 为 200.211.222.233
- 这里举例博客的域名为 ooxx.com

2.1 下面这些放在 nginx.conf 的 http 段里面,nginx.conf 的其他配置就不多说了(比较重要的我都用红字标识)

# 反向代理参数,具体自行搜索按需配置吧,懒得说明了
proxy_connect_timeout    5;
proxy_read_timeout       60;
proxy_send_timeout       5;
proxy_buffer_size        16k;
proxy_buffers            4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;

# 配置临时目录、缓存路径(注意要先建立这2个目录,要在同一个硬盘分区,注意权限)
proxy_temp_path   /var/run/nginx_proxy_temp 1 2;
proxy_cache_path  /var/run/nginx_proxy_cache levels=1:2 keys_zone=OOXX:32m inactive=7d max_size=1g;
# keys_zone=OOXX:32m 表示这个 zone 名称为 OOXX,分配的内存大小为 32MB
# levels=1:2 表示缓存目录的第一级目录是 1 个字符,第二级目录是 2 个字符
# inactive=7d 表示这个zone中的缓存文件如果在 7 天内都没有被访问,那么文件会被cache manager 进程删除
# max_size=1G 表示这个zone的硬盘容量为 1G

server{
	listen 80;
	server_name ooxx.com www.ooxx.com;    
	index index.php;      
	access_log off;        
	location / {
		proxy_pass         http://100.111.122.133;
		#proxy_redirect     off;
		proxy_set_header   Host $host;
		proxy_set_header   X-Real-IP  $remote_addr;
		proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header   Referer http://$host;    
	}
	
	# nginx 中的 Purge 配置
	location ~ /purge(/.*) {
    #允许的IP
    allow 127.0.0.1;
    deny all;
		proxy_cache_purge OOXX "$scheme://$host$1";
	}
	# 配置好后,可以手动清理某个缓存页面/文件,例如:
	# http://ooxx.com/abc.png
	# 改为 http://ooxx.com/purge/abc.png 就可以清理这个文件的缓存了
	
	# 只对图片、js、css 等静态文件进行缓存
	location  ~* \.(png|jpg|jpeg|gif|ico|js|css)$ {

		#-------------------------------------
		proxy_cache OOXX;
		proxy_cache_key "$scheme://$host$request_uri";
		proxy_cache_valid 200 304 7d;
		proxy_cache_valid 301 3d;
		proxy_cache_valid any 10s;
		#--------------------------------------

		proxy_pass         http://100.111.122.133;
		proxy_set_header   Host $host;
		proxy_set_header   X-Real-IP  $remote_addr;
		proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header   Referer http://$host;
    
	}

}

其他具体就不注释说明了,反正我也是搜来的,自己搜吧。

2.2 然后把 ooxx.com/www.ooxx.com A记录解析到服务器 B(200.211.222.233)就行了

我这样搞一下,我博客首页本来 ctrl+f5 打开速度(电信)是 4~6 秒变成 2~4 秒——速度强迫症真可怕。

哦,顺便说下吧,http://www.fedvps.com/ 其实是我一个朋友经营的 vps,用了那么久,一直很稳定,有需要 VPS 的朋友可以考虑,价格也比较适中。

其实呢,用国人经营的 VPS 有个好处,有问题都用普通话 ʅ(‾◡◝)ʃ

----

题外:
- 最近有点懒散,哦,是非常懒散,有工作也拖拖拉拉的,这神马状况
- 缺乏锻炼,努力中……(思想斗争+行动总是走不到一块去)
- 看剧集很容易入戏,忘记时间……怎么破?
- 还是看剧集:把自己也扔进里面的世界了,所以看完会失落,都是神马年龄了还这样……Orz

zww
or
oooo

“折腾: Nginx 方便的反向代理”有56条评论

  1. W3Cshare says:

    2~4秒是不是超速行驶 :mrgreen:

    1. zwwooooo says:

      @W3Cshare
      不会,如果主题元素少点,秒杀是很容易实现的。

  2. kn007 says:

    过来支持下

  3. linode还好吧,也没有想象那么贵吧,对于大神来说就跟不值一提了啊,我们用的就是linode东京机房,最低配的某宝也才130左右一个月。

    1. zwwooooo says:

      @奥莱电影
      对于我来说很值得一提,一个博客用每月 20 刀的 VPS 不觉得浪费么?

  4. countmeon says:

    啊 我也要折腾这个。。。。。。

  5. 你朋友这个OpenZ年付好划算哦,不知道性能怎么样

    1. zwwooooo says:

      @皇家元林
      OpenVZ 我没用过,我用的是 XEN 和 KVM 的。

  6. Yusky says:

    配置了几次。蛋疼了又没搞了

    1. zwwooooo says:

      @Yusky
      缓存了 cookie 等交互之类比较难搞

  7. mice says:

    就在linode免费各种升级的时候,我域名直接被墙了 被迫回国..蛋疼

    1. zwwooooo says:

      @mice
      这……太囧了

  8. 碎碎念 says:

    阿帕奇的是不是也能这么弄呢

    1. zwwooooo says:

      @碎碎念
      后台可以有apache,反向代理当然还是需要nginx

    2. 碎碎念 says:

      @zwwooooo
      噢噢,了解了

  9. 麦钛蛋 says:

    服务器B怎么弄 也要安装lnmp?

  10. HZS says:

    我要域名绑定vps反向代理指向blogger
    还要解决blogger图床问题
    可以么

    1. zwwooooo says:

      @HZS
      如果能规律替换前缀就行吧,具体搜一下

回复给 zwwooooo ¬
取消回复

昵称 *

网址

B em del U Link Code Quote