高级运维(四):Nginx常见问题处理、安装部署Tomcat服务器、使用Tomcat部署虚拟主机
一、Nginx常见问题处理
目标:
本案例要求对Nginx服务器进行适当优化,以提升服务器的处理性能:
1> 不显示Nginx软件版本号
2> 如果客户端访问服务器提示“Too many open files”如何解决
3> 如何解决客户端访问头部信息过长的问题
4> 开启gzip压缩功能,提高数据传输效率
5> 如何让客户端浏览器缓存数据
6> 如何自定义返回给客户端的404错误页面
然后客户机访问此Web服务器验证效果:
1> 使用ab压力测试软件测试并发量
2> 编写测试脚本生成长头部信息的访问请求
3> 客户端访问不存在的页面,测试404错误页面是否重定向
方案:
使用2台RHEL7虚拟机,其中一台作为Nginx服务器(192.168.4.5)、另外一台作为测试用的Linux客户机(192.168.4.100),如下图所示。
Nginx优化主要从配置文件着手,常见优化参数如下:
1> worker_processes //与CPU核心数量一致
2> worker_connections //每个worker最大并发连接数
3> server_tokens //服务器版本号信息
4> client_header_buffer_size //默认请求包头信息的缓存
5> large_client_header_buffers //大请求包头部信息的缓存个数与容量
6> error_page 404 //自定义404错误页面
步骤:
步骤一:构建Nginx服务器
1)源码安装Nginx软件
[root@svr5 ~]# yum -y install gcc pcre-devel openssl-devel //安装常见依赖包
[root@svr5 ~]# useradd -s /sbin/nologin nginx
[root@svr5 ~]# tar -zxvf nginx-1.8.0.tar.gz
[root@svr5 ~]# cd nginx-1.8.0
[root@svr5 nginx-1.8.0]# ./configure \
> --prefix=/usr/local/nginx \ //指定安装路径
> --user=nginx \ //指定用户
> --group=nginx \ //指定组
> --with-http_ssl_module //开启SSL加密功能
[root@svr5 nginx-1.8.0]# make && make install //编译并安装
2)启用Nginx服务并查看监听端口状态
[root@svr5 ~]# /usr/local/nginx/sbin/nginx
[root@svr5 ~]# netstat -anptu | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10441/nginx
步骤二:优化前从客户机访问Nginx服务器测试
1)使用ab高并发测试
[root@svr100 ~]# ab –n 2000 –c 2000 http://192.168.4.5/ //需要安装httpd-tools,里面有ApacheBench性能测试工具
Benchmarking 192.168.4.5 (be patient)
socket: Too many open files (24) //提示打开文件数量过多
2)使用脚本测试长头部请求是否能获得响应
[root@svr100 ~]# cat buffer.sh
#!/bin/bash
URL=http://192.168.4.5/index.html?
for i in {1..5000}
do
URL=${URL}v$i=$i //执行一次循环URL的尾部会增加一个v$i;一直增加5000次循环结束;最后结果是URL变得很长
done
curl $URL
[root@svr100 ~]# chmod +x buffer.sh
[root@svr100 ~]# ./ buffer.sh
.. ..
<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)客户端使用浏览器访问不存在的页面
[root@svr5 ~]# firefox http://192.168.4.5/tt.html //访问不存在的页面
步骤三:优化Nginx服务器
1)修改Nginx配置文件
[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
worker_processes 2; //与CPU核心数量一致
events {
worker_connections 65535; //每个worker最大并发连接数
use epoll;
}
http {
server_tokens off; //不显示nginx版本号信息
client_header_buffer_size 1k; //默认请求包头信息的缓存
large_client_header_buffers 4 4k; //大请求包头部信息的缓存个数与容量
gzip on;
gzip_min_length 1000;
gzip_comp_level 4; //压缩效果,level水平越高,压缩效果越好
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
server {
listen 80;
server_name www.tarena.c
location / {om;
root html;
index index.html index.htm;
}
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires 30d; //定义客户端缓存时间为30天
}
error_page 404 /40x.html; //自定义错误页面
location = /40x.html {
root html;
}
}
}
2)修改Linux操作系统最大打开文件数
通过修改/etc/security/limits.conf文件修改打开文件最大数量:
[root@svr5 ~]# vim /etc/security/limits.conf //永久修改打开文件最大数量,配置文件
* soft nofile 100000
* hard nofile 100000
[root@svr5 ~]# ulimit –Hn 100000 //临时修改打开文件最大数量,-H 硬限制(用户不可修改)
[root@svr5 ~]# ulimit –Sn 100000 //临时修改打开文件最大数量,-S 软限制(用户可以修改)
3)提前生成404错误页面,供测试使用:
[root@svr5 ~]# vim /usr/local/nginx/html/40x.html //编辑写好错误提示页面
<h1>~~~~^^^Error^^^~~~</h1>
步骤四:优化后从客户机访问Nginx服务器测试
对Nginx服务器进行各种参数优化后,在客户端访问服务器页面,对比优化前与优化后的区别,验证优化是否生效。
二、安装部署Tomcat服务器
目标:
本案例要求部署Tomcat服务器,具体要求如下:
1> 安装部署JDK基础环境
2> 部署Tomcat服务器安装
3> 创建JSP测试页面,文件名为test.jsp,显示服务器当前时间
然后客户机访问此Web服务器验证效果:
1> 使用火狐浏览器访问Tomcat服务器的8080端口,浏览默认首页
2> 使用火狐浏览器访问Tomcat服务器的8080端口,浏览默认测试页面
方案:
使用2台RHEL7虚拟机,其中一台作为Tomcat服务器(192.168.2.5)、另外一台作为测试用的Linux客户机(192.168.2.100),如下图所示。
1> 使用RPM安装JDK基础环境
2> 使用源码安装部署Tomcat服务器
3> 调整Tomcat配置文件,禁用默认的8009端口
步骤:
步骤一:部署服务器软件
1)使用RPM安装JDK环境
[root@svr5 ~]# yum –y install java-1.8.0-openjdk //安装JDK
[root@svr5 ~]# yum –y install java-1.8.0-openjdk-headless //安装JDK
[root@svr5 ~]# java –version //查看JAVA版本
2)安装Tomcat
[root@svr5 ~]# tar -xzf apache-tomcat-8.0.30.tar.gz
[root@svr5 ~]# mv apache-tomcat-8.0.30 /usr/local/tomcat
[root@svr5 ~]# ls /usr/local/tomcat
bin/ //主程序目录
lib/ //库文件目录
logs/ //日志目录
temp/ //临时目录
work/ //自动编译目录jsp代码转换servlet
conf/ //配置文件目录
webapps/ //页面目录
步骤二:修改Tomcat配置文件
1)创建测试JSP页面
[root@svr5 ~]# vim /usr/local/tomcat/webapps/ROOT/test.jsp
<html>
<body>
<center>
Now time is: <%=new java.util.Date()%> //显示服务器当前时间
</center>
</body>
</html>
2)启动服务
[root@svr5 ~]# /usr/local/tomcat/bin/startup.sh
步骤三:验证测试
1)服务器验证端口信息
[root@svr5 ~]# netstat -nutlp |grep java //查看java监听的端口
tcp 0 0 :::8080 :::* LISTEN 2778/java
tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 2778/java
2)客户端浏览测试页面
[root@client ~]# firefox http://127.0.0.1:8080
[root@client ~]# firefox http://127.0.0.1:8080/test.jsp
三、使用Tomcat部署虚拟主机
目标:
沿用练习二,使用Tomcat部署加密虚拟主机,实现以下要求:
1> 实现两个基于域名的虚拟主机,域名分别为:www.aa.com和 www.bb.com
2> 使用www.aa.com域名访问的页面根路径为/usr/local/tomcat/aa/ROOT
3> 使用www.bb.com域名访问的页面根路径为/usr/local/tomcat/bb/ROOT
4> 访问页面时支持SSL加密通讯
5> 私钥、证书存储路径为/usr/local/tomcat/conf/cert
6> 每个虚拟主机都拥有独立的访问日志文件
方案:
修改server.xml配置文件,创建两个域名的虚拟主机,修改如下两个参数块:
# cat /usr/local/tomcat/conf/server.xml
… …
<Host name=www.aa.com appBase="aa" unpackWARS="true" autoDeploy="true">
</Host>
<Host name="www.bb.com" appBase="bb" unpackWARS="true" autoDeploy="true">
</Host>
… …
提示:修改server.xml配置文件,通过在<Host>中添加Context,我们也可以指定页面的根路径位置,默认为ROOT
<Context path="/test" docBase="/var/www/html/" /> //访问域名或ip下面子目录/test时会自动跳转到/var/www/html/
生产SSL密钥与证书文件
#keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore
步骤:
步骤一:配置服务器虚拟主机
1)修改server.xml配置文件,创建虚拟主机
[root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml
… …
<Host name="www.aa.com" appBase="aa" unpackWARS="true" autoDeploy="true">
</Host>
<Host name="www.bb.com" appBase="bb" unpackWARS="true" autoDeploy="true">
</Host>
2)创建虚拟主机对应的页面根路径
[root@svr5 ~]# mkdir -p /usr/local/tomcat/{aa,bb}/ROOT
[root@svr5 ~]# echo "AAA" > /usr/local/tomcat/aa/ROOT/index.html
[root@svr5 ~]# echo "BBB" > /usr/local/tomcat/bb/ROOT/index.html
3)重启Tomcat服务器
[root@svr5 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@svr5 ~]# /usr/local/tomcat/bin/startup.sh
4)客户端设置host文件,并浏览测试页面进行测试
[root@client ~]# vim /etc/hosts
… …
192.168.4.5 www.aa.com www.bb.com
[root@client ~]# firefox http://www.aa.com:8080/
[root@client ~]# firefox http://www.bb.com:8080/
步骤二:修改网站的首页目录(非必须)
1)使用docBase参数可以修改默认网站首页路径
[root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml
… …
<Host name="www.aa.com" appBase="aa" unpackWARS="true" autoDeploy="true">
<Context path="" docBase="base" />
</Host>
<Host name="www.bb.com" appBase="bb" unpackWARS="true" autoDeploy="true">
</Host>
… …
[root@svr5 ~]# mkdir /usr/local/tomcat/aa/base
[root@svr5 ~]# echo "BASE" > /usr/local/tomcat/aa/base/index.html
[root@svr5 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@svr5 ~]# /usr/local/tomcat/bin/startup.sh
2)测试查看页面是否正确
[root@client ~]# firefox http://www.aa.com:8080/ //结果为base页面的内容
步骤三:跳转(非必须)
1)当用户访问http://www.aa.com/test打开/var/www/html目录下的页面
[root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml
… …
<Host name="www.aa.com" appBase="aa" unpackWARS="true" autoDeploy="true">
<Context path="/test" docBase="/var/www/html/" />
</Host>
<Host name="www.bb.com" appBase="bb" unpackWARS="true" autoDeploy="true">
</Host>
… …
[root@svr5 ~]# echo "Test" > /var/www/html/index.html
[root@svr5 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@svr5 ~]# /usr/local/tomcat/bin/startup.sh
2)测试查看页面是否正确
[root@client ~]# firefox http://www.aa.com:8080/test
//返回/var/www/html/index.html的内容
步骤四:配置Tomcat支持SSL加密网站
1)创建加密用的私钥和证书文件
[root@svr5 ~]# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore //提示输入密码为:123456
2)再次修改server.xml配置文件,创建支持加密连接的Connector
[root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml
… …
<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)重启Tomcat服务器
[root@svr5 ~]# /usr/local/tomcat/bin/catalina.sh stop
[root@svr5 ~]# /usr/local/tomcat/bin/catalina.sh start
4)客户端设置host文件,并浏览测试页面进行测试
[root@client ~]# vim /etc/hosts
… …
192.168.4.5 www.aa.com www.bb.com
[root@client ~]# firefox https://www.test.com:8443/
[root@client ~]# firefox https://www.test.com:8443/
步骤五:配置Tomcat日志
1)为每个虚拟主机设置不同的日志文件
[root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml
<Host name="www.aa.com" appBase="aa" unpackWARS="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
prefix="aa_access" suffix=".log"
pattern="common"/>
</Host>
<Host name="www.bb.com" appBase="bb" unpackWARS="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
prefix="bb_access" suffix=".log"
pattern="common"/>
</Host>
2)重启Tomcat服务器
[root@svr5 ~]# /usr/local/tomcat/bin/catalina.sh stop
[root@svr5 ~]# /usr/local/tomcat/bin/catalina.sh start
3)查看服务器日志文件
[root@svr5 ~]# ls /usr/local/tomcat/logs/
高级运维(四):Nginx常见问题处理、安装部署Tomcat服务器、使用Tomcat部署虚拟主机的更多相关文章
- 高级运维(六):源码安装Redis缓存服务、常用Redis数据库操作指令、配置Redis主从服务器
一.源码安装Redis缓存服务 目标: 本案例要求先快速搭建好一台Redis服务器,并测试该缓存服务器: 1> 设置变量test,值为123 2> 查看变量test的值 3> 设置计 ...
- saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3
saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3 安装nginx-1.10.3.tar.gz # mkdir -p /srv/salt/prod/pkg / ...
- 14-MySQL DBA笔记-运维技巧和常见问题处理
第14章 运维技巧和常见问题处理 DBA的成长,离不开对各种问题的处理.本章将为读者介绍一些运维技巧和常见问题的处理方法.我们需要意识到,别人的经验代替不了自己的经验,所以,多实践.多处理问题,最终会 ...
- 运维自动化之ansible的安装与使用 转
运维自动化之ansible的安装与使用 随着服务器数量的增长,我们需要一个批量工具去提高工作效率,之前用的是puppet,ansible的简单,适用让我眼前一亮,决定写一篇ansible从安装到基本配 ...
- saltstack自动化运维系列⑦SaltStack实践配置管理安装zabbix
saltstack自动化运维系列⑥SaltStack实践配置管理安装zabbix 1.添加管理zabbix的sls文件# vim /srv/salt/base/init/zabbix_agent.sl ...
- 01 - nginx - 安装、配置文件、默认网站、虚拟主机
一.运维: . 介绍服务器. 服务器逻辑: 服务器选择 操作系统 部署逻辑 业务环境部署逻辑 业务部署图 软件部署文档 日常维护文档 测试 开发上传代码到源码系统 上线 - 测服务器,内测 预发布测试 ...
- Apache+php+mysql的安装与配置 - 之三(Apache的虚拟主机配置)
Apache+php+mysql的安装与配置 - 之三(Apache的虚拟主机配置) Apache核心(Core)配置 VirtualHost 语法 <VirtualHost addr[:por ...
- Nginx配置基于多域名、端口、IP的虚拟主机
原文:https://www.cnblogs.com/ssgeek/p/9220922.html ------------------------------- Nginx配置基于多域名.端口.IP的 ...
- 高级运维(二):搭建Nginx服务器、用户认证、基于域名的虚拟主机、SSL虚拟主机、Nginx反向代理
一.搭建Nginx服务器 目标: 在IP地址为192.168.4.5的主机上安装部署Nginx服务,并可以将Nginx服务器,要求编译时启用如下功能: 1> SSL加密功能 2> 设置Ng ...
随机推荐
- zabbix 如何监控php-fpm?
zabbix监控php-fpm主要是通过nginx配置php-fpm的状态输出页面,在正则取值.要nginx能输出php-fpm的状态首先要先修改php-fpm的配置,没有开启nginx是没有法输出p ...
- (转)Android OpenGL ES(一)
转:http://wiki.jikexueyuan.com/project/opengl-es-guide/pipeline.html OpenGL ES 主要用来开发 3D 图形应用的.OpenGL ...
- 2的N次方求解-----C++
2的N次方求解,一般情况如果不超出C/C++基本数据类型的表达范围,这个问题及其容易,但是如果N的值十分的大,以致于超出基本数据类型表达范围 下面的程序正是解决2的N次方这个大数精确求解的源码 #in ...
- Android 测试点归纳总结
前言 除了测试平台工具,业务测试的总结和思考同样重要,这里总结了一些Android测试知识点,可以辅助业务测试快速形成测试用例和检查点,当作抛砖引玉分享给大家.如有思考不全面的地方,欢迎大家指出来. ...
- Redis Cluster 设置密码
两种方式 1.修改配置文件 在每个节点的配置文件里面增加密码选项,一定要加上 masterauth,不然 Redirected 的时候会失败. masterauth redispassword req ...
- MySQL高级学习笔记(二):mysql配置文件、mysql的用户与权限管理、mysql的一些杂项配置
文章目录 mysql配置文件 二进制日志log-bin 错误日志log-error 数据文件 两系统 Myisam存放方式 innodb存放方式 如何配置 mysql的用户与权限管理 MySQL的用户 ...
- PAT_A1097#Deduplication on a Linked List
Source: PAT A1097 Deduplication on a Linked List (25 分) Description: Given a singly linked list L wi ...
- jsonp协议 java服务端、JQuery客户端 简单实现原理
原文链接:https://blog.csdn.net/Activity_Time/article/details/96440806 1. 概述 Jsonp(JSON with Padding) 是 j ...
- 【LCT维护子树信息】uoj207 共价大爷游长沙
这道题思路方面就不多讲了,主要是通过这题学一下lct维护子树信息. lct某节点u的子树信息由其重链的一棵splay上信息和若干轻儿子子树信息合并而成. splay是有子树结构的,可以在rotate, ...
- java 重新学习 (五)
Set 集合 一.HashSet按照Hash算法存储集合元素(hashCode方法获取hashCode值,根据hashCode值获取元素位置,通过equals判断对象是否相等并且hashCode值是否 ...