运维之高级服务篇------ 4.Nginx常见问题处理、安装部署Tomcat服务器 、使用Tomcat部署虚拟主机

来源:互联网 发布:头部按摩器 知乎 编辑:程序博客网 时间:2024/05/16 14:59

FOUR DAY

案例1Nginx常见问题处理 

案例2:安装部署Tomcat服务器 

使用Tomcat部署虚拟主机 

Nginx常见问题处理:

要求对Nginx服务器进行适当优化,以提升服务器的处理性能

1不显示Nginx软件版本号 

2如果客户端访问服务器提示“Too many open files”如何解决 

3如何解决客户端访问头部信息过长的问题 

4开启gzip压缩功能,提高数据传输效率 

5如何让客户端浏览器缓存数据 

6如何自定义返回给客户端的404错误页面

然客户机访问此Web服务器验证效果:

使用ab压力测试软件测试并发量 

编写测试脚本生成长头部信息的访问请求 

客户端访问不存在的页面,测试404错误页面是否重定向

Nginx优化主要从配置文件着手,常见优化参数如下:

 

一.构建Nginx服务器

yum -y install gcc pcre-devel openssl-devel        //安装常见依赖包

useradd -s /sbin/nologin nginx

tar  -zxvf   nginx-1.8.0.tar.g

cd  nginx-1.8.0

./configure > --prefix=/usr/local/nginx > --user=nginx > --group=nginx > --with-http_ssl_module                        //开启SSL加密功能

make && make install    //编译并安装

/usr/local/nginx/sbin/nginx

netstat  -anptu  |  grep nginx

二.优化前从客户机访问Nginx服务器测试

常用压力测试工具:

Ab -c并发数 -n总请求数 URL

http_load -p 并发数 -s 测试时间 URL

webbench -c 并发数 -t 测试时间 URL

Siege -c 并发数 -r 重复次数 URL

 

常见错误代码列表:

  

1.使用ab高并发测试

ab –n 2000 –c 2000 http://192.168.4.5/

Benchmarking 192.168.4.5 (be patient)

socket: Too many open files (24)                //提示打开文件数量过多

2.使用脚本测试长头部请求是否能获得响应

vim buffer.sh 

#!/bin/bash

URL=http://192.168.4.5/index.html?

for i in {1..5000}

do

     URL=${URL}v$i=$i

done

curl $URL

 chmod +x buffer.sh

./ buffer.sh

<center><h1>414 Request-URI Too Large</h1></center>        //提示头部信息过大

3.使用Firefox浏览器测试客户端缓存

注意:清除缓存

Firefox http;//192.168.4.5/1.png

浏览器:about:cache                   #查看最近与最后日期

三.优化Nginx服务器    #重点记忆

·   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;

·  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.com;

·          location / {

·              root   html;

·              index  index.html index.htm;

·          }

·  location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {

·  expires        30d;            //定义客户端缓存时间为30

·  }

Location ~* \.(gif|jpg|png|swf|flv)${                       #配置防盗链语句referer,属于header头部信息

Valid_referers none blocked www.tarena.com;     #none表示没有referer即直接访问;blockedreferer;被防火请或代理删除

If($invalid_referer){

Rewrite ^/ http://www.tarena.com/403.html;

}

}

·  error_page   404  /40x.html;    //自定义错误页面

·          location = /40x.html {

·              root   html;

·          }

Error_page 500 502 503 504 /50x.hrml;自定义错误页面(内部)

Location=/50x.html{

Root html;}

·  }

·  }

 vim /etc/security/limits.conf

 *               soft nofile     100000

 *               hard nofile     100000

ulimit –Hn 100000

ulimit –Sn 100000

ulimit -a

 

 

二.Tomcat

1.Java具有跨平台的,面向对象的程序设计语言,java技术具有卓越的通用性,高效性,平台移植性和安全性

2.JDK(java Ddevelopment kit)是Sun针对java开发者推出的java语言的软件开发工具包

JDK已经最广泛的java SDK

JDK是java的 核心

--包括java运行环境

--java工具

Java基础的类库

3.JRE(java Runtime Environment,java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及JAVA核心类库

JRE包括:

--java虚拟机(jvm)

--java核心类库与支持文件

--不包括开发工具(JDK)---编译器,调试器

JRE是JDK的子集

4.Java Servlet是一种扩展Web服务器功能的组件规范;它能够以一种可移植方法来提供动态的,面向用户的内容,处理用户请求.

常见的Servlet容器

-IBM  websphere

-Oracle  weblogic

-Apache  tomcat

-Redhat  jboss

开发者一般主要开发的是Servlet容器中的servlet代码. 

TomcatContainer容器的设计是典型的责任链 设计模式,其有四个子容器:EngineHostContextWrapper。这四个容器之间是父子关系,Engine容器包含 HostHost包含ContextContext包含Wrapper

5.JSP(JAVA Server Page)

Sun推出的类似于ASP的镶嵌型的JSP,把JSP TAG镶嵌到HTML语句中,大大简化和方便了网页的设计和修改

 

6.Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.

诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为9.0。

TomcatServlet容器,同时也是轻量级的Web服务器。这是它的两个身份!

Apache ServerMicrosoft IISApache Tomcat都是Web服务器。

Tomcat作为Web服务器时,主要负责实现HTTP传输等工作。

Tomcat作为Servlet容器时,主要负责解析Request,生成ServletRequestServletResponse,将其传给相应的Servlet(调用service( )方法),再将Servlet的相应结果返回。

 

使用Tomcat部署加密虚拟主机:

创建测试JSP页面

实现两个基于域名的虚拟主机,域名分别为: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 

每个虚拟主机都拥有独立的访问日志文件 

 

.部署tomcat服务器软件

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/                                        //页面目录

[root@svr5 ~]# vim  /usr/local/tomcat/webapps/ROOT/test.jsp

<html>

<body>

<center>

<!-- /显示服务器当前时间  -->

Now time is: <%=new java.util.Date()%>            

</center>

</body>

</html>

Tomcat重要配置文件:

Server.xml-------主配置文件

Context.xml------定义会话管理器,JDBC

Tomcat-users.xml--------用户认证的帐号和密码配置文件

 

[root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml

<?xml version='1.0' encoding='utf-8'?>

<!-- Note:  A "Server" is not itself a "Container", so you may not

     define subcomponents such as "Valves" at this level.

     Documentation at /docs/config/server.html

 -->

<Server port="8005" shutdown="SHUTDOWN">

  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />

<Server port="8005" shutdown="SHUTDOWN" debug="0">

1.className指定实现org.apache.catalina.Server接口的类.默认值为org.apache.catalina.core.StandardServer

2.port指定Tomcat监听shutdown命令端口.终止服务器运行时,必须在Tomcat服务器所在的机器上发出shutdown命令.该属性是必须的.

3.shutdown指定终止Tomcat服务器运行时,发给Tomcat服务器的shutdown监听端口的字符串.该属性必须设置 

  <!-- Security listener. Documentation at /docs/config/listeners.html

  <Listener className="org.apache.catalina.security.SecurityListener" />

  -->

  <!--APR library loader. Documentation at /docs/apr.html -->

  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

  <!-- Prevent memory leaks due to use of particular java/javax APIs-->

  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

 

  <!-- Global JNDI resources

       Documentation at /docs/jndi-resources-howto.html

  -->

  <GlobalNamingResources>

    <!-- Editable user database that can also be used by

         UserDatabaseRealm to authenticate users

    -->

    <Resource name="UserDatabase" auth="Container"

              type="org.apache.catalina.UserDatabase"

              description="User database that can be updated and saved"

              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

              pathname="conf/tomcat-users.xml" />

  </GlobalNamingResources>

 

  <!-- A "Service" is a collection of one or more "Connectors" that share

       a single "Container" Note:  A "Service" is not itself a "Container",

       so you may not define subcomponents such as "Valves" at this level.

       Documentation at /docs/config/service.html

   -->

  <Service name="Catalina">

<!-- 一个“Service”是一个或多个共用一个单独“Container”(容器)的“Connectors”

组合(因此,应用程序在容器中可见)。通常,这个容器是一个“Engine”

(引擎),但这不是必须的。-->

注意:一个“Service”自身不是一个容器,因此,在这个级别上你不可定义

诸如“Valves”或“Loggers”子组件。

Tomcat的Standalone Service

Service是一组Connector的集合

它们共用一个Engine来处理所有Connector收到的请求

**<Service name="Catalina"\>**

**<Service name="Apache"\>**

第一个<Service>处理所有直接由Tomcat服务器接收的web客户请求.

第二个<Service>处理所有由Apahce服务器转发过来的Web客户请求 .

1>className 指定实现org.apahce.catalina.Service接口的类.默认为org.apahce.catalina.core.StandardService

2>name定义Service的名字

    <!--The connectors can use a shared executor, you can define one or more named thread pools-->

    <!--

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"

        maxThreads="150" minSpareThreads="4"/>

    -->

 

 

    <!-- A "Connector" represents an endpoint by which requests are received

         and responses are returned. Documentation at :

         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)

         Java AJP  Connector: /docs/config/ajp.html

         APR (HTTP/AJP) Connector: /docs/apr.html

         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080

    -->

    <Connector port="8080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443" 

maxThreads="1000"

       minSpareThreads="100"

      maxSparethreads="1000"

   enablelookups="fasle"

   URIEcoding="utf-8"

   acceptCount="1000"

/>

<!-- 一个“Connector”(连接器)(10以上)代表一个请求被接收和应答所需要的端点。每个连

接器通过相关的“Container”(容器)处理请求。-->

<!-- 默认情况下,一个非SSL的HTTP/1.1的连接器被绑定在端口8080。你也可以通过

根据后面的使用说明并取消第二个连接器入口的注释,在端口8443上建立一个

SSL HTTP/1.1的连接器。开放SSL支持需要下面几步(

    * 如果你的JDK是1.3或1.3以前的版本,下载安装JSSE 1.0.2或以后版本,并放

置JAR文件到“$JAVA_HOME/jre/lib/ext”目录下。

    * 带一个“changeit”的口令值执行:

%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA (Windows)

$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA (UNIX)

来生成它自己的证书私钥。

 

默认情况下,当一个web应用程序调用请求时,DNS查询是可行的。这将对性能造

成一些不利的影响,因此,你可以将“enableLookups”设置为“false”来关闭DNS

查询。当DNS查询被关闭时,request.getRemoteHost()将返回包含远程客户IP地

址的字符串。-->

Coyote HTTP/1.1 Connector

className : 该Connector的实现类是org.apache.coyote.tomcat4.CoyoteConnector

port : 在端口号8080处侦听来自客户browserHTTP1.1请求.如果把8080改成80,则只要输入http://localhost/即可

protocol:设定Http协议,默认值为HTTP/1.1

minSpareThreads: 该Connector先创建5个线程等待客户请求,每个请求由一个线程负责maxSpareThread:设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200

acceptCount : 当现有线程已经达到最大数75时,为客户请求排队.当队列中请求数超过100时,后来的请求返回Connection refused错误redirectport : 当客户请求是https时,把该请求转发到端口8443  

 enableLookups:如果设为true,表示支持域名解析,可以把IP地址解析为主机名.WEB应用中调用request.

getRemoteHost方法返回客户机主机名.默认值为true  

connectionTimeout:定义建立客户连接超时的时间.如果为-1,表示不限制建立客户连接的时间

allowTrace:是否允许HTTPTRACE方法,默认为false

emptySessionPath:如果设置为true,用户的所有路径都将设置为/,默认为false

maxPostSize:指定POST方式请求的最大量,没有指定默认为2097152

protocol:值必须为HTTP1.1,如果使用AJP处理器,该值必须为AJP/1.3

proxyName:如这个连接器正在一个代理配置中被使用,指定这个属性,在request.getServerName()时返回

redirectPort:如连接器不支持SSL请求,如收到SSL请求,Catalina容器将会自动重定向指定的端口号,让其进行处理。

scheme:设置协议的名字,在request.getScheme()时返回,SSL连接器设为”https”,默认为”http”

secure:在SSL连接器可将其设置为true,默认为false

URIEncoding:用于解码URL的字符编码,没有指定默认值为ISO-8859-1

useBodyEncodingForURI:主要用于Tomcat4.1.x中,指示是否使用在contentType中指定的编码来取代URIEncoding,用于解码URI查询参数,默认为false

xpoweredBy:为true时,Tomcat使用规范建议的报头表明支持Servlet的规范版本,默认为false

acceptCount:当所有的可能处理的线程都正在使用时,在队列中排队请求的最大数目。当队列已满,任何接收到的请求都会被拒绝,默认值为10

bufferSize:设由连接器创建输入流缓冲区的大小,以字节为单位。默认情况下,缓存区大的大小为2048字节

compressableMimeTypeMIME的列表,默认以逗号分隔。默认值是text/html,text/xmltext/plain

compression:指定是否对响应的数据进行压缩。off:表示禁止压缩、on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off

connectionTimeout:设置连接的超时值,以毫秒为单位。默认值为60000=60

disableUploadTimeOut:允许Servlet容器,正在执行使用一个较长的连接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false

maxHttpHeaderSizeHTTP请求和响应头的最大量,以字节为单位,默认值为4096字节

maxKeepAliveRequest:服务器关闭之前,客户端发送的流水线最大数目。默认值为100

maxSpareThreads:允许存在空闲线程的最大数目默认值为50

minSpareThreads:设当连接器第一次启协创建线程的数目,确保至少有这么多的空闲线程可用。默认值为4

port:服务端套接字监听的TCP端口号,默认值为8080(必须)

socketBuffer:设Socket输出缓冲区的大小(以字节为单位),-1表示禁止缓冲,默认值为9000字节

toNoDelay:为true时,可以提高性能。默认值为true

threadPriority:设JVM中请求处理线程优先级。默认值为NORMAL-PRIORITY

 

    <!-- A "Connector" using the shared thread pool-->

    <!--

    <Connector executor="tomcatThreadPool"

               port="8080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443" />

    -->

    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443

         This connector uses the NIO implementation that requires the JSSE

         style configuration. When using the APR/native implementation, the

         OpenSSL style configuration is required as described in the APR/native

         documentation -->

    

    <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" />

    

    <!-- Define an AJP 1.3 Connector on port 8009 -->

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

第一个Connector元素定义了一个HTTP Connector,它通过8080端口接收HTTP请求;第二个Connector元素定义了一个JD Connector,它通过8009端口接收由其它服务器转发过来的请.

 

    <!-- An Engine represents the entry point (within Catalina) that processes

         every request.  The Engine implementation for Tomcat stand alone

         analyzes the HTTP headers included with the request, and passes them

         on to the appropriate Host (virtual host).

         Documentation at /docs/config/engine.html -->

 

    <!-- You should set jvmRoute to support load-balancing via AJP ie :

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">

    -->

    <Engine name="Catalina" defaultHost="localhost">

<!-- 一个“Engine”(引擎)代表处理每个请求的入口点(在Catalina内)。这个Tomcat

         的标准独立引擎实现分析包含在请求中的HTTP头信息,并将请求传送到适当的主机

         或虚拟主机上。--><!-- Engine用来处理Connector收到的Http请求

         它将匹配请求和自己的虚拟主机,并把请求转交给对应的Host来处理

         默认虚拟主机是localhost。其有四个子容器:Engine、Host、Context和Wrapper。这四个容器之间是父子关系,Engine容器包含 Host,Host包含Context,Context包含Wrapper

         -->

<Engine name="Catalina" defaultHost="localhost" debug="0">[参数记3;元素记4]

1>className指定实现Engine接口的类,默认值为StandardEngine

2>defaultHost指定处理客户的默认主机名,在<Engine>中的<Host>子元素中必须定义这一主机

3>name定义Engine的名字

在<Engine>可以包含如下元素<Logger>, <Realm>, <Value>, <Host>

 

      <!--For clustering, please take a look at documentation at:

          /docs/cluster-howto.html  (simple how to)

          /docs/config/cluster.html (reference documentation) -->

      <!--

      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

      -->

 

      <!-- Use the LockOutRealm to prevent attempts to guess user passwords

           via a brute-force attack -->

      <Realm className="org.apache.catalina.realm.LockOutRealm">

        <!-- This Realm uses the UserDatabase configured in the global JNDI

             resources under the key "UserDatabase".  Any edits

             that are performed against this UserDatabase are immediately

             available for use by the Realm.  -->

        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"

               resourceName="UserDatabase"/>

      </Realm>

 

     <Host name="localhost"  appBase="webapps"

           unpackWARs="true" autoDeploy="true">  

</Host>

<Host name="www.aa.com" appBase="aa" unpackWARS="true" autoDeploy="true">

<Context path="" docBase="base" reloadable="true" />

<Context path="/test" docBase="/var/www/html/" />

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="aa_log" suffix=".txt"

               pattern="%h %l %u %t "%r" %s %b" />

</Host>

<Host name="www.bb.com" appBase="bb" unpackWAPS="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="bb_log" suffix=".txt"

               pattern="%h %l %u %t "%r" %s %b" />

</Host>

它由Host(5)接口定义.一个Engine元素可以包含多个元素.每个的元素定义了一个虚拟主机.它包含了一个或多个Web应用.

 <!-- 定义默认的虚拟主机

           注意:XML模式确认将不能与Xerces 2.2同工作。

      -->

<!-- 虚拟主机localhost

           appBase : 指 定虚拟主机的目录,可以指定绝对目录,也可以指定相对于<CATALINA_HOME>的相对目录.如果没有此项,默认 为<CATALINA_HOME>/webapps. 它将匹配请求和自己的Context的路径,并把请求转交给对应的Context来处 理

          autoDeploy:如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用

          unpackWARs:如果此项设置为true,表示把WEB应用的WAR文件先展开为开放目录结构后再运行.如果设为false将直接运行为WAR文件

          alias:指定主机别名,可以指定多个别名

          deployOnStartup:如果此项设为true,表示Tomcat服务器启动时会自动发布appBase目录下所有的Web应用.如果Web应用 中的server.xml没有相应的<Context>元素,将采用Tomcat默认的Context

           -->

<Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">

在<Host>元素中可以包含如下子元素<Logger>, <Realm>, <Value>, <Context>

<\Context>元素

它由Context接口定义.是使用最频繁的元素.每个<context元素代表了运行在虚拟主机上的单个web应用.一个可以包含多个元素.每个web应用有唯一
的一个相对应的Context代表web应用自身.servlet容器为第一个web应用创建一个

<!-- Context,对应于一个Web App

             path : 该Context的路径名是"",故该Context是该Host的默认Context

             docBase : 该Context的根目录是webapps/mycontext/

             reloadable:如果这个属性设为true, Tomcat服务器在运行状态下会监视在WEB-INF/classes和Web-INF/lib目录CLASS文件的改运.如果监视到有class文件 被更新,服务器自重新加载Web应用

             useNaming:指定是否支持JNDI,默认值为了true 

             cookies指定是否通过Cookies来支持Session,默认值为true

             -->

<Context path="" docBase="mycontext" debug="0"/>

 

        <!-- SingleSignOn valve, share authentication between web applications

             Documentation at: /docs/config/valve.html -->

        <!--

        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />

        -->

 

        <!-- Access log processes all example.

             Documentation at: /docs/config/valve.html

             Note: The pattern used is equivalent to using pattern="common" -->

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="localhost_access_log" suffix=".txt"

               pattern="%h %l %u %t "%r" %s %b" />

 

    </Engine>

  </Service>

</Server>

 

Tomcat Server处理一个http请求的过程

假设来自客户的请求为:http://localhost:8080/wsota/wsota_index.jsp

· 1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得

· 2) Connector把该请求交给它所在的ServiceEngine来处理,并等待来自Engine的回应

· 3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host

· 4) Engine匹配到名为localhostHost(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)

· 5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context

· 6) Host匹配到路径为/wsotaContext(如果匹配不到就把该请求交给路径名为""Context去处理)

· 7) path="/wsota"Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet

· 8) Context匹配到URL PATTERN*.jspservlet,对应于JspServlet

· 9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServletdoGetdoPost方法

· 10)Context把执行完了之后的HttpServletResponse对象返回给Host

· 11)HostHttpServletResponse对象返回给Engine

· 12)EngineHttpServletResponse对象返回给Connector

· 13)ConnectorHttpServletResponse对象返回给客户browser

启动服务

[root@svr5 ~]# /usr/local/tomcat/bin/startup.sh

服务器验证端口信息

[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           

客户端浏览测试页面

[root@client ~]# firefox http://127.0.0.1:8080

[root@client ~]# firefox http://127.0.0.1:8080/test.jsp

生产SSL密钥与证书文件

#keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore

[root@client ~]# firefox http://127.0.0.1:8080

[root@client ~]# firefox http://127.0.0.1:8080/test.jsp

创建虚拟主机对应的页面根路径

[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

[root@svr5 ~]# mkdir  /usr/local/tomcat/aa/base

[root@svr5 ~]# echo "BASE" > /usr/local/tomcat/aa/base/index.html

 

重启Tomcat服务器

[root@svr5 ~]# /usr/local/tomcat/bin/shutdown.sh

[root@svr5 ~]# /usr/local/tomcat/bin/startup.sh

客户端设置host文件,并浏览测试页面进行测试

[root@client ~]# vim /etc/hosts

… …

192.168.4.5    www.aa.com  www.bb.com

[root@client ~]# firefox http://www.aa.com:8080/      /结果为base页面的内容

[root@client ~]# firefox http://www.bb.com:8080/

[root@client ~]# firefox http://www.aa.com:8080/test    

//返回/var/www/html/index.html的内容

查看服务器日志文件

[root@svr5 ~]# ls /usr/local/tomcat/logs/

 

随笔录:

.安装软件

.升级服务

.实验2lnmp(动静分离)

nginx--->php

server{

listen 80;

server_name www.baidu.com;

auth_basic "your passwd";

auth_basic_user_file "/usr/local/nginx/pass";

1#不同客户端访问相同页面返回结果不同

)

)

location / {

http{

server_tokens off;

root html;

index index.html index.htm;

server

# rewrite /^ www.b.com/b.html;

rewrite ^(.*)$ /curl/$1 break;   #*大小写任意

}

rewrite 旧页面 新页面 【选项】

rewrite

(

redirect临时重定向

permanment永久重定向

rewrite a b;

rewrite b a;

3.Tailf /usr/local/nginx/logs/access.log

192.168.4.100(IP) - -(用户名) [28/Sep/2017:05:39:54 -0400](时间) "GET / HTTP/1.1" 302 160(字节大小) "-" "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0"

192.168.4.254 - - [28/Sep/2017:05:50:11 -0400] "GET /sfgsg HTTP/1.1" 302(跳转) 160 "-" "Mozilla/5.0 (X11; Linux x86_64(系统版本号); rv:38.0) Gecko/20100101 Firefox/38.0(用什么浏览器)"

---

 

httpd-tools

ab -c 2000() -n 2000(次数) http://192.168.4.5/

apache 30000

nginx  50000

实际影响:版本 cpu 内存

 

5.samba         #配置文件全局含义?

 amb.conf

[abc]

path=/abc

write_list=tom

6.[root@client ~]# ulimit -a

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 3850

max locked memory       (kbytes, -l) 64

max memory size         (kbytes, -m) unlimited

open files                      (-n) 1024         (open file1024)并发量要改大,如果访问量大)

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 8192

cpu time               (seconds, -t) unlimited

max user processes              (-u) 3850

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

修改open files

vim /etc/security/limits.conf        #vim /etc/security下的其他配置文件功能运用还有哪些?

 

----

响应头:服务--客户

请求头:客户---服务

 

8.user-Agent:可以#(

 

9.gzip 压缩         #代码含义是什么?

nginx页面需要压缩

1.300k--30k

在带宽不变的情况下访问速度变快

手机省流量

网站压缩同一使用gziprar(收费软件)

所有浏览器都支持gzip解压

小文件不压缩,达到一定量

gzip_min_length 1000;小与1000不压缩

APE60---5M无损音乐

mp3 jpg mp4 png gif

文档 html jsp php 

#

client server [a.jpg]

要求:浏览器把图片缓存30天(服务器对浏览器要求,除非对历史记录清除

对静态做缓存

 location ~* \.(jpg|png)$ {

                expires 36d;

30

 11.配置错误页面

200(正常)

300(重定向)

400(出错)

请求太长;缓存太小

404

500(服务器)

error_page  404   /404.html;           #遇到404,不报默认错误,跳接404.html---位置在server最后面

location = /404.html{                    #错误页面自动跳转首页

root html;}

chrset utf-8;      #改中文---位置server

Vim /usr/local/nginx/html/404.html

(扩展编写)

 

oracle

oracle先知

tomcat + java

yum list | grep jdk

java[开放语言]

Sun[java]----- > jdk[套件]

java------------->java

sun---Sun服务器---->Oracle(64亿)  IBM DELL 追求技术

openoffice    openoffice[收费]-----apache

Sun------->Oracle[]

libropenffice

mysql------mysql[不怎么收费]

mariadb[进程mysqld]mysql.conf

Sun-------->google(android)--开放

oracle(拉里)------->gooogle(android)

openjdk<---jdk

bash<------sh

java EE(企业板

java SE()

squid,varnish(代理软件)

 

squid--------------apache(web)

varnish(缓存页面存在代理服务器,提高响应速度)

用户感觉不到访问的是代理,除非抓包查看

nginxWeb服务;用户认证;虚拟主机;HTTPS

LNMPnginx(源码包---有依赖包),mysql,mysql-server,mysql-devel,php,php-mysql,php-fpm

nginx优化:nginx.conf优化

linux内核ulimit

 

bash------bash

a.sh------a.sh

tomcat(java代码)需要jdk-------jdkJREjdk的子集

java类库(网站)

vim /usr/local/tomcat/conf/server.xml

<Server>服务器

  <Service>服务

<Connect port=8080 />端口

....

<Engine>调度器

<Host name=www.a.com>

</Host>

</Engine>

</Service>

<Server>

mkdir -p {a,b} /ROOT

echo "A" > a/ROOT/

netstat -anptu | grep java

8005要有生成随机密码从内存中

uptime

ll /dev/random 伪随机密码

ll /dev/urandom 更高随机性密码

<tom>

name=tom age=30 sex=female

</tom>

<tom name=tom age=30 sex=female />

firefox http://www.aa.com:8080

firefox http://www.bb.com:8080

google,chrome,firefox,apple(https)

<server>

<service>

<Connect port=8080 />

<Connect port=8000 />

<Engine>

<host name=a></host>

<host name=b></host>

</Engine>

</service>

</server>

 

www.a.com:8080

www.a.com:8000

 

<Virulhost *:80>

servername

documentroot

keytool --help

4.5(proxy)

yum -y install memcached telnet

memcached 数据库(excel)

一个光纤网卡五六千

最慢的是硬盘20M/s 5m/s

mysql(数据库,数据表)

excel(a.xls)50行 1G

1000万行

不能单独读一行

nosql[缓存(内存)]kv数据库思想---------memcached;redis;mongodb(数据库)

key=value

key=value

office 365 500MB

oracle

redhat(CPU) PC(4cpu)

中动

redhat linux.org

ibm

google

阿里

mysql (id,username,passwd,phone)

001,tom,123,123

002,jerry,334,185

nginx(php) memcached mysql(硬盘)

访问注册(a.php)  tom=123 jerry=1343

访问登陆(b.php)

网站(20)

set name 0 180 3 (0代表不压缩;180代表180秒自动消失;3代表三个字符)

服务器重启

时间过期

删除flush_all

关机

 

1.memcached有缺点

2.memcached服务安装与端口

3.PHP能连接memcache

nginx,php,mysql,mysql-server,php-mysql,php-fpm

启动

开发------->/usr/local/nginx

 

LNMP

netstat -nutlp | grep port

80,9000,3306

nginx 启动

systemctl start php-fpm

systemctl start mariadb

yum -y install php-pecl-memcache

原创粉丝点击