-
Lnmt 动静分离
a. Tomcat可以处理动态请求, 也可以处理静态请求
b. tomcat 处理静态资源效率不高
c. tomcat 处理动态请求 nginx 处理静态请求
要求:开发要所有静态资源存放在固定位置 /var/jpress/static -
LNMP原理
静态资源nginx自己处理
动态资源nginx交给PHP处理
#cat /etc/nginx/conf.d/tomcat.conf
server {
listen 80;
server_name sunny.com;
client_max_body_size 10m;
root /app/tomcat/webapps;
location / {
index index.jsp;
}
location ~ .jsp$ {
proxy_pass 127.0.0.1:8080;
}
}
nginx 负载均衡
#nginx 反向代理 + tomcat
upstream tomcat {
server 10.0.0.7:8080;
server 10.0.0.7:8081;
server 10.0.07:8082;
}
server {
listen 80;
server_name sunny.com;
location / {
proxy_pass http://tomcat;
}
}
- Tomcat 优化
2.1 Tomcat 安全优化
a telnet管理端口保护(强制) tomcat shutdown端口
修改shutdown端口
vim /app/tomcat/conf/server.xml
<server port='‘8115’ shutdown=""dangerous>
b. ajp 连接端口保护 (8009用于连接apache和tomcat)
- 如果需要使用apache+tomcat, 修改 端口
- 如果没有使用apache, 就注释这一行
<!-- server -->
c. 禁用管理端(强制)
- 管理端主要应用在tomcat测试环境中,删除webapps 下的manager host-manager文件
[… webapps]#rm manager/ host-manager/ -fr
d. 降权启动 (监牢模式)
在普通用户下面启动维护tomcat
1) 添加用户tomcat
#useradd tomcat
2) 修改tomcat所有者
#chmod -R tomcat.tomcat /app/tomcat/
3)换普通用户启动tomcat
#su - tomcat
#/app/tomcat/bin/startup.sh
开机自启动 通过tomcat用户
#vim /etc/rc.local
#su - tomcat -c /app/tomcat/bin/startup.sh
-c 执行命令 后面只接普通命令
注意:如果给nginx配置降权(监牢模式),端口在1~1024之间 特权端口 只能root使用,需要修改端口。
web 8099
upstream web_tools {
server 10.0.0.7:8099;
server 10.0.0.8:8099;
}
- 文件列表访问控制
默认展示站点目录下面所有内容
nginx 网站文件列表功能 autoindex on;
tomcat 默认关闭
conf/web.xml
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
- 版本信息的隐藏
conf/web.xml
修改页面,隐藏版本信息
<error-page>
<error-code>403</error-code>
<location>/forbidden.jsp</location>
</error-page>
- server header重写 (让黑客不清楚服务器谁)
查看头部信息
[root@sunny ~]# curl -I taobao.com
HTTP/1.1 302 Found
**Server: Tengine**
Date: Fri, 20 May 2022 05:40:27 GMT
Content-Type: text/html
Content-Length: 258
Connection: keep-alive
Location: http://www.taobao.com/
#vim /app/tomcat/conf/server.xml
在8080端口 添加sever=“nginx/1.16.1”
- 访问限制
<value classname="org.apache.catalina.values.RemoteAddrValue"
allow="61.148.18.*,12.111.11.22" deny="*.*.*.*">
- 起停脚本权限回收
最小化 700 750
/app/tomcat/bin/*.sh
2 Tomcat性能优化
参数数值调整方式
参考值:不设置数值,通过压力测试软件,看看tomcat性能
增加优化参数 通过压力测试软件 看看tomcat性能
压力测试工具
ab/webbench -----------------http压力测试
sress --------------------压力测试cpu内存swap
jmeter -------------------------压力测试Java
db/fio --------------------------------------测试磁盘性能
mysqlslap -------------------------------压力测试数据库mysql
loadrunner --------------------------------专业测试工具
tomcat 配置参数优化
/app/tomcat/conf/server.xml
- 注释ajp端口 8009
- tomcat工作模式
bio tomcat7同步 阻塞
nio tomcat 8 异步 非阻塞 nio1(默认) nio2
apr 高并发 额外安装插件
默认
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改为: protocol=“org.apache.coyote.http11.Http1Nio2Protocol”
配置apr模式
yum -y install apr apr-devel tomcat-native
修改为: protocol=“org.apache.coyote.http11.Http1AprProtocol”
注意: yum没有tomcat-native 需要编译安装
#cd /app/tomcat/bin/
#ll tomcat-native.tar.gz
#tar -vxf tomcat-native.tar.gz
#cd tomcat-native-1.2.23.-src/
#cd tomcat-native-1.2.23.-src/native/
#ls
#./configure && make && make install
#cat >> /etc/profile<<'EOF'
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export LD_RUN_PATH=$ LD_RUN_PATH:/usr/local/apr/lib
EOF
#. /etc/profile
/app/tomcat/conf/server.xml
maxThreads=“500” #最大的线程数量 200~400之间
acceptCount=“500” # 当达到最大的线程数量时,最大的队列长度,一般与maxThreads 一致
acceptorThreadCount=“2” 队列数量
enableLookups=“false” #禁止DNS逆向查询route -n /arp -n
compression=“on” #开启tomcat压缩功能
compressionMinSize=“2048” #压缩文件最小2048
compressableMimeType=“text/hmtl” #压缩哪些类型的文件
disableUploadTimeout=“true” #关闭上传文件超时间
minSpareThreads=“10” # 空闲时最小的线程数量
maxThreads如何配置
- 系统响应时间注意限制是CPU的计算能力, 如果maxThreads尽量设置小,降低同一时间争抢CPU的线程个数,可以提高计算机的效率
- 如果是IO或者数据库,注意影响是等待外部资源,将maxThreads设置大,会提高系统的处理能力。
java启动参数(catalina.sh) jvm 优化
设置jvm的开始内存大小(物理内测的1/64) jvm最大内存大小(物理内存的1/4)
修改catalina.sh
JAVA_OPTS=‘-Xms1024m -Xmx1024m -xloggc:/var/log/tomcat_gc.log’
xms jvm开始内存
xmx jvm 最大内存
xloggc 执行gc的log文件
java -jar xxxx.jar -Xms1024m -Xmx1024m -xloggc:/var/log/tomcat_gc.log