1 案例1:Nginx常见问题处理
1.1 问题
本案例要求对Nginx服务器进行适当优化,以提升服务器的处理性能:
不显示Nginx软件版本号
如果客户端访问服务器提示“Too many open files”如何解决
如何解决客户端访问头部信息过长的问题
开启gzip压缩功能,提高数据传输效率
如何让客户端浏览器缓存数据
如何自定义返回给客户端的404错误页面
然后客户机访问此Web服务器验证效果:
使用ab压力测试软件测试并发量
编写测试脚本生成长头部信息的访问请求
客户端访问不存在的页面,测试404错误页面是否重定向
1.2 方案

Nginx优化主要从配置文件着手,常见优化参数如下:
worker_processes //与CPU核心数量一致
worker_connections //每个worker最大并发连接数
server_tokens //服务器版本号信息
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浏览器的缓存信息
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核心数量一致(cat /proc/cpuinfo | grep proce)
4.events {
worker_connections 65535;        //每个worker最大并发连接数
下载httpd-tools测试:
ab -c 100 -n 100 http://192.168.4.1/ 模拟多人同时访问测试。
ab -c 1025 -n 1025 http://192.168.4.1/ 默认值1024,大于会报错,服务器无法承受
Linux内核,对能并发打开的文件数量有限制1024
ulimit -a 看所有文件最多能打开多少 内核参数
ulimit -Hn 100000 硬限制hard (不可改,但超级管理员可以改)
ulimit -Sn 100000 软限制 soft (给定范围,可以改)
修改内核参数后再测试并发量
5.use epoll;
6.}
7.http {
8.server_tokens off;                    //不显示nginx版本号信息(屏蔽版本号)客户端查看curl -I http://192.168.4.1 (大i)
9.client_header_buffer_size 1k;        //默认请求包头信息的缓存    
10.large_client_header_buffers 4 4k;        //大请求包头部信息的缓存个数与容量
11.gzip on; gzip压缩页面,对手机来说太费流量
12.gzip_min_length 1000; (小文件不压缩,至少达到1000k才可压缩。小文件越压越大)
13.gzip_comp_level 4;(压缩比例1-9,比例越小越慢)
14.gzip_types text/plain text/css (对什么格式的文件压缩。mp3,jpg,mp4,flv已经是压缩格式,对多媒体都不要压缩,只对文档文件压缩即可。对什么格式文档压缩,请参考mime.types找到对应参考,复制到此配置文件)application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
15.
16.server {

  1. listen 80;
  2. server_name www.tarena.com;
  3. location / {
  4. root html;
  5. index index.html index.htm;
  6. }
    23.location ~ .(jpg|jpeg|gif|png|css|js|ico|xml)$ { 不区分大小写
    24.expires        30d;            //定义客户端缓存时间为30天,30天后过期
    25.} (让用户的浏览器缓存,仅对静态数据缓存)
    26.error_page 404 /40x.html;    //自定义错误页面报错
  7. location = /40x.html {
  8. root html;
  9. }
    30.}
    31.}
    2)修改Linux操作系统最大打开文件数
    通过修改/etc/security/limits.conf文件修改打开文件最大数量:
    1.[root@svr5 ~]# vim /etc/security/limits.conf (若永久生效配置可修改)
    用户和组 类型 限制内容 限制数值
    • soft nofile 100000
      2.* hard nofile 100000
      3.[root@svr5 ~]# ulimit –Hn 100000
      4.[root@svr5 ~]# ulimit –Sn 100000
      3)提前生成404错误页面,供测试使用:
      1.[root@svr5 ~]# vim /usr/local/nginx/html/40x.html
  10. <h1>~~^^^Error^^^~</h1>

cp nginx.service /etc/
/usr/local/nginx/sbin/nginx -t 检查语法错误

缓存:

关闭20秒内无人请求的缓存
不管缓存有没有人请求,60秒后直接过期删掉
只有访问超过5次的才被缓存到内存
把缓存报错关闭

forefox 地址栏:about:cache
清除缓存
配置nginx.conf 设置location缓存30天
打开firefox访问服务器
在about:cache中刷新,点击List Cache Entries

盗链:<hr />
<img src=”http://...” /> 加上网上的图片地址
</body>
</html>

url: 协议+主机+端口号+路径
http://www.tedu.cn:80/abc/
http://192.168.4.5:8080/test.jsp

HTTP错误代码
报错页面nginx默认出错会返回出错码
200 一切正常
300 请求被重定向,页面还是会显示
400 请求语法错误
401 访问被拒绝(账户或密码错误)
403 资源不可用,通常由于服务器上文件或目录的权限设置导致
禁止访问:客户端的IP地址被拒绝
404 无法找到指定位置的资源(Not Found)可以自定义报错页面,返回特定页面
414 请求URI头部太长
500 服务器内部错误
502 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答(Bad Gateway)

案例2:安装部署Tomcat服务器(java型软件)

官方:jdk (java套件)
第三方:openjdk
jre (java运行环境)
shell--python--php--java--c--汇编 难度递增
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)
使用RPM安装JDK基础环境
使用源码安装部署Tomcat服务器
调整Tomcat配置文件,禁用默认的8009端口
2.3 步骤
步骤一:部署服务器软件
1)使用RPM安装JDK环境
1.[root@svr5 ~]# yum –y install java-1.8.0-openjdk                //安装JDK
2.[root@svr5 ~]# yum –y install java-1.8.0-openjdk-headless        //安装JDK
3.[root@svr5 ~]# java –version                                    //查看JAVA版本
2)安装Tomcat
1.[root@svr5 ~]# tar -xzf apache-tomcat-8.0.30.tar.gz
2.[root@svr5 ~]# mv apache-tomcat-8.0.30 /usr/local/tomcat
3.[root@svr5 ~]# 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@svr5 ~]# 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>
2)启动服务
1.[root@svr5 ~]# /usr/local/tomcat/bin/startup.sh
步骤三:验证测试
1)服务器验证端口信息
1.[root@svr5 ~]# 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://127.0.0.1:8080/test.jsp
3 使用Tomcat部署虚拟主机
3.1 问题
沿用练习二,使用Tomcat部署加密虚拟主机,实现以下要求:
实现两个基于域名的虚拟主机,域名分别为:www.aa.com和 www.bb.com
使用www.aa.com域名访问的页面根路径为/usr/local/tomcat/aa/ROOT
使用www.bb.com域名访问的页面根路径为/usr/local/tomcat/bb/ROOT
访问页面时支持SSL加密通讯
私钥、证书存储路径为/usr/local/tomcat/conf/cert
每个虚拟主机都拥有独立的访问日志文件
server.xml 主配置文件
context.xml
tomcat-users.xml
3.2 方案
修改server.xml配置文件,创建两个域名的虚拟主机,修改如下两个参数块:
1.# cat /usr/local/tomcat/conf/server.xml
2.… …
3.<Host name=www.aa.com appBase="aa" unpackWARS="true" autoDeploy="true">
4.</Host>
5.<Host name="www.bb.com" appBase="bb" unpackWARS="true" autoDeploy="true">
6.</Host>
7.… …
提示:修改server.xml配置文件,通过在<Host>中添加Context,我们也可以指定页面的根路径位置,默认为ROOT
1.<Context path="/test" docBase="/var/www/html/" />
生产SSL密钥与证书文件
1.#keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore
3.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:配置服务器虚拟主机
1)修改server.xml配置文件,创建虚拟主机 (所有的网站必须放在engine里面,连接端口才能访问进来)
1.[root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml
2.… …
3.<Host name="www.aa.com" appBase="aa" unpackWARS="true" autoDeploy="true">
4.</Host>
5.<Host name="www.bb.com" appBase="bb" unpackWARS="true" autoDeploy="true">
6.</Host>
2)创建虚拟主机对应的页面根路径
1.[root@svr5 ~]# mkdir -p /usr/local/tomcat/{aa,bb}/ROOT
2.[root@svr5 ~]# echo "AAA" > /usr/local/tomcat/aa/ROOT/index.html
3.[root@svr5 ~]# echo "BBB" > /usr/local/tomcat/bb/ROOT/index.html
3)重启Tomcat服务器
1.[root@svr5 ~]# /usr/local/tomcat/bin/shutdown.sh
2.[root@svr5 ~]# /usr/local/tomcat/bin/startup.sh
4)客户端设置host文件,并浏览测试页面进行测试
1.[root@client ~]# vim /etc/hosts
2.… …
3.192.168.4.5    www.aa.com www.bb.com
4.[root@client ~]# firefox http://www.aa.com:8080/
5.[root@client ~]# firefox http://www.bb.com:8080/
启动失败:
cd /dev
mv random random.bak
ln -s /dev/urandom /dev/random
tomcat用random随机生成密钥,random和urandom都是提取随机数据
步骤二:修改网站的首页目录(非必须)
1)使用docBase参数可以修改默认网站首页路径
1.[root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml
2.… …
3.
4.<Host name="www.aa.com" appBase="aa" unpackWARS="true" autoDeploy="true">
5.<Context path="" docBase="base" /> (或者<Context path="" docBase="base" reloadable="true"/> ) 指定页面根路径 (可重新加载)
6.</Host>
7.
8.<Host name="www.bb.com" appBase="bb" unpackWARS="true" autoDeploy="true">
9.</Host>
10.… …
11.[root@svr5 ~]# mkdir /usr/local/tomcat/aa/base
12.[root@svr5 ~]# echo "BASE" > /usr/local/tomcat/aa/base/index.html
13.[root@svr5 ~]# /usr/local/tomcat/bin/shutdown.sh
14.[root@svr5 ~]# /usr/local/tomcat/bin/startup.sh
2)测试查看页面是否正确
1.[root@client ~]# firefox http://www.aa.com:8080/    //结果为base页面的内容
步骤三:跳转 类似nginx的rewrite
1)当用户访问http://www.aa.com/test打开/var/www/html目录下的页面
1.[root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml
2.… …
3.
4.<Host name="www.aa.com" appBase="aa" unpackWARS="true" autoDeploy="true">
5.<Context path="/test" docBase="/var/www/html/" />
6.</Host>
7.
8.<Host name="www.bb.com" appBase="bb" unpackWARS="true" autoDeploy="true">
9.</Host>
10.… …
11.[root@svr5 ~]# echo "Test" > /var/www/html/index.html
12.[root@svr5 ~]# /usr/local/tomcat/bin/shutdown.sh
13.[root@svr5 ~]# /usr/local/tomcat/bin/startup.sh
2)测试查看页面是否正确
查询哪里就会匹配哪里,不加/test会出现www.a.com的AA界面
1.[root@client ~]# firefox http://www.aa.com:8080/test    
2.//返回/var/www/html/index.html的内容
步骤四:配置Tomcat支持SSL加密网站
证书:密钥、证书所有者、担保者信息
1.生成密钥(jdk)
[root@proxy ~]# keytool -genkeypair \

-alias tomcat \
-keyalg RSA \
-keystore /usr/local/tomcat/keystore
(keytool -genkeypair \ 生成密钥对
alias tomcat \ 给密钥取别名
keyalg RSA \ 密钥算法RSA,DSA
keystore密钥存放的文件名 /usr/local/tomcat/keystore 提示输入密码和信息)
1)创建加密用的私钥和证书文件 生成密钥
1.[root@svr5 ~]# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore                //提示输入密码为:123456
2)再次修改server.xml配置文件,创建支持加密连接的Connector 调用密钥
1.[root@svr5 ~]# 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/keystore" keystorePass="123456" 添加此句到max行后
6.clientAuth="false" sslProtocol="TLS" />
3)重启Tomcat服务器
1.[root@svr5 ~]# /usr/local/tomcat/bin/catalina.sh stop
2.[root@svr5 ~]# /usr/local/tomcat/bin/catalina.sh start
4)客户端设置host文件,并浏览测试页面进行测试
1.[root@client ~]# vim /etc/hosts
2.… …
3.192.168.4.5    www.aa.com www.bb.com
4.[root@client ~]# firefox https://www.test.com:8443/ 测试记得改端口号为8443,https
5.[root@client ~]# firefox https://www.test.com:8443/

在Engine外面写加密,所以加密只要加一次,所有网站就都加密了
步骤四:配置Tomcat日志
1)为每个虚拟主机设置不同的日志文件
1.[root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml
2.<Host name="www.aa.com" appBase="aa" unpackWARS="true" autoDeploy="true">

  1. <Valve className="org.apache.catalina.valves.AccessLogValve"
  2. prefix="aa_access" suffix=".log"
  3. pattern="common"/>
    6.</Host>
    7.<Host name="www.bb.com" appBase="bb" unpackWARS="true" autoDeploy="true">
    8.<Valve className="org.apache.catalina.valves.AccessLogValve"
  4. prefix="bb_access" suffix=".log"
  5. pattern="common"/>
    11.</Host>
    2)重启Tomcat服务器
    1.[root@svr5 ~]# /usr/local/tomcat/bin/catalina.sh stop
    2.[root@svr5 ~]# /usr/local/tomcat/bin/catalina.sh start
    3)查看服务器日志文件
    1.[root@svr5 ~]# ls /usr/local/tomcat/logs/

Tomcat: 一个host是一个网站
Nginx: 一个server是一个网站
httpd:一个Virtualhost是一个网站

和apache和nginx不同,tomcat的端口号和网站是不绑定到一起的,所有网站都被放在Engine 里面,connector把请求转发给Engine

优化并发量:
connector 影响并发量
<Connector port="8080" protocol="HTTP/1.1"
maxThreads=”1000” (客户请求最大线程数)
minSpareThreads=”100”
maxSpareThreads=”1000”
acceptCount=”1000” (监听端口队列最大数 排队的客户端数)
connectionTimeout="20000"
redirectPort="8443" />