欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

CentOS 6.5 nginx+tomcat+ssl配置

程序员文章站 2022-06-18 18:25:35
本文档用于指导在CentOS 6.5下使用nginx反向代理tomcat,并在nginx端支持ssl。 安装nginx。参见CentOS 6 nginx安装。 SSL证书申请。参见腾讯SSL证书申请和配置或[使用certbot为站点添加https支持]。 安装tomcat。目前使用的版本为8.x。一 ......

本文档用于指导在centos 6.5下使用nginx反向代理tomcat,并在nginx端支持ssl。

安装nginx。参见centos 6 nginx安装。

ssl证书申请。参见腾讯ssl证书申请和配置或[使用certbot为站点添加https支持]。

安装tomcat。目前使用的版本为8.x。一般使用以下版本:点击下载8.5.x

nginx 反向代理以及ssl配置
这里仅介绍片段,例子如下,以letsencrypt证书为例(腾讯证书配置参见https://cloud.tencent.com/document/product/400/4143):

upstream tomcat {
server 127.0.0.1:8080 weight=1;
}

server {
server_name xxx.com;
charset utf-8;

   location / {
       proxy_http_version                   1.1;
       proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
       proxy_set_header host $host;
       proxy_set_header x-real-ip       $remote_addr;
       proxy_set_header connection "";
       proxy_set_header x-forwarded-proto https;
       proxy_redirect off;
       client_max_body_size       100m;
       client_body_buffer_size   256k;
       proxy_connect_timeout     60;
       proxy_send_timeout         30;
       proxy_read_timeout         30;
       proxy_buffer_size         8k;
       proxy_buffers           4 64k;
       proxy_busy_buffers_size   64k;
       proxy_temp_file_write_size 64k;
       proxy_pass http://tomcat;
   }
    
   error_page 404             /404.html;

   # redirect server error pages to the static page /50x.html
   #
   error_page   500 502 503 504 /50x.html;
   location = /50x.html {
       root   html;
   }


   listen 443 ssl; # managed by certbot
   ssl_certificate /etc/letsencrypt/live/xxx.com/fullchain.pem; # managed by certbot
   ssl_certificate_key /etc/letsencrypt/live/xxx.com/privkey.pem; # managed by certbot
   include /etc/letsencrypt/options-ssl-nginx.conf; # managed by certbot
   ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by certbot

}
定义后端服务器。这里未举例负载均衡。

upstream tomcat {
server 127.0.0.1:8080 weight=1;
}
定义虚拟服务器

这里主要需要注意ssl证书的配置,以及代理部分的header设置,其影响tomcat端获取真实客户端ip、请求协议等,在未恰当配置的情况下可能造成获取的ip是nginx服务器的ip以及造成资源跨域问题。

tomcat配置
在nginx配置ssl证书的情况下,tomcat配置文件中不需要另行配置ssl证书,但需要获取nginx设置的请求头等信息。以下配置中的端口视具体情况配置。

将原本注释的8080 connector恢复,并改成如下

<connector port="8080" protocol="http/1.1"
connectiontimeout="20000"
redirectport="443"
proxyport="443"/>

在host标签内添加如下(如果已存在则忽略)
其中%h用于显示客户端ip,但是在代理模式下显示的是nginx的ip,可考虑将 "%h" 修改为 "%{x-real-ip}i" 即可获取到nginx请求头中已配置的客户端ip。
<valve classname="org.apache.catalina.valves.accesslogvalve"
directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t %r %s %b" />

获取真实ip,其中httpsserverport在nginx使用默认443端口时不需添加,否则应当指定。
<valve classname="org.apache.catalina.valves.remoteipvalve"
remoteipheader="x-forwarded-for"
remoteipproxiesheader="x-forwarded-by"
protocolheader="x-forwarded-proto"
protocolheaderhttpsvalue="https" httpsserverport="7001"
/>