一、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部署虚拟主机的更多相关文章

  1. 高级运维(六):源码安装Redis缓存服务、常用Redis数据库操作指令、配置Redis主从服务器

    一.源码安装Redis缓存服务 目标: 本案例要求先快速搭建好一台Redis服务器,并测试该缓存服务器: 1> 设置变量test,值为123 2> 查看变量test的值 3> 设置计 ...

  2. saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3

    saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3 安装nginx-1.10.3.tar.gz # mkdir -p /srv/salt/prod/pkg / ...

  3. 14-MySQL DBA笔记-运维技巧和常见问题处理

    第14章 运维技巧和常见问题处理 DBA的成长,离不开对各种问题的处理.本章将为读者介绍一些运维技巧和常见问题的处理方法.我们需要意识到,别人的经验代替不了自己的经验,所以,多实践.多处理问题,最终会 ...

  4. 运维自动化之ansible的安装与使用 转

    运维自动化之ansible的安装与使用 随着服务器数量的增长,我们需要一个批量工具去提高工作效率,之前用的是puppet,ansible的简单,适用让我眼前一亮,决定写一篇ansible从安装到基本配 ...

  5. saltstack自动化运维系列⑦SaltStack实践配置管理安装zabbix

    saltstack自动化运维系列⑥SaltStack实践配置管理安装zabbix 1.添加管理zabbix的sls文件# vim /srv/salt/base/init/zabbix_agent.sl ...

  6. 01 - nginx - 安装、配置文件、默认网站、虚拟主机

    一.运维: . 介绍服务器. 服务器逻辑: 服务器选择 操作系统 部署逻辑 业务环境部署逻辑 业务部署图 软件部署文档 日常维护文档 测试 开发上传代码到源码系统 上线 - 测服务器,内测 预发布测试 ...

  7. Apache+php+mysql的安装与配置 - 之三(Apache的虚拟主机配置)

    Apache+php+mysql的安装与配置 - 之三(Apache的虚拟主机配置) Apache核心(Core)配置 VirtualHost 语法 <VirtualHost addr[:por ...

  8. Nginx配置基于多域名、端口、IP的虚拟主机

    原文:https://www.cnblogs.com/ssgeek/p/9220922.html ------------------------------- Nginx配置基于多域名.端口.IP的 ...

  9. 高级运维(二):搭建Nginx服务器、用户认证、基于域名的虚拟主机、SSL虚拟主机、Nginx反向代理

    一.搭建Nginx服务器 目标: 在IP地址为192.168.4.5的主机上安装部署Nginx服务,并可以将Nginx服务器,要求编译时启用如下功能: 1> SSL加密功能 2> 设置Ng ...

随机推荐

  1. 如何在程序中执行动态生成的Delphi代码

    如何在程序中执行动态生成的Delphi代码 经常发现有人提这类问题,或者提问内容最后归结成这种问题 前些阵子有位高手写了一个“执行动态生成的代码”,这是真正的高手,我没那种功力,我只会投机取巧. 这里 ...

  2. oracle中解决中文乱码问题

    中文乱码问题解决 1.查看服务器端编码 select userenv('language') from dual; 查到结果是: USERENV('LANGUAGE') --------------- ...

  3. Linux内核学习--写一个c程序,并在内核中编译,运行

    20140506 今天开始学习伟大的开源代表作:Linux内核.之前的工作流于几个简单命令的应用,因着对Android操作系统的情愫,“忍不住”跟随陈利君老师的步伐,开启OS内核之旅.学习路径之一是直 ...

  4. python中匿名函数lambda如何用

    python中经常用到的一个函数:匿名函数lambda ,什么是匿名函数?匿名函数的意义是什么?匿名函数怎么样用?(疑问三连,what,why,how) 一,什么是匿名函数? python中没有名字的 ...

  5. 为什么要用getBaseContext()方法代替this?(转)

    问:this 常常引用当前的 context.但是有些时候,必须使用getBaseContext()来代替this.就是说使用this会引发错误. 如下面的例子: Spinner spinner = ...

  6. 前端工程师技能图谱skill-map

    # 前端工程师技能图谱 ## 浏览器 - IE6/7/8/9/10/11 (Trident) - Firefox (Gecko) - Chrome/Chromium (Blink) - Safari ...

  7. java入门经验分享——记面向对象先导课程学习感想

    选择在暑期学习面向对象先导课程的初衷是为大二下学期面向对象课程做一些铺垫,接触入门java语言.在接触java的过程中,就编程语言的学习方法而言,我从刚入学时的手慌脚乱四处寻求帮助到现在慢慢养成了自己 ...

  8. Codeforces Round #499 (Div. 2) Problem-A-Stages(水题纠错)

    CF链接  http://codeforces.com/contest/1011/problem/A Natasha is going to fly to Mars. She needs to bui ...

  9. upc组队赛5 Ingenious Lottery Tickets【排序】

    Ingenious Lottery Tickets 题目描述 Your friend Superstitious Stanley is always getting himself into trou ...

  10. JOGL教程

    本章介绍了OpenGL,Java OpenGL绑定(GL4java,LWJGL,JOGL)和JOGL比其他的OpenGL的优点. Java支持OpenGL(JOGL)是近期在Java OpenGL图形 ...