貌似现在只要我更新博客就说明又在没事瞎折腾了… =.=
很久以前就遇到过这个问题,或者不如说实际上就是因为无法正确获取客户端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小时]了…
基本上有两个比较主要的原因。
[……]