服务配置详解

这篇笔记主要讲解的其实就是conf/server.xml中的一些配置项,涉及Tomcat服务器的功能配置、性能优化等内容。本篇笔记是基于Tomcat9进行讲解的。

官方文档:https://tomcat.apache.org/tomcat-9.0-doc/index.html

HTTP/HTTPS Connector配置

Tomcat中,Connector是处理网络请求的终端,使用浏览器上网时,我们最常用的两种协议是HTTP和HTTPS。

server.xml中,默认有这样的配置:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
  • port:使用的TCP端口
  • protocol:使用的协议
  • connectionTimeout:请求超时时间
  • redirectPort:当用户用HTTP协议请求某个资源,而该资源本身又被设置了必须要HTTPS方式访问,此时Tomcat会自动重定向到这个redirectPort设置的端口

以上配置能让我们使用HTTP协议与TCP 8080端口访问Tomcat服务器上的资源。

开启NIO2模式

JDK中新的NIO、NIO2相比旧的BIO,有更好的IO性能。将protocol属性替换成如下内容即可开启NIO2模式:

<Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
           connectionTimeout="20000"
           redirectPort="8443" />

开启APR(Apache Portable Runtime)模式

APR模式使用本地库,性能上得到了进一步提高,但是依赖于具体的操作系统平台,这里就不具体介绍了。

使用HTTPS

server.xml中有如下配置,取消注释就可以开启HTTPS了,但是直接启动会报错,因为我们必须配置HTTPS证书。

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" />

这里我们使用JDK自带的工具keytool生成一个自签名证书(仅用于测试)。

输入命令:

keytool -genkeypair -keyalg "RSA" -keystore "/home/ubuntu/tomcat.keystore"

此时我们就生成了一个对localhost签名的证书了。

将HTTPS的Connector修改为如下,指定证书路径和密码:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" keystoreFile="/home/ubuntu/tomcat.keystore" keystorePass="123456" />
  • keystoreFile:证书文件路径
  • keystorePass:证书文件密码

使用浏览器访问https://localhost:8443,由于是测试证书,因此显示如下:

继续访问即可。

注:实际上,我们网站一般都是通过在Nginx上配置HTTPS证书,然后通过Nginx反向代理应用服务器(如Tomcat)。以上内容大家了解即可,一般很少用到。

AJP Connector配置

AJP是一个二进制的TCP协议,主要应用于Web服务器(比如Apache)和Servlet容器之间传输数据,它通过保持TCP长连接来提高反向代理的数据传输性能。网上一些一知半解的博客说AJP用于动静分离什么的,其实这个协议和动静分离没有任何关系,它仅仅是用于将数据传输给Web服务器,然后由Web服务器转换为HTTP的方式再发送给客户端。

支持AJP的Web服务器主要是Apache的mod_jk,近几年很火的Nginx只有第三方模块nginx_ajp_module,项目Github地址:https://github.com/yaoweibin/nginx_ajp_module,但是用的人似乎不多,好多年未更新了,也不知道是否靠谱。还有一种说法是Nginx使用AJP相比HTTP没有什么优势,总之使用Nginx时几乎没人用AJP了。不仅如此,大部分人都建议关闭AJP Connector以提高Tomcat性能和安全性。

总之这个功能默认就是开着的,如果实际上线的系统中不使用AJP,尤其是非对外开放的系统中,一定要注意这个AJP的Connector,不需要就应该及时关闭,以免引发安全问题。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap