Jetty/Tomcat + Nginx反向代理获取客户端真实IP、域名、协议、端口

问题Nginx反向代理后,Servlet应用通过request.getRemoteAddr()取到的IP是Nginx的IP地址,并非客户端真实IP,通过request.getRequestURL()获取的域名、协议、端口都是Nginx访问Web应用时的域名、协议、端口,而非客户端浏览器地址栏上的真实域名、协议、端口。例如在某一台IP为10.4.64.22的服务器上,Jetty或者Tomcat端口号为...
阅读(178) 评论(0)

MINA、Netty、Twisted一起学(十二):HTTPS

由于HTTPS协议是由HTTP协议加上SSL/TLS协议组合而成,在阅读本文前可以先阅读一下HTTP服务器和SSL/TLS两篇博文,本文中的代码也是由这两篇博文中的代码组合而成。HTTPS介绍上一篇博文中介绍了SSL/TLS协议,我们平时接触最多的SSL/TLS协议的应用就是HTTPS协议了,现在可以看到越来越多的网站已经是https开头了,百度搜索也由曾经的http改为https。有关百度为什么升...
阅读(532) 评论(0)

MINA、Netty、Twisted一起学(十一):SSL/TLS

什么是SSL/TLS不使用SSL/TLS的网络通信,一般都是明文传输,网络传输内容在传输过程中很容易被窃听甚至篡改,非常不安全。SSL/TLS协议就是为了解决这些安全问题而设计的。SSL/TLS协议位于TCP/IP协议之上,各个应用层协议之下,使网络传输的内容通过加密算法加密,并且只有服务器和客户端可以加密解密,中间人即使抓到数据包也无法解密获取传输的内容,从而避免安全问题。例如广泛使用的HTTPS...
阅读(533) 评论(1)

HTTPS配置入门:Nginx、Node.js配置HTTPS服务器

申请数字证书首先需要申请一个免费的数字证书,前提是有个域名,申请起来还是很方便的。例如可以在腾讯云申请:https://www.qcloud.com/product/ssl,具体申请步骤请参考腾讯云文档,本文不再详细介绍。当然还有收费的数字证书,土豪随意。数字证书申请成功后,下载下来,文件包含一个私钥(.key)和一个数字证书(.crt)。申请证书时需要制定域名,例如我自己的域名是gw2.vsgam...
阅读(1262) 评论(0)

Spring Session + Redis实现分布式Session共享

通常情况下,Tomcat、Jetty等Servlet容器,会默认将Session保存在内存中。如果是单个服务器实例的应用,将Session保存在服务器内存中是一个非常好的方案。但是这种方案有一个缺点,就是不利于扩展。目前越来越多的应用采用分布式部署,用于实现高可用性和负载均衡等。那么问题来了,如果将同一个应用部署在多个服务器上通过负载均衡对外提供访问,如何实现Session共享?实际上实现Sessi...
阅读(20728) 评论(9)

Maven仓库搭建(二):GitHub、又拍云、七牛云存储

在上一篇博文中,主要介绍了Maven仓库搭建原理,除了Nexus外,随意使用一个HTTP服务器,例如Tomcat或Nginx,都可搭建一个自己的Maven仓库。无论是用Nexus还是HTTP服务器搭建Maven仓库,总归需要一台服务器,一台服务器需要花钱买和花时间维护,成本比较大。Nexus一般是公司用的比较多,个人不推荐使用。本文就是介绍一些适合个人搭建Maven仓库的方式,相对来说比Nexus更...
阅读(1309) 评论(0)

Maven仓库搭建(一):一台HTTP服务器即可(Tomcat、Apache或Nginx)

作为一个Java老程序员,多多少少都会有一些自己写的各种常用代码,如果每写一个项目都把这些代码拷贝一份到新项目比较麻烦的,打成jar包引入到项目会方便很多。如果想让这些jar包能通过Maven引入进项目,那就需要搭建Maven仓库。说到Maven仓库搭建,很多人第一想到的一般都是Nexus。Nexus的确是非常好的方案,但是总归需要一台服务器,一台服务器需要花钱买和花时间维护,成本比较大。Nexus...
阅读(3267) 评论(1)

云存储Java客户端上传文件

什么是云存储准确来说应该称为对象存储。云存储是比较流行的一种云服务,提供图片、视频等文件的存储服务。具有代表性的产品有:七牛云、阿里云对象存储OSS、又拍云、腾讯云对象存储服务COS。云存储能做什么打个比方,文件上传这种需求在开发中会经常遇到,例如开发一个BBS,用户会在帖子中插入图片、用户上传头像、上传视频、上传附件等。碰到此类需求,传统的做法是自备服务器和存储,将上传的文件存入自己的存储上,再来...
阅读(1714) 评论(1)

MyBatis Generator实现MySQL分页插件

MyBatis Generator是一个非常方便的代码生成工具,它能够根据表结构生成CRUD代码,可以满足大部分需求。但是唯一让人不爽的是,生成的代码中的数据库查询没有分页功能。本文介绍如何让MyBatis Generator生成的代码具有分页功能。MyBatis Generator结合Maven的配置和使用在实现分页之前,首先简单介绍MyBatis Generator如何使用。MyBatis Ge...
阅读(9523) 评论(3)

Maven profile结合Maven AntRun Plugin实现不同环境配置文件分离打包

在Java项目中通常会有各种配置文件,例如有xml、properties。在不同的环境下配置文件的内容可能会不一样,例如正式环境、测试环境、开发环境连的不是同一个数据库,访问的接口不一样,或者日志的级别不同。如果每次部署不同环境时都要改配置文件的各种配置是非常麻烦的。在这种情况下,可以将这些配置文为每个环境复制一个,分别配置不同的内容,打包部署时不同环境的包中打入对应的配置文件。...
阅读(6050) 评论(0)

Java线程池详解:ThreadPoolExecutor、Executors

在操作系统中,线程是一个非常重要的资源,频繁创建和销毁大量线程会大大降低系统性能。Java线程池原理类似于数据库连接池,目的就是帮助我们实现线程复用,减少频繁创建和销毁线程。ThreadPoolExecutorThreadPoolExecutor是线程池的核心类。首先看一下如何创建一个ThreadPoolExecutor。下面是ThreadPoolExecutor常用的一个构造方法:ThreadPo...
阅读(1393) 评论(0)

如何线程安全地遍历List:Vector、CopyOnWriteArrayList

遍历List的多种方式在讲如何线程安全地遍历List之前,先看看通常我们遍历一个List会采用哪些方式。方式一:for(int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); }方式二:Iterator iterator = list.iterator(); while(iterator.hasNext()) {...
阅读(1874) 评论(1)

Async.js解决Node.js操作MySQL的回调大坑

由于JavaScript语言异步特性,在使用Node.js执行很多操作时都会使用到回调函数,其中就包括访问数据库。如果代码中的业务逻辑稍微复杂一点,回调一层层嵌套,那么代码很容易进入Callback Hell,无论对写代码的人还是阅读代码的人,都是精神上的折磨。...
阅读(3909) 评论(0)

Java用WebSocket + tail命令实现Web实时日志

在Linux操作系统中,经常需要查看日志文件的实时输出内容,通常会使用tail -f或者taif命令。查看实时日志可能会需要首先SSH连上Linux主机,步骤很麻烦不说,如果是生产环境的服务器,可能还会控制各种权限。基于Web的实时日志可以解决这个问题。由于传统的HTTP协议是请求/响应模式,而实时日志需要不定时的持续的输出,由服务器主动推送给客户端浏览器。所以这里使用的是HTML5的WebSock...
阅读(7584) 评论(46)

Maven插件wagon-maven-plugin自动化部署Java项目到Linux远程服务器

通常情况下,程序开发完成后部署到线上Linux服务器,可能需要经历打包、将包文件传到服务器、SSH连上服务器、敲命令启动程序等一系列繁琐的步骤。实际上这些步骤都可以通过Maven的一个插件wagon-maven-plugin来自动完成。配置Linux服务器用户名和密码为了让wagon-maven-plugin插件能SSH连上Linux服务器,首先需要在Maven的配置文件settings.xml中配...
阅读(2617) 评论(0)
89条 共6页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:634201次
    • 积分:6695
    • 等级:
    • 排名:第3325名
    • 原创:89篇
    • 转载:0篇
    • 译文:0篇
    • 评论:657条
    博客专栏
    最新评论