`
ssxxjjii
  • 浏览: 948354 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

令 Nginx 后端的 Apache 获取到互联网 IP

 
阅读更多

http://blog.csdn.net/songerzhou/article/details/5142863

自从Nginx出现以后,我们都喜欢让 Nginx 跑在前方处理静态文件,然后通过 proxy 把动态请求过滤给 apache。

这么有个问题,跑在后方 apache 上的应用获取到的IP都是Nginx所在服务器的IP ,或者是本机 127.0.0.1 。
最明显就是查看 apache 的访问日志。就会见到来来去去都是内网的IP。

如果你的应用有诸如,“单个IP不能重复登陆”,“单个IP注册相隔n分钟”… 之类用于IP判别的安全规则。
这么就麻烦了….

但还好,你可以通过修改 nginx proxy 的参数令后端应用获取到 Nginx 发来的请求报文获取到外网的IP。

proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

但这解决的问题单单只是应用上,apache 日志上所获取的ip依然还是本地。

特别有些考虑不周全的应用,例如 Tattertools (一个博客程序) 就会犯误。
后台的访问日志死活显示访客数 1,ip来自 127.0.0.1

搜寻了一下,发现了apache这一个来自第三方的mod 配合Nginx proxy 使用。

说明:http://stderr.net/apache/rpaf/

下载:http://stderr.net/apache/rpaf/download/

最新版本是 mod_rpaf-0.6.tar.gz  

安装也相当简单。

# tar zxvf mod_rpaf-0.6.tar.gz   下载后解压

# cd mod_rpaf-0.6 

Apache 的目录按自己的环境修改,并选择相应的安装方式:

#/usr/local/apache/bin/apxs -i -a -c mod_rpaf.c    Apache 1.3.x 的安装方式
#/usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c   Apache 2.x 的安装方式

完成后会在 http.conf  的 LoadModule 区域 为你多加了一行。

LoadModule mod_rpaf-2.0.so_module modules/mod_rpaf-2.0.so

经 apache 2.2.6 的实验,使用这一行启动 apache 的时候会报错的。

所以改为:
LoadModule rpaf_module        modules/mod_rpaf-2.0.so
并在下方添加

RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 192.168.10.2    # 填写Nginx所在的内网IP。
RPAFheader X-Forwarded-For

保存退出后重启apache

再看看 apache 的日志内容? 呵,不再是来来去去的那几个IP了吧。

----------------------------------------------

Apache后端获取用户真实IP地址-nginx前端

mod_rpaf 是一个 Apache的模块,利用它可以给 Apache 的后端应用提供客户端真实的IP地址
在nginx作为前端,apache作为后端的情况下,apache只能获取到nginx前端的ip地址,而无法获取到用户的真实ip地址,在这种情况下,如果php需要对用户的ip做限制将无法实现。针对这种环境,apache开发了相应的模块mod_rpaf,能够获取到用户的真实ip地址。

如下图:
nginx代理下-apache获取用户真实ip地址
左边只能获取到nginx代理的IP地址,右边Apache才能获取到用户的真实ip地址
使用方法:
[codesyntax lang="java" lines="no"]
# if DSO load module first:
LoadModule rpaf_module libexec/apache2/mod_rpaf-2.0.so

RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 10.0.0.1
RPAFheader X-Forwarded-For
[/codesyntax]

具体安装配置请往下看
下载安装模块
[codesyntax lang="java" lines="no"]
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar -xzvf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6/
/usr/local/apache2.2.15/bin/apxs  -i -c -n mod_rpaf-2.0.slo mod_rpaf-2.0.c
[/codesyntax]

添加apache配置
[codesyntax lang="java" lines="no"]
vi  /usr/local/apache2.2.15/conf/httpd.conf
# 在最后一行复制如下内容
LoadModule rpaf_module        modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 192.168.50.10 # 代理服务器的ip地址(记得做相应修改)
RPAFheader X-Forwarded-For
备注:RPAFproxy_ips后面添加代理服务器的ip地址,有几个填几个
[/codesyntax]

查看apache是否有rapf模块
[codesyntax lang="java" lines="no"]
# /usr/local/apache2.2.15/bin/apachectl -M | grep rpaf
rpaf_module (shared)
[/codesyntax]

最后重启Apache即可
[codesyntax lang="java" lines="no"]
# /usr/local/apache2.2.15/bin/apachectl -t
# /usr/local/apache2.2.15/bin/apachectl restart
[/codesyntax]

分享到:
评论

相关推荐

    配置Nginx前端Apache后端服务器

    ### 配置Nginx前端Apache后端服务器详解 在现代Web架构中,为了提高网站的性能、安全性以及实现负载均衡,Nginx与Apache的组合应用变得日益流行。Nginx以其高效的静态文件处理能力和良好的并发性能,常被用作前端...

    window下配置前端nginx后端多apache(django_wsgi)

    在Windows环境下,配置前端Nginx与后端多Apache服务器(使用Django WSGI)是一项常见的任务,特别是在部署大型Web应用时。这样的架构能够充分利用Nginx的静态资源处理能力,以及Apache对动态内容的高效处理。以下将...

    LNAMP架构中后端Apache获取用户真实IP地址的2种方法

    ### LNAMP架构中后端Apache获取用户真实IP地址的2种方法 在现代Web服务器部署环境中,LNAMP(Linux, Nginx, Apache, MySQL, PHP)架构是一种常见的选择,尤其是在需要高性能和高稳定性的场景下。然而,在这种架构中...

    LVS+keeplived+nginx+apache

    在PHP集群中,Nginx可以作为前端的负载均衡器,将静态内容请求直接返回给用户,而将PHP动态请求转发到后端的Apache服务器。 Apache是应用最广泛的Web服务器之一,它提供了强大的模块化功能和灵活性。Apache默认使用...

    java非常强的获取客户端真实IP的两种方法

    然而,在实际应用场景中,客户端请求往往经过了多级代理(如Apache、Squid等),这使得直接使用`request.getRemoteAddr()`方法获取到的IP地址并不是客户端的真实IP,而是代理服务器的IP地址。 例如,在使用Apache或...

    nginx替代方案,nginx代替apache与jboss

    ### Nginx 作为 Apache 和 JBoss 的替代方案 #### 背景介绍 随着互联网技术的不断发展,网站流量的增长对服务器性能提出了更高要求。Apache 和 JBoss 是两种广泛使用的 Web 服务器和应用服务器,但在高并发场景下,...

    实战Nginx取代Apache的高性能Web服务器.rar

    《实战Nginx取代Apache的高性能Web服务器》一书,主要探讨了如何利用Nginx这一现代、高性能的Web服务器来替代传统的Apache服务器,以提升网站的运行效率和响应速度。Nginx以其异步非阻塞的I/O模型、模块化设计以及...

    Nginx+Apache负载均衡

    - **Nginx 负责负载均衡**:根据预设规则将请求转发给后端的真实服务器(如 Apache 服务器)。常见的负载均衡策略包括轮询(默认)、最少连接数、IP 哈希等。 - **响应返回给用户**:真实服务器处理完请求后,将响应...

    nginx+apache+mysql+php+memcached+squid搭建门户网站

    ### Nginx+Apache+MySQL+PHP+Memcached+Squid 搭建门户网站 #### 一、前言与架构概述 随着互联网技术的发展,如何构建一个高效、稳定且能够应对高并发访问的Web服务器成为了许多企业和开发者关注的重点。本文将...

    Nginx作为反向代理时传递客户端IP的设置方法

    因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。 同样适用于前端是 Squid 或者...

    LVS-DR+Nginx+Apache集群搭建

    在Real Server上,需要配置Nginx或Apache作为前端代理,将接收到的请求转发给后端的应用实例。对于Nginx,可以在配置文件中定义upstream块来管理后端服务器列表,通过proxy_pass指令将请求转发。Apache可以使用mod_...

    apache与nginx安装使用

    在实际部署中,两者也可以结合使用,形成“Apache后端处理,Nginx前端反向代理”的架构,以充分利用各自优势。 以上就是关于Apache和Nginx的安装与简单配置介绍。具体使用时,还需要根据实际需求进行调整,并注意...

    实战Nginx_取代Apache的高性能Web服务器_代码

    Nginx内置负载均衡器,可以通过轮询、权重、IP哈希等多种策略分配请求到后端服务器。例如,`upstream backend { server backend1; server backend2; }`定义了一个名为backend的后端服务器组。 7. **错误页面处理**...

    Nginx 代理 Apache 下某一个工程

    首先,Nginx是一款轻量级、高性能的Web服务器和反向代理服务器,常用于处理静态资源和分发请求到不同的后端服务器,如Apache或Tomcat。Apache则是一款广泛应用的开源HTTP服务器,通常用于运行Java Web应用程序。 1....

    实战Nginx:取代Apache的高性能Web服务器+张宴.扫描版

    通过《实战Nginx:取代Apache的高性能Web服务器》这本书,读者不仅可以掌握Nginx的基本操作,还能学习到如何利用Nginx构建高效、稳定、安全的Web服务环境,对于从事Web开发和运维的人员来说,是一份宝贵的参考资料。

    实战Nginx取代Apache的高性能WEB服务器

    ### 实战Nginx取代Apache的高性能WEB服务器 在当今互联网技术快速发展的背景下,Web服务器作为网站的基础支撑组件,其性能、稳定性和安全性对于保障网站的正常运行至关重要。Apache和Nginx作为目前最流行的两种Web...

    实战Nginx:取代Apache的高性能Web服务器.

    2. 反向代理和负载均衡:Nginx能够作为反向代理服务器,将用户请求分发到后端多个服务器,实现负载均衡,提高服务的可用性和响应速度。 3. 静态文件处理:Nginx对静态文件(如图片、CSS、JavaScript)的处理性能...

    cluster+apache+nginx

    1. **反向代理模式**:Nginx作为前端反向代理服务器,接收到客户端请求后,根据预设的策略(如轮询、最少连接数、IP哈希等)将请求转发到后端的Apache服务器集群。这样可以实现负载均衡,防止单一服务器过载。 2. *...

Global site tag (gtag.js) - Google Analytics