千家信息网

nginx代理,tomcat部署服务器,后端获取客户端真实i

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,1、环境部署说明后端部署在tomcat服务器上,前端用nginx做代理访问tomcat部署目录nginx配置:upstream wcfront{ server localhost:8991;/
千家信息网最后更新 2025年12月03日nginx代理,tomcat部署服务器,后端获取客户端真实i

1、环境部署说明

后端部署在tomcat服务器上,前端用nginx做代理访问

tomcat部署目录

nginx配置:

upstream wcfront{    server  localhost:8991;//后台接口}server {    listen       8998;//h6访问接口    server_name  192.168.2.37;    charset utf-8;    proxy_set_header Host $host:$server_port;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;     location ^~ /fs/ {        alias  /var/zkbc/fs/;    }       location = / {        root   /opt/nlcn/backend/wcfront/www;//h6页面路径        index  index.html index.htm;    }    location = /index {        root   /opt/nlcn/backend/wcfront/www;        rewrite ^(.*) /;    }    location ~ .*\.(html)$ {        root   /opt/nlcn/backend/wcfront/www;        index  index.html index.htm;    }     location ~ .*(css)$ {        root   /opt/nlcn/backend/wcfront/www;        index  index.html index.htm;    }        location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|woff|woff2|svg|ttf)$ {        root   /opt/nlcn/backend/wcfront/www;        index  index.html index.htm;    }    location / {        proxy_pass http://wcfront;        proxy_set_header Host $host:$server_port;    }}

2、当前配置后端获取ip一直未127.0.0.1,现在需求是能够获取客户端的ip

(1)在nginx配置上加如下配置,注意:在location /下加

 location / {        proxy_pass http://wcfront;        proxy_set_header Host $host:$server_port;        proxy_set_header   Remote_Addr        $remote_addr;        proxy_set_header   X-Real-IP          $remote_addr;        proxy_set_header   X-Forwarded-For    $proxy_add_x_forwarded_for;    }

(2)重启nginx

nginx -s reload

ps -ef | grep nginx 可以查看nginx的启动状态及启动时间

(3)配置tomcat

service.xml 下找到 pattern="%h %l %u %t "%r" %s %b" />

%h 修改成 %{X-Real-IP}i

重启服务

(4) java获取客户端ip的方式

public static String getIpAddress(HttpServletRequest request) {        String ip = null;        //X-Forwarded-For:Squid 服务代理        String ipAddresses = request.getHeader("X-Forwarded-For");        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {            //Proxy-Client-IP:apache 服务代理            ipAddresses = request.getHeader("Proxy-Client-IP");        }        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {            //WL-Proxy-Client-IP:weblogic 服务代理            ipAddresses = request.getHeader("WL-Proxy-Client-IP");        }        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {            //HTTP_CLIENT_IP:有些代理服务器            ipAddresses = request.getHeader("HTTP_CLIENT_IP");        }        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {            //X-Real-IP:nginx服务代理            ipAddresses = request.getHeader("X-Real-IP");        }        //有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP        if (ipAddresses != null && ipAddresses.length() != 0) {            ip = ipAddresses.split(",")[0];        }        //还是不能获取到,最后再通过request.getRemoteAddr();获取        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {            ip = request.getRemoteAddr();        }        return ip;    }

3、结论

需要注意的是这种方式获取的是客户端所在网络的外网地址,而不是客户端的真实ip。

例如

多个终端都在同一个局域网访问,获取的ip为同一个网关地址。

手机4g访问,获取的ip也不是手机的实际ip,而是网络ip,例如获取的ip是61.158.147.109,但实际手机ip是61.158.147.*(同网段另外一个ip地址),不是特别清楚手机ip和109什么关系,有兴趣的朋友可以研究研究。

代理 服务 客户 配置 手机 地址 端的 网络 客户端 服务器 多个 实际 接口 方式 研究 清楚 兴趣 前端 后台 多层 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发的观点 服务器上的小盘是多大的 vb程序中怎么读出数据库中 中国网络技术与应用就业前景 许昌市盈联网络技术有限公司 怎样注册中指数据库账号 龙池网络技术有限公司 签订软件开发合同注意什么 软件开发文档多少钱 掌易游戏网络技术有限公司 浦东新区国际软件开发定做价格 法国cep数据库 工程软件开发服务价格 万达网络科技集团互联网渐 机房服务器怎么部署才安全 阿里云数字服务器客服 学校网络安全工作相关制度 数据库系统功能ppt 网络文明网络安全主题短片 厦门走启互联网科技面试题 学习网络技术要什么电脑 如何做服务器电脑 黑客和网络技术的关系 苏州app软件开发费用是多少 地域原因软件开发成本低 小蛮腰网络安全 一年级网络安全教育心得体会 临夏窖靡网络技术有限公司 宽带网络技术革新 软件开发经营范围 审批
0