http://blog.sina.com.cn/s/blog_56d8ea900102vhaj.html
Nginx+Tomcat+SSL
实际上,大规模的网站都有很多台Web服务器和应用服务器组成,用户的请求可能是经由 Varnish、HAProxy、Nginx之后才到应用服务器,中间有好几层。而中小规模的典型部署常见的是 Nginx+Tomcat 这种两层配置,而Tomcat 会多于一台,Nginx 作为静态文件处理和负载均衡。
如果Nginx作为前端代理的话,则Tomcat根本不需要自己处理 https,全是Nginx处理的。用户首先和Nginx建立连接,完成SSL握手,而后Nginx 作为代理以 http 协议将请求转给 tomcat 处理,Nginx再把 tomcat 的输出通过SSL 加密发回给用户,这中间是透明的,Tomcat只是在处理 http 请求而已。因此,这种情况下不需要配置 Tomcat 的SSL,只需要配置 Nginx 的SSL 和 Proxy。
在代理模式下,Tomcat 如何识别用户的直接请求(URL、IP、https还是http )?
在透明代理下,如果不做任何配置Tomcat 认为所有的请求都是 Nginx 发出来的,这样会导致如下的错误结果:
request.getScheme() //总是 http,而不是实际的http或https
request.isSecure() //总是false(因为总是http)
request.getRemoteAddr() //总是 nginx 请求的 IP,而不是用户的IP
request.getRequestURL() //总是 nginx 请求的URL 而不是用户实际请求的 URL
request.getServerName //总是nginx请求的ip
request.getServerPort //总是nginx请求的端口
response.sendRedirect( 相对url ) //总是重定向到 http 上 (因为认为当前是 http 请求)
如果程序中把这些当实际用户请求做处理就有问题了。解决方法很简单,只需要分别配置一下 Nginx 和 Tomcat 就好了,而不用改程序。
配置 Nginx 的转发选项:
proxy_set_header Host $host; //解决getRequestURL、getServerName、getServerPort
//如果nginx是80服务,上面就够,代表默认servlet_port是80;否则需要Host $host:$server_port,不配置servlet_port会导致丢失端口
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; //解决getScheme,isSecure,sendRedirect
配置Tomcat server.xml 的 Engine 模块下配置一个 Value:
< Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https" />
配置双方的 X-Forwarded-Proto 就是为了正确地识别实际用户发出的协议是 http 还是 https。X-Forwarded-For 是为了获得实际用户的 IP。
这样以上5项测试就都变为正确的结果了,就像用户在直接访问 Tomcat 一样。
相关推荐
最近学习Nginx+tomcat实现 负载均衡。 首先大家注意: 本文章中没有session共享,关于session共享我会在下一篇中讲解,先实现Nginx+tomcat负载均衡再实现session共享。 从网上查了好多资料,多走了很多弯路,现在把...
### Nginx+Tomcat负载均衡配置教程 #### 一、Nginx 安装与配置 **1. 下载并安装Nginx** - **下载Nginx**:前往Nginx官方网站下载适合您操作系统的最新版本。推荐下载稳定版以确保运行稳定。 - **解压文件**:将...
nginx+tomcat7+session共享 kryo序列化所需要包 1.将上面所提到的包全部拷贝到tomcat的lib下(三台tomcat都需要) 2.修改每台tomcat的conf目录下得context.xml文件或者server.xml文件,在其中加入如下任意一段代码...
### NGINX + TOMCAT 在 Windows 下的负载均衡配置详解 #### 一、项目背景及目标 本案例旨在实现一个基于Windows平台的NGINX与TOMCAT的负载均衡集群配置。具体而言,通过配置NGINX作为前端HTTP服务器,后端连接两个...
【Nginx+Tomcat负载平衡】是一种常见的Web服务架构模式,主要用于提高网站或应用的可用性和性能。在这个模式中,Nginx作为反向代理服务器,负责接收来自客户端的HTTP请求,并根据预设的策略将这些请求分发到多个...
"Nginx + Tomcat 实现动静分离负载均衡" 本文将详细介绍如何使用 Nginx 和 Tomcat 实现动静分离负载均衡。动静分离是指将静态资源(如图片、CSS、JavaScript 文件等)和动态资源(如 JSP、Servlet 等)分离,使用...
在Linux环境下,构建一个高效的Web服务架构通常会结合Nginx和Tomcat,利用Nginx的反向代理和负载均衡能力,以及Tomcat对于Java应用的出色支持。本配置指南将详细介绍如何在Linux系统中设置Nginx与Tomcat的负载均衡...
`将JSESSIONID值作为哈希键,使得Nginx能够基于这个哈希值选择相同的服务器,从而实现session粘滞。 **测试与优化** 完成上述配置后,重启Nginx和Tomcat服务,然后测试session是否能在不同服务器间正确共享。可以...
这里我们关注的是如何在Windows环境下,利用Nginx作为反向代理服务器,与Tomcat应用服务器集群配合,实现负载均衡,并且确保Session数据在多个Tomcat实例之间共享。这个场景对于大型网站或高并发的应用尤其实用,...
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 logs/access.log main; ...
本压缩包包含了在三种主流服务器——Apache、Nginx和Tomcat上设置CORS的方法。 **Apache服务器** Apache服务器可以通过修改`.htaccess`文件或者配置httpd.conf文件来实现CORS设置。在`.htaccess`文件中,可以添加...
- **4xx客户端错误**:400 Bad Request表示请求语法错误,401 Unauthorized表示未授权,404 Not Found表示找不到资源。 - **5xx服务器错误**:500 Internal Server Error表示服务器遇到不可预期的情况,502 Bad ...
1. **Nginx与Tomcat的组合** Nginx是一个高性能的HTTP和反向代理服务器,通常用于处理静态内容和作为应用服务器(如Tomcat)的前端,提供负载均衡和缓存功能。Tomcat是Java Servlet和JavaServer Pages的容器,主要...
- 当使用 Keepalived 为 Nginx 和 Tomcat 提供热备时,需要在配置文件中添加 `realserver` 的配置。 - 对于 LVS 的热备,则不需要配置 `realserver`,因为 Keepalived 已经包含了 LVS 的相关配置参数。 - 需要定期...
### Nginx 和 Tomcat 配置 SSL 与负载均衡详解 #### 一、Nginx 支持 SSL 的确认方法 Nginx 支持 SSL 加密是现代 Web 服务器的基本需求之一,确保数据传输的安全性。首先,我们需要确认当前安装的 Nginx 版本是否...
### Nginx与Tomcat整合的关键知识点 #### 一、Nginx与Tomcat简介 - **Nginx**:一款高性能的HTTP和反向代理Web服务器,它以其稳定性、丰富的功能集、简单的配置文件和较低的内存消耗而闻名。 - **Tomcat**:Apache...
Nginx 和 Tomcat 是两种常用的 Web 服务器,它们在 SSL 安全连接配置上有各自的方法。SSL(Secure Socket Layer)是一种网络安全协议,用于在互联网上建立加密传输通道,保护数据的安全性。本文将详细讲解如何在 ...
我下载的niginx版本是nginx-... #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"';
本文将详细介绍如何使用Nginx作为反向代理服务器,结合两个Tomcat实例形成集群,并利用Memcache实现会话共享。 一、环境介绍 本示例是在两台服务器(Server1和Server2)上进行,操作系统均为Ubuntu 12.04 amd64,IP...