nginx 反向代理 tomcat (https、虚拟主机)

简介:
+关注继续查看

背景:

    有一个JSP开发的网站,需要放在tomcat里面运行,考虑到tomcat处理http请求不是那么强,计划前端添加一个nginx作为反向代理,并且提供https服务,并且通过虚拟主机开代理到指定域名的服务。

    我们的域名是www.wzlinux.com。

1、首先是安装nginx和tomcat

2、nginx配置文件如下

   包含301调整,以及https证书的设定,我的证书是在阿里云申请的,免费的哦

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#
# HTTPS server configuration
#
server {
    listen 80;
    server_name www.wzlinux.com;
    # enforce https
    return 301 https://$server_name$request_uri;
}
 
server {
    listen        443 ssl;
    server_name  www.wzlinux.com;
    ssl on;
    ssl_certificate /etc/nginx/cert/214226183630572.pem;
    ssl_certificate_key /etc/nginx/cert/214226183630572.key;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
#
#    # Load configuration files for the default server block.
#    include /etc/nginx/default.d/*.conf;
#
    location / {
          proxy_send_timeout 30;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $http_host;
          proxy_pass http://10.0.1.7:8080;
    }
}

3、tomcat虚拟主机的设定

    修改conf/server.xml文件,添加如下内容

1
2
3
4
5
6
7
8
9
<Host name="www.wzlinux.com"  appBase="webapps"
       unpackWARs="true" autoDeploy="true">
   <Context path="" docBase= "/usr/local/tomcat/webapps/wzlinux" 
            reloadable="true" crossContext="true" />
      <Valve className="org.apache.catalina.valves.AccessLogValve" 
             directory="logs"
             prefix="wzlinux." suffix=".txt"
             pattern="%{X-Forwarded-For}i %l %u %t &quot;%r&quot; %s %b" />
</Host>

     就是这么简单啦!!!!!


附录:nginx中proxy_set_header Host $host的作用

    nginx为了实现反向代理的需求而增加了一个ngx_http_proxy_module模块。其中proxy_set_header指令就是该模块需要读取的配置文件。在这里,所有设置的值的含义和http请求同中的含义完全相同,除了Host外还有X-Forward-For。

    nginx为了实现反向代理的需求而增加了一个ngx_http_proxy_module模块。其中proxy_set_header指令就是该模块需要读取的配置文件。在这里,所有设置的值的含义和http请求同中的含义完全相同,除了Host外还有X-Forward-For。

    Host的含义是表明请求的主机名,因为nginx作为反向代理使用,而如果后端真是的服务器设置有类似防盗链或者根据http请求头中的host字段来进行路由或判断功能的话,如果反向代理层的nginx不重写请求头中的host字段,将会导致请求失败【默认反向代理服务器会向后端真实服务器发送请求,并且请求头中的host字段应为proxy_pass指令设置的服务器】。

    同理,X_Forward_For字段表示该条http请求是有谁发起的?如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。因此,在配置用作反向代理的nginx中一般会增加两条配置,修改http的请求头:

proxy_set_header Host $http_host;
proxy_set_header X-Forward-For $remote_addr;

    这里的$http_host和$remote_addr都是nginx的导出变量,可以再配置文件中直接使用。如果Host请求头部没有出现在请求头中,则$http_host值为空,但是$host值为主域名。因此,一般而言,会用$host代替$http_host变量,从而避免http请求中丢失Host头部的情况下Host不被重写的失误。

 

     X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。 它不是RFC中定义的标准请求头信息,在squid缓存代理服务器开发文档中可以找到该项的详细介绍。标准格式如下:X-Forwarded-For: client1, proxy1, proxy2。

    这一HTTP头一般格式如下:

X-Forwarded-For: client1, proxy1, proxy2;

    其中的值通过一个 逗号+空格 把多个IP地址区分开, 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到一个请求,就把请求来源IP地址添加到右边。 在上面这个例子中,这个请求成功通过了三台代理服务器:proxy1, proxy2 及 proxy3。请求由client1发出,到达了proxy3(proxy3可能是请求的终点)。请求刚从client1中发出时,XFF是空的,请求被发往proxy1;通过proxy1的时候,client1被添加到XFF中,之后请求被发往proxy2;通过proxy2的时候,proxy1被添加到XFF中,之后请求被发往proxy3;通过proxy3时,proxy2被添加到XFF中,之后请求的的去向不明,如果proxy3不是请求终点,请求会被继续转发。

    鉴于伪造这一字段非常容易,应该谨慎使用X-Forwarded-For字段。正常情况下XFF中最后一个IP地址是最后一个代理服务器的IP地址, 这通常是一个比较可靠的信息来源。




     本文转自 wzlinux 51CTO博客,原文链接:http://blog.51cto.com/wzlinux/1956163,如需转载请自行联系原作者



相关文章
|
27天前
|
负载均衡 Unix 应用服务中间件
深入解析HTTP反向代理:探索NGINX的神奇之处
深入解析HTTP反向代理:探索NGINX的神奇之处
|
27天前
|
负载均衡 应用服务中间件 Linux
Nginx系列教程(12) - HTTP动态负载均衡(二)
Nginx系列教程(12) - HTTP动态负载均衡(二)
42 1
|
27天前
|
负载均衡 Dubbo 应用服务中间件
Nginx系列教程(11) - HTTP动态负载均衡(一)
Nginx系列教程(11) - HTTP动态负载均衡(一)
18 0
|
28天前
|
应用服务中间件 nginx
Nginx配置HTTPS
Nginx配置HTTPS
|
28天前
|
前端开发 Java 应用服务中间件
nginx代理https后,spring mvc web应用redirect https变成http
nginx代理https后,spring mvc web应用redirect https变成http
|
1月前
|
应用服务中间件 网络安全 nginx
Nginx配置同时访问http和https
Nginx配置同时访问http和https
|
2月前
|
监控 负载均衡 网络协议
Nginx神奇的499竟然不在HTTP响应码标准内?快来了解一下!
Nginx神奇的499竟然不在HTTP响应码标准内?快来了解一下!
109 0
|
2月前
|
应用服务中间件 网络安全 nginx
Nginx学习研究-Nginx 安装 SSL 配置 HTTPS
Nginx学习研究-Nginx 安装 SSL 配置 HTTPS
|
2月前
|
域名解析 负载均衡 应用服务中间件
nginx反向代理https域名时,请求报错502问题排查
nginx反向代理https域名时,请求报错502问题排查
|
3月前
|
应用服务中间件 Linux 网络安全
Linux配置Nginx SSL支持Https配置教程
Linux配置Nginx SSL支持Https配置教程
热门文章
最新文章
相关产品
云迁移中心
推荐文章
更多