工具—远程桌面查看器--VNC 172.40.50.118:8
###################################################
opration linux高级运维
day 04
常见压力测试工具:
ab -c 并发数 -n 总请求数 URL
http_load -p 并发数 -s 测试时间 URL
webbench -c 并发数 -t 测试时间 URL
siege -c 并发数 -r 重复次数 URL
#########################################
nginx全局配置优化:
1.不显示Nginx具体版本号
#vim /usr/local/nginx/conf/nginx.conf
http {
server_tokens off; }
#curl -I http://192.168.4.5
worker_processes; //与CPU核心数量一致
error_logs /var/log/nginx.error_log info; //定义日志级别
##########################################
2.如果客户端访问服务器提示“Too many open files”如何解决
a) 修改系统配置[系统对很多东西有限制]
1.最大开几个进程
2.最大开几个文件
3.登录人数
# yum -y install httpd-tools
#ab -c 2000 -n 2000 http://192.168.4.5/ (服务器报错too many open files)
event模块优化:
软件本身参数调整:
# ulimilt -a
# vim /etc/security/limits.conf /重起计算机才有效 ,永久有效
#<domain>用户*表示对所有用户有效 <type> <item> <value>
* soft nofile 100000
* hard nofile 100000
# ulimit -Hn 20000 /临时有效
# ulimit -Sn 20000 /H硬限制S软限制
# ulimilt -a
nofile 打开文件数
#ab -c 10000 -n 10000 http://192.168.4.5/ /ab并发c用户n数量
#watch -n 1 ss -s
# ss -s /列出所有打开的网络连接端口
#vim /usr/local/nginx/conf/nginx.conf
worker_processes 2; //与CPU核心数量一致
events {
worker_connections 20000; //每个worker最大并发连接数
#########################################
3.如何解决客户端访问头部信息过长的问题(http模块优化)
测试脚本(服务器414报错,缓存不够URI Too Large) 请求的地址栏过长超过限定头部信息大小
#!/bin/bash
URL=http://192.168.4.5/index.html?
for i in {1..5000}
do
URL=${URL}v$i=$i
done
curl $URL
http {
client_header_buffer_size //默认请求包头信息的缓存
large_client_header_buffers //大请求包头部信息的缓存个数与容量
client_header_buffer_size 1k; //默认请求包头信息的缓存
large_client_header_buffers 4 4k; //大请求包头部信息的缓存个数与容量k/m/g
//先根据client_header_buffer分配,如果不够,再根据large值分配
##########################################
4.如何让客户端浏览器缓存数据(http模块优化)
在Firefox地址栏内输入about:cache将显示Firefox浏览器的缓存信息
静态缓存在用户的电脑【视频、音乐、图片】
#vim /usr/local/nginx/conf/nginx.conf
server {
location / {}
location ~ \.(jpg|jpeg|gif|png|css|js|ico|xml|flv)$ {
access_log off;
expires 30d; /过期时间30天
} }
#nginx -s reload
#find / -name "*.jpg"
#cp xx.jpg /usr/local/nginx/html/x.jpg
#firefox 192.168.4.5/x.jpg
#firefox about:cache
http://192.168.2.100/a.jpg 2727 bytes 4 2017-07-03 2017-08-02
#########################################
5.error_page 404 //自定义404错误页面
返回首页
返回自定义的报错页面
#vim /usr/local/nginx/conf/nginx.conf
server {
... ...
charset utf-8; /中文字符集
error_page 404 400 /404.html;
}
#nginx -s reload
#cd /usr/local/nginx/html
#echo "网站崩溃了" > 404.html
#########################################
调优方向:
软件:本身参数
硬件:DDR4、ddr3内存条、800Hz、CPU内核数量 2GHz 、 SDD固态盘
操作系统[内核] :/proc/里面
集群
nginx优化:
#curl -I http://192.168.4.5 (查看服务器信息-暴露版本信息)
#vim /usr/local/nginx/conf/nginx.conf
worker_processes 2; //与CPU核心数量一致
events {
worker_connections 10000; //每个worker最大并发连接数65536
}
http {
server_tokens off; //不显示Nginx具体版本号
client_header_buffer_size 1k; //默认请求包头信息的缓存
large_client_header_buffers 4 4k; //大请求包头部信息的缓存个数与容量k/m/g
//先根据client_header_buffer分配,如果不够,再根据large值分配
######################################
http模块优化:
sendfile on; //提升Nginx读文件性能,访问速度加快
tcp_nodelay on; //关闭TCP的默认延迟发送数据,ping包
keepalive_timeout 10; //保持连接的超时时间,短时间不断开,一次握手,多次请求
gzip on; //压缩页面,节省流量 (所有浏览器都支持gzip解压,mp3、jpg多媒体文件不要压缩)
gzip_min_length 1000; //1000字节以下不压缩
gzip_comp_level 4; //压缩比例,压缩比例越高,cpu消耗越大
gzip_types text/plain text/css application/json application/x-javascript text/xml
application/xml application/xml+rss text/javascript; //压缩格式
open_file_cache max=2000 inactive=20s; //设置服务器文件缓存,最大缓存2000个文件句柄,关闭20秒内无请求的文件句柄
open_file_cache_valid 60s; //文件句柄的有效时间是60秒,60秒后过期
open_file_cache_min_uses 5; //只有访问次数超过5次会被缓存
open_file_cache_errors off; //缓存出错不报错
}
常见扩展名gzip_types:/usr/local/nginx/conf/mime.types auodio声音 video视频
########################################
缓存
浏览器[缓存]
varnish[缓存]异地
nginx硬盘[缓存]
盗链接
youku,letv,aiqiyi,tudou
防止盗链:浏览器向web服务器发送请求时;http头部信息,header的一部分;
Referer:我从哪个页面链接过来
none表示没有referer,即直接访问;blocked有referer但被防火墙或代理删除;
server_name 最后的域名
www.sina.com
Referer:www.sina.com
百度:搜索sina
链接www.sina.com
Referer:www.baidu.com
判断referer是不是www.sina.com
rewrite ^/ http://www.sina.com/a.jpg
步骤:
# cat /usr/local/nginx/conf/nginx.conf
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.tarena.com;
if ($invalid_referer) {
rewrite ^/ http://www.tarena.com/403.html;
}}
nginx总结:
用户认证
虚拟主机:IP,端口,域名
SSL加密网站
调度器(负载均衡,web高可用)
LNMP(动态)
地址重写
优化[并发,版本,压缩,缓存,keepalive,自定义报错]
++++++++++++++++++++++++++++++++++++++
tomcat概述:
PHP网站开发;shell运维。java通用;c语言 通用;python通用
apache,nginx:php 不支持java
JAVA网站:Tomcat,weblogic,websphere,Jboss,resin
java的标准: 标准版SE、企业版EE、移动版ME
JDK:java软件开发工具包,运行环境、java工具(编译、排错、打包等)、基础类库
JRE:JDK的子集,java标准实现和核心类库,无工具
红帽光盘自带openjdk,和oracle官方jdk
java Servlet:针对网站,一种扩展web服务器功能的组件规范。能够以种可移植的方法来提供动态的、面向用户的内容,处理用户请求。
常见Servlet容器:IBM--websphere、Oracle--weblogic、Apache--tomcat、RedHat--Jboss
JSP(java server page):网页上的代码以.jsp结尾,SUN推出的类似于ASP的镶嵌型的JSP,把JSP TAG镶嵌到HTML语句中,大大简化和方便了网页的设计和修改
#######################################
bin/ 主程序目录--开startup关shutdown服务; lib/ 库文件目录 ; logs/ 日志目录; temp/ 临时目录 ;work/ 自动编译目录 ; conf/ 配置文件目录 ; webapps/ 页面目录;
server.xml主配置文件;context.xml定义会话管理器JDBC等;tomcat-users.xml用户认证的帐号和密码配置文件
tomcat[java编写的Web服务器,可自动解压包,严格区分大小写且无报错提示,需看logs(tailf),启动慢-需等待生成随机数]
查看日志:grep 'failed' /usr/local/tomcat/logs/catalina.2017-07-03.log服务日志 localhost虚拟主机日志
端口8005==shutdown关闭服务; engine调度器 ;appbase基础目录; docbase页面路径;path指定项目不写默认为ROOT项目;
#######################################
安装并启动tomcat:
系统自带默认已安装:java-1.8.0-openjdk.x86_64
cd lnmp_soft
tar -xf apache-tomcat-....
mv apache-tomcat... /usr/local/tomcat //移动到哪就装在哪
/usr/local/tomcat/bin/startup.sh 启动服务
测试页面访问:
netstat -antpu | grep 8080 或java //端口为8080
firefox http://192.168.2.100:8080
tomcat配置文件模版框架:connector 与engine平级
#vim /usr/local/tomcat/conf/server.xml
<server>
<service>
<connector port=8080 /> /默认8080,可改成80端口
<engine default=localhost> /调度器,调用域名
<host name=localhost appbase=webapps>
</host> /一个host一个网站,域名、路径
<host name=www.a.com appbase=
/usr/local/tomcat/webapps/xxx>
</host>
</engine>
</service>
</server>
#######################################
实验1:基于域名的虚拟主机www.a.com,www.b.com
vim /usr/local/tomcat/conf/server.xml
... ...
<Engine ...>
<Host name="www.a.com" appBase="a"
unpackWARs="true" autoDeploy="true">
</Host>
<Host name="www.b.com" appBase="b"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
#cd /usr/local/tomcat/
#mkdir -p {a,b}/ROOT
#echo "AAA" > a/ROOT/index.html
#echo "BBB" > b/ROOT/index.html
#/usr/local/tomcat/bin/shutdown.sh
#/usr/local/tomcat/bin/startup.sh
#curl http://www.a.com:8080
#curl http://www.b.com:8080
#####################################
实验2:设置自定义网页ROOT路径(注意大小写)
#vim /usr/local/tomcat/conf/server.xml
... ...
<Host name="www.a.com" appBase="a"
unpackWARS="true" autoDeploy="true">
<Context path="" docBase="chen" reloadable="true"/>
</Host>
<Host name="www.b.com" appBase="b"
unpackWARS="true" autoDeploy="true">
</Host>
#mkdir -p /usr/local/tomcat/a/chen
#echo "chenguizhen" > /usr/local/tomcat/a/chen/index.html
#/usr/local/tomcat/bin/shutdown.sh
#/usr/local/tomcat/bin/startup.sh
实验3:当用户访问test时转到/var/www/html/下找页面,(相当于nginx里的rewrite)
#vim /usr/local/tomcat/conf/server.xml
... ...
<Host name="www.a.com" appBase="a"
unpackWARS="true" autoDeploy="true">
<Context path="/test" docBase="/var/www/html/" reloadable="true"/>
</Host>
#/usr/local/tomcat/bin/shutdown.sh
#/usr/local/tomcat/bin/startup.sh
测试是否打开/var/www/html下的首页:
#firefox http://www.a.com:8080/test/
#########################################
实验4:加密站点
装完jdk后有keytool工具包(注释为<!-- -->)
apache[httpd:80\443, tomcat 8080\8443]
SSL加密网站:
1.生成密钥:
# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore
备注:
-genkeypair 生成密钥
-alias 别名
-keyalg 算法为RSA
-keystore 密钥文件存储路径及文件名
-keysize 默认1024位
-validity<valDays>有效期天数默认一年,到期网站访问不了
# keytool -genkeypair --help【查看帮助】
2.调用密钥:
# vim /usr/local/tomcat/conf/server.xml / ...84行左右
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456"
clientAuth="false" sslProtocol="TLS" />
3.重启服务测试
firefox https://192.168.2.100:8443
tomcat端口和虚拟主机是独立的,8443可以加密所有网站
8009没有用,可以注释掉
########################################
每个虚拟主机可以做独立日志
给b网站加日志:复制到b的host里
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="www_b_access_log" suffix=".txt" 扩展名txt
pattern="%h %l %u %t "%r" %s %b" /> /名称上自动加时间
Tomcat 优化
修改Connector属性
<Connector port="8080" protocol="HTTP/1.1"
maxTreads="1000" /最大线程
minSpareTreads="100" /最小空闲线程
maxSpareTreads="1000" /最大空闲线程
enableLookups="false" /不要支持查询dns解析
URIEncoding="utf-8" /编码
acceptCount="1000" /端口队列最大数
/>
1 案例1:Nginx常见问题处理
2 案例2:安装部署Tomcat服务器
3 使用Tomcat部署虚拟主机
1 案例1:Nginx常见问题处理
1.1 问题
本案例要求对Nginx服务器进行适当优化,以提升服务器的处理性能:
- 如果客户端访问服务器提示“Too many open files”如何解决
- 如何解决客户端访问头部信息过长的问题
- 如何让客户端浏览器缓存数据
- 如何自定义返回给客户端的404错误页面
然后客户机访问此Web服务器验证效果:
- 使用ab压力测试软件测试并发量
- 编写测试脚本生成长头部信息的访问请求
- 客户端访问不存在的页面,测试404错误页面是否重定向
1.2 方案
使用2台RHEL7虚拟机,其中一台作为Nginx服务器(192.168.4.5)、另外一台作为测试用的Linux客户机(192.168.4.100),如图-1所示。
图-1
Nginx优化主要从配置文件着手,常见优化参数如下:
- worker_processes //与CPU核心数量一致
- worker_connections //每个worker最大并发连接数
- client_header_buffer_size //默认请求包头信息的缓存
- large_client_header_buffers //大请求包头部信息的缓存个数与容量
- error_page 404 //自定义404错误页面
1.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:构建Nginx服务器
1)源码安装Nginx软件
1 [root@svr5 ~]# yum -y install gcc pcre-devel openssl-devel //安装常见依赖包
2 [root@svr5 ~]# useradd -s /sbin/nologin nginx
3 [root@svr5 ~]# tar -zxvf nginx-1.8.0.tar.gz
4 [root@svr5 ~]# cd nginx-1.8.0
5 [root@svr5 nginx-1.8.0]# ./configure \
6 > --prefix=/usr/local/nginx \ //指定安装路径
7 > --user=nginx \ //指定用户
8 > --group=nginx \ //指定组
9 > --with-http_ssl_module //开启SSL加密功能
10 [root@svr5 nginx-1.8.0]# make && make install //编译并安装
2)启用Nginx服务并查看监听端口状态
1 [root@svr5 ~]# /usr/local/nginx/sbin/nginx
2 [root@svr5 ~]# netstat -anptu | grep nginx
3 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10441/nginx
步骤二:优化前从客户机访问Nginx服务器测试
1)使用ab高并发测试
1 [root@svr100 ~]# ab –n 2000 –c 2000 http://192.168.4.5/
2 Benchmarking 192.168.4.5 (be patient)
3 socket: Too many open files (24) //提示打开文件数量过多
2)使用脚本测试长头部请求是否能获得响应
1 [root@svr100 ~]# cat buffer.sh
2 #!/bin/bash
3 URL=http://192.168.4.5/index.html?
4 for i in {1..5000}
5 do
6 URL=${URL}v$i=$i
7 done
8 curl $URL
9 [root@svr100 ~]# chmod +x buffer.sh
10 [root@svr100 ~]# ./ buffer.sh
11 .. ..
12 <center><h1>414 Request-URI Too Large</h1></center> //提示头部信息过大
3)使用Firefox浏览器测试客户端缓存
以Firefox浏览器为例,只要在地址栏内输入 http://192.168.4.5/a.jpg,回车后即连接目标主机192.168.4.5的Web服务,获得服务器上的a.jpg图片资源。若访 问成功,再次,在Firefox地址栏内输入about:cache将显示Firefox浏览器的缓存信息,如图-2所示。
图-2
4)客户端使用浏览器访问不存在的页面
1 [root@svr5 ~]# firefox http://192.168.4.5/tt.html //访问不存在的页面
步骤三:优化Nginx服务器
1)修改Nginx配置文件
1 [root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf
2 .. ..
3 worker_processes 2; //与CPU核心数量一致
4 events {
5 worker_connections 10000; //每个worker最大并发连接数
6 use epoll;
7 }
8 http {
9 client_header_buffer_size 1k; //默认请求包头信息的缓存
10 large_client_header_buffers 4 4k; //大请求包头部信息的缓存个数与容量
11
12 server {
13 listen 80;
14 server_name www.tarena.com;
15 location / {
16 root html;
17 index index.html index.htm;
18 }
19 location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
20 expires 30d; //定义客户端缓存时间为30天
21 }
22 error_page 404 /40x.html; //自定义错误页面
23 location = /40x.html {
24 root html;
25 }
26 }
27 }
2)修改Linux操作系统最大打开文件数
通过修改/etc/security/limits.conf文件修改打开文件最大数量:
1 [root@svr5 ~]# vim /etc/security/limits.conf
2 * soft nofile 100000
3 * hard nofile 100000
4 [root@svr5 ~]# ulimit –Hn 10000
5 [root@svr5 ~]# ulimit –Sn 10000
3)提前生成404错误页面,供测试使用:
1 [root@svr5 ~]# vim /usr/local/nginx/html/40x.html
2 <h1>~~~~^^^Error^^^~~~</h1>
步骤四:优化后从客户机访问Nginx服务器测试
对Nginx服务器进行各种参数优化后,在客户端访问服务器页面,对比优化前与优化后的区别,验证优化是否生效。
2 案例2:安装部署Tomcat服务器
2.1 问题
本案例要求部署Tomcat服务器,具体要求如下:
- 安装部署JDK基础环境
- 安装部署Tomcat服务器
- 创建JSP测试页面,文件名为test.jsp,显示服务器当前时间
然后客户机访问此Web服务器验证效果:
- 使用火狐浏览器访问Tomcat服务器的8080端口,浏览默认首页
- 使用火狐浏览器访问Tomcat服务器的8080端口,浏览默认测试页面
2.2 方案
使用2台RHEL7虚拟机,其中一台作为Tomcat服务器(192.168.2.5)、另外一台作为测试用的Linux客户机(192.168.2.100),如图-3所示。
图-3
使用RPM安装JDK基础环境
使用源码安装部署Tomcat服务器
调整Tomcat配置文件,禁用默认的8009端口
2.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:部署服务器软件
1)使用RPM安装JDK环境
1 [root@svr100 ~]# rpm -ivh jdk-8u77-linux-x64.rpm //安装JDK
2 [root@svr100 ~]# rpm -q jdk1.8.0_77-1.8.0_77-fcs.x86_64 //查看软件安装结果
3 [root@svr100 ~]# java –version //查看JAVA版本
2)安装Tomcat
1 [root@svr100 ~]# tar -xzf apache-tomcat-8.0.30.tar.gz
2 [root@svr100 ~]# mv apache-tomcat-8.0.30 /usr/local/tomcat
3 [root@svr100 ~]# ls /usr/local/tomcat
4 bin/ //主程序目录
5 lib/ //库文件目录
6 logs/ //日志目录
7 temp/ //临时目录
8 work/ //自动编译目录jsp代码转换servlet
9 conf/ //配置文件目录
10 webapps/ //页面目录
步骤二:修改Tomcat配置文件
1)创建测试JSP页面
1 [root@svr100 ~]# vim vim /usr/local/tomcat/webapps/ROOT/test.jsp
2 <html>
3 <body>
4 <center>
5 Now time is: <%=new java.util.Date()%> //显示服务器当前时间
6 </center>
7 </body>
8 </html>
步骤三:验证测试
1)服务器验证端口信息
1 [root@svr100 ~]# netstat -nutlp |grep java //查看java监听的端口
2 tcp 0 0 :::8080 :::* LISTEN 2778/java
3 tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 2778/java
2)客户端浏览测试页面
1 [root@client ~]# firefox http://127.0.0.1:8080
2 [root@client ~]# firefox http://172.0.0.1:8080/test.jsp
3 使用Tomcat部署虚拟主机
3.1 问题
沿用练习二,使用Tomcat部署加密虚拟主机,实现以下要求:
- 实现两个基于域名的虚拟主机,域名分别为:www.test.com和 www.tomcat.com
- 使用www.test.com域名访问的页面根路径为/usr/local/tomcat/test/ROOT
- 使用www.tomcat.com域名访问的页面根路径为/usr/local/tomcat/tom/ROOT
- 访问页面时支持SSL加密通讯
- 私钥、证书存储路径为/usr/local/tomcat/conf/cert
- 每个虚拟主机都拥有独立的访问日志文件
3.2 方案
修改server.xml配置文件,创建两个域名的虚拟主机,修改如下两个参数块:
1 <Host name=www.test.com appBase="test" unpackWARS="true" autoDeploy="true">
2 </Host>
3 <Host name="www.tomcat.com" appBase="tom" unpackWARS="true" autoDeploy="true">
4 </Host>
生产SSL密钥与证书文件
1 #keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/conf/cert
3.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:配置服务器设置
1)修改server.xml配置文件,创建虚拟主机
1 [root@svr100 ~]# vim /usr/local/tomcat/conf/server.xml
2 … …
3 <Host name="www.test.com" appBase="test" unpackWARS="true" autoDeploy="true">
4 </Host>
5 <Host name="www.tomcat.com" appBase="tom" unpackWARS="true" autoDeploy="true">
6 </Host>
2)创建虚拟主机对应的页面根路径
1 [root@svr100 ~]# mkdir -p /usr/local/tomcat/{test,tom}/ROOT
2 [root@svr100 ~]# echo “test.com” > /usr/local/tomcat/test/ROOT/index.html
3 [root@svr100 ~]# echo “tomcat.com” > /usr/local/tomcat/tom/ROOT/index.html
3)创建加密用的私钥和证书文件
1 [root@svr100 ~]# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/conf/cert //提示输入密码为:123456
4)再次修改server.xml配置文件,创建加密连接的Connector
1 [root@svr100 ~]# vim /usr/local/tomcat/conf/server.xml
2 … …
3 <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
4 maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
5 keystoreFile="/usr/local/tomcat/conf/keystore" keystorePass="123456" clientAuth="false" sslProtocol="TLS" />
5)为每个虚拟主机设置不同的日志文件
1 [root@svr100 ~]# vim /usr/local/tomcat/conf/server.xml
2 <Host name="www.test.com" appBase="test" unpackWARS="true" autoDeploy="true">
3 <Valve className="org.apache.catalina.valves.AccessLogValve"
4 prefix="test_access" suffix=".log"
5 pattern="common"/>
6 </Host>
7 <Host name="www.tomcat.com" appBase="tom" unpackWARS="true" autoDeploy="true">
8 <Valve className="org.apache.catalina.valves.AccessLogValve"
9 prefix="tomcat_access" suffix=".log"
10 pattern="common"/>
11 </Host>
6)重启Tomcat服务器
1 [root@svr100 ~]# /usr/local/tomcat/bin/catalina.sh stop
2 [root@svr100 ~]# /usr/local/tomcat/bin/catalina.sh start
步骤二:配置客户端设置
1)客户端设置host文件,并浏览测试页面进行测试
1 [root@client ~]# vim /etc/hosts
2 … …
3 192.168.4.5 www.test.com www.tomcat.com
4 [root@client ~]# firefox http://www.test.com:8080/
5 [root@client ~]# firefox http://www.tomcat.com:8080/
6 [root@client ~]# firefox https://www.test.com:8443/
7 [root@client ~]# firefox https://www.test.com:8443/
2)查看服务器日志文件
1 [root@svr100 ~]# tail /usr/local/tomcat/logs/test_access.log
2 [root@svr100 ~]# tail /usr/local/tomcat/logs/tomcat_access.log