当前位置: 移动技术网 > 科技>操作系统>Linux > CentOS 6.5 nginx+tomcat+ssl配置

CentOS 6.5 nginx+tomcat+ssl配置

2020年03月18日  | 移动技术网科技  | 我要评论

本文档用于指导在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"
/>

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网