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







时间: 2025-01-07 09:25:02

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

nginx反向代理后端web服务器记录客户端ip地址

nginx在做反向代理的时候,后端的nginx web服务器log中记录的地址都是反向代理服务器的地址,无法查看客户端访问的真实ip. 在反向代理服务器的nginx.conf配置文件中进行配置. location /bbs { proxy_pass http://192.168.214.131/bbs; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarde

nginx做反向代理和后端web服务器之间的交互

1.Nginx是什么? Nginx就是反向代理服务器. 首先我们先来看看什么是代理服务器,代理服务器一般是指局域网内部的机器通过代理服务发送请求到互联网上的服务器,代理服务器一般作用于客户端.比如GoAgent,翻墙神器. 一个完整的代理请求过程为:客户端首先与代理服务器创建连接,然后根据代理服务器所使用的代理协议,请求对目标服务器创建连接.或则获得目标服务器的指定资源.Web代理服务器是网络的中间实体.代理位于Web客户端和Web服务器之间,扮演"中间人"的角色. HTTP的代理服务

nginx做前端反代负载均衡,后端httpd+tomcat

实验内容:用nginx做前端反代负载均衡后端httpd+tomcat 实验环境:物理机win7,虚拟机centos7: node1:172.18.11.111 httpd+tomcat node2:172.18.11.112 httpd+tomcat node3:172.18.11.113 nginx反代负载均衡 说明:httpd有两种方式与tomcat通信: (1)httpd可使用http模块反代tomcat,此时tomcat使用http链接器: (2)httpd还可使用ajp模块反代tomc

keepalived+nginx+tomcat搭建高性能web服务器集群

使用keepalived+nginx+tomcat搭建高性能web服务器集群,系统采用centos6.9,前端用nginx做反向代理实现负载均衡,同时结合keepalived对nginx实现高可用,后端使用两台tomcat做动态jsp解析,实现了动静分离. 搭建环境 准备四台服务器 vip: 192.168.75.130master: 192.168.75.131 (安装nginx做反向代理实现负载匀衡,结合keepalived实现高可用)backup: 192.168.75.132 (同上)w

Nginx+uWSGI+Django部署web服务器

目录 Nginx+uWSGI+Django部署web服务器 环境说明 前言 搭建项目 Django部署 编辑luffy/luffy/settings.py 编辑luffy/app01/views.py 编辑luffy/luffy/urls.py 运行并测试 uWSGI部署 测试运行uWSGI 使用uWSGI运行django项目 uWSGi热加载Djangoa项目 部署nginx nginx配置uwsgi和django django部署static文件 重新加载nginx进行测试 测试nginx

HAProxy后端web服务器状态检测

后端web服务器状态检测 HAProxy有三种状态检测方式:1.基于四层的传输端口做状态监测2.基于指定的uri做状态监测3.基于指定的URI的resquest请求头部内容做状态监测 基于四层的传输端口做状态监测 四层传输时可以基于ip或者port做监测,也可以将ip和port监测在后端服务器上的另一个地址和端口用来实现数据通道和监测通道的分离示例:1.修改配置文件 [[email protected] ~]# vim /etc/haproxy/haproxy.cfg frontend web

Apache、IIS、Nginx等绝大多数web服务器,都不允许静态文件响应POST请求

最近调用一个接口,发现httppost请求目标网站会出现405 状态码,原因为 Apache.IIS.Nginx等绝大多数web服务器,都不允许静态文件响应POST请求 所以将post请求改为get请求即可 package com.changyou.test; import java.io.IOException; import java.io.UnsupportedEncodingException; //import org.apache.commons.httpclient.HttpCli

Atitit. 软件GUI按钮与仪表盘--web服务器区--获取apache配置文件路径 linux and apache的启动、停止、重启

Atitit.   软件GUI按钮与仪表盘--web服务器区--获取apache配置文件路径 linux and apache的启动.停止.重启 可以通过"netstat -anp" 来查看哪些端口被打开.定位到需要的apache...俄要的是80端口映射的apache Ps -aux查看进程命令行参数...三,字有个httpd,没看见参数....查询myusql,是能看见参数了.... 查看linux版本,cenos....查询httpd.conf文件位置... /etc/httpd

php表单提交时获取不到post数据的解决方法

原文:http://blog.csdn.net/whd526/article/details/53263181 博主运行PHP环境:windows+phpstorm+xampp 初学php,用echo $_POST["variable"]和var_dump($_POST) 都获取不到post数据. 解决方法如下: 1.找到php.ini 配置文件,查找enable_post_data_reading变量,确保其打开状态: 2.观察你的运行php的浏览器地址,会发现在PhpStorm中打