文章归档

Apache + Varnish + nginx 获取正确的客户端IP

貌似现在只要我更新博客就说明又在没事瞎折腾了… =.=
很久以前就遇到过这个问题,或者不如说实际上就是因为无法正确获取客户端IP才让我一直用的 Apache + nginx 的构架。今天折腾一下午 + 一晚上总算是把这个问题(还算)圆满地解决掉了。

首先是参考这篇文章配置好整个服务器构架,后端使用 Apache httpd 来处理 PHP, 中间用 Varnish 做缓存,前端使用 Tengine 作为 web 服务器,所以来自客户端的请求的处理流程是:

Client -> Tengine:80 -> Varnish:8090 ->(Miss)-> httpd:81

然后问题就来了,处在最后面的 httpd 拿不到正确的客户端IP地址,总是显示为127.0.0.1. 这个问题有趣在于,一直以来我都是使用了 mod_rpaf 来获取 X-Forwarded-For 中的客户端IP的,而如果我去掉中间那一层 Varnish 直接让 Tengine/nginx 反向代理给 httpd 的话,IP地址是能够正确获取的,更进一步实验表明,在只有一次代理的情况下一切都是正常的,当代理变成了两层,无论两层代理的顺序如何,都会出现这个问题。

中间各种股沟各种查文档就[此处省略6小时]了…

基本上有两个比较主要的原因。
[……]

继续阅读~→

Apache + Nginx 压低内存的一点折腾

这篇日志注定很短。
现在使用的服务器是 ArchLinux + Apache 2.2.21 + Nginx 1.0.11 + MySQL 5.5.18 + PHP 5.3.8 的环境,详细的PHP探针可以在这里看到。
以上都是直接从Arch的原安装,然后一些组件是自己编译的,简单的方案在之前的这篇这篇日志中有提及。再加上ftp客户端和后台运行一个ntp进程,apache加载上mod_python组件,配置好了过后开机内存在72-75M,很满意。但是在运行一段时间(积累了一定量的网页请求)过后,内存就会直逼400,突发状况可以冲到接近500,就算空闲下来也有接近300,这个就有点不爽了。
于是折腾。

根据观察,处在前端的Nginx资源占用一直很小而且稳定,主要占用内存的就是若干httpd进程,那么就着手应对这个了。
在一番Google以及不断实验,重启若干次过后,找到了个人比较满意的配置方案如下~
[……]

继续阅读~→