首页 > 代码库 > nginx做前端,后端web服务器无法获取真正客户机的ip,解决方法

nginx做前端,后端web服务器无法获取真正客户机的ip,解决方法



       由于,前端使用了nginx作为代理服务器,代理后端的web服务器和tomcat服务器,发现后端服务器的访问日志记录的客户端ip是nginx反代机器的ip,,所以,以下方法可以让后端服务器获取到真正的客户机ip。



首先在前端nginx服务器的server{  } 里添加:

proxy_set_header        Host            $host;

proxy_set_header        X-Real-IP       $remote_addr;

proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

以上增加了3个HTTP header,其中 X-Real-IP 是真正的ip


然后后端服务器则需要添加一个模块,--with-http_realip_module ,如果是tengine,则不需要重新编译,他已经自带。

nginx在线平滑添加新模块,(这里是后端web服务器)

先查看已经编译过的模块 /usr/local/webserver/nginx/sbin/nginx -V

1、cd nginx1.2.6

2、./configure --with-luajit --with-http_flv_module --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module 

3、make   不要make install 负责会覆盖以前的配置文件

4、  cp /usr/local/webserver/nginx/sbin/nginx /usr/local/webserver/nginx/sbin/nginx.bak 

5、cp ./objs/nginx /usr/local/webserver/nginx/sbin/

(如果出现  “nginx正在忙的提示”  先停止nginx运行/usr/local/webserver/nginx/sbin/nginx -s stop )

6、 重启     /usr/local/webserver/nginx/sbin/nginx

7、cd /usr/local/webserver/nginx/conf

  vim  nginx.conf

在server中添加以下,并打开默认日志格式。

http {

    include       mime.types;

    default_type  application/octet-stream;


    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘

                      ‘$status $body_bytes_sent "$http_referer" ‘

                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;


    access_log   /home/nginx/logs/nginx_access.log main;

 

    include deny.ip;

    server {

        listen       80;

        server_name  localhost www.ifeng.com;


        more_set_headers ‘Server: VodServer.KSD‘;

        underscores_in_headers on;


         proxy_set_header   Host             $host;

         proxy_set_header   X-Real-IP        $remote_addr;

         set_real_ip_from   反代的ip地址;

         real_ip_header     X-Real-IP;

         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

}



8、监控 /home/nginx/logs/nginx_access.log ,是否生效,如果没有出现反代的ip表明已经获取到真正ip

 












本文出自 “crazy_sir” 博客,请务必保留此出处http://douya.blog.51cto.com/6173221/1579159

nginx做前端,后端web服务器无法获取真正客户机的ip,解决方法