zoukankan      html  css  js  c++  java
  • httpd的一些知识点

    一、httpd持久化连接:使用httpd之telnet测试其keepalive连接状态

    作用:连接建立后,每个资源获取结束不会断开连接,而继续等待其他资源请求并完成传输。

    1、KeepAlive  Off|On :表示是否打开持久化连接功能

    2、MaxKeepAliveRequests 100:表示连接的最大请求次数。超过100个连接之后,会断开最先的连接

    3、KeepAliveTimeout 15:15秒,在连接15秒过后没有进行任何操作则会断开连接。

    比如:打开KeepAlive功能是这样子的:

    首先是在/var/www/html/目录下创建一个文件index.html,并且写入内容“Test Page”

    然后在/etc/httpd/conf.d目录下创建一个新的配置文件中并写入如下内容:

    重启一下服务:

    [root@ELK-chaofeng07 conf.d]# telnet 172.16.0.57 80
    Trying 172.16.0.57...
    Connected to 172.16.0.57.
    Escape character is '^]'.
    GET /index.html HTTP/1.1
    Host: 172.16.0.57                         #手动输入两行内容输入完之后按下回车键

    HTTP/1.1 200 OK
    Date: Thu, 07 Mar 2019 03:40:51 GMT
    Server: Apache/2.4.6 (CentOS)
    Last-Modified: Thu, 07 Mar 2019 03:09:39 GMT
    ETag: "a-583786fd65dea"
    Accept-Ranges: bytes
    Content-Length: 10
    Content-Type: text/html; charset=UTF-8

    Test Page                             #显示出此行内容之后,系统会等待你10秒钟,如果这10秒内你不做任何处理,系统服务会自动断开连接。
    Connection closed by foreign host.

    终端中,红色背景是我手动交互式输入的,两行都输完之后,等待10秒钟没有手动输入再次发出请求,此时服务会主动断开连接。这就是打开KeepAlive的作用,系统会等待用户指定时间发起其他请求,如果没有其他请求之后,则会主动断开连接。

    安装httpd之后,默认是打开KeepAlive功能的,就比如上面的测试结果分析。

    比如:也可以关闭KeepAlive测试一下:

    重启一下:

    [root@ELK-chaofeng07 conf.d]# telnet 172.16.0.57 80
    telnet 172.16.0.57 80
    Trying 172.16.0.57...
    Connected to 172.16.0.57.
    Escape character is '^]'.
    GET /index.html HTTP/1.1
    Host:172.16.0.57
    
    HTTP/1.1 200 OK
    Date: Thu, 07 Mar 2019 03:24:19 GMT
    Server: Apache/2.4.6 (CentOS)
    Last-Modified: Thu, 07 Mar 2019 03:09:39 GMT
    ETag: "a-583786fd65dea"
    Accept-Ranges: bytes
    Content-Length: 10
    Connection: close
    Content-Type: text/html; charset=UTF-8
    
    Test Page                        #显示完此行内容之后,系统立即断开连接。
    Connection closed by foreign host.

     关闭KeepAlive之后,在客户端向服务器发起一次请求之后,服务器会立马断开连接,不再等待用户发起其他的请求,因此我们更建议打开KeepAlive的功能。

     在我测试的httpd服务上,httpd的版本是2.4.6。这个版本默认是打开KeepAlive功能的,并且设置超时时间也是比较短的,上面的实验演示中,我自己定义的配置文件是10秒钟,然后我删除了自己的配置文件,然后测试默认的KeepAlive服务状态,发现KeepAlive默认是开启状态,但是httpd服务默认是5秒钟。我还发现/etc/httpd/conf.d/目录下的自定义的配置文件的优先级大于系统默认的配置文件。

    二、httpd之多路处理模块MPM

    我们这里介绍使用的httpd版本都是2.4.6版本。httpd的处理模块MPM有三种:分别是prefork、worker、event。默认的处理模块是prefork。所以其他的两个我们不怎么使用,因此主要说prefork的用法。我们可能会修改httpd的子进程数量,一般上一个httpd服务有1个主进程,许多个子进程,不过子进程的数量是可以修改的。比如以下:

    [root@ELK-chaofeng conf.modules.d]#ps aux | grep httpd
    root      7284  1.5  0.8 394352 15484 ?        Ss   15:28   0:00 /usr/sbin/httpd -DFOREGROUND
    apache    7287  0.0  0.4 394484  7676 ?        S    15:28   0:00 /usr/sbin/httpd -DFOREGROUND
    apache    7288  0.0  0.4 394484  7676 ?        S    15:28   0:00 /usr/sbin/httpd -DFOREGROUND
    apache    7289  0.0  0.4 394484  7676 ?        S    15:28   0:00 /usr/sbin/httpd -DFOREGROUND
    apache    7290  0.0  0.4 394484  7676 ?        S    15:28   0:00 /usr/sbin/httpd -DFOREGROUND
    apache    7291  0.0  0.4 394484  7676 ?        S    15:28   0:00 /usr/sbin/httpd -DFOREGROUND
    apache    7292  0.0  0.4 394484  7676 ?        S    15:28   0:00 /usr/sbin/httpd -DFOREGROUND
    root      7333  0.0  0.0 112644   968 pts/0    R+   15:29   0:00 grep --color=auto httpd

    可以看出有一个主进程,是root用户启动的,剩下的是6个子进程,是apache用户,子进程负责与客户端打交道,不过这个过程还会有线程的参与,处理客户端请求比较复杂,修改prefork的子进程等参数是在这个文件中:

    [root@ELK-chaofeng conf.modules.d]#pwd
    /etc/httpd/conf.modules.d
    [root@ELK-chaofeng conf.modules.d]#cat 00-mpm.conf
    # Select the MPM module which should be used by uncommenting exactly
    # one of the following LoadModule lines:

    # prefork MPM: Implements a non-threaded, pre-forking web server
    # See: http://httpd.apache.org/docs/2.4/mod/prefork.html
    LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

    # worker MPM: Multi-Processing Module implementing a hybrid
    # multi-threaded multi-process web server
    # See: http://httpd.apache.org/docs/2.4/mod/worker.html
    #
    #LoadModule mpm_worker_module modules/mod_mpm_worker.so

    # event MPM: A variant of the worker MPM with the goal of consuming
    # threads only for connections with active processing
    # See: http://httpd.apache.org/docs/2.4/mod/event.html
    #
    #LoadModule mpm_event_module modules/mod_mpm_event.so
    <IfModule prefork.c>
    StartServers 6
    MinSpareServers 3
    MaxSpareServers 7
    ServerLimit 200
    MaxClients 200
    MaxRequestsPerChild 1000
    </IfModule>

    红色字体的内容就是定义子进程和线程的数量的。这部分内容默认没有,需要自己加上去。一般来说,httpd服务默认是创建10个子进程来建立连接

    查看模块列表:

    httpd -l :主要是查看静态编译的模块

    htpd -M :查看所有的模块,包括静态编译和DSO模块。

    三、httpd配置文件介绍

    1、站点目录:

    注意:httpd2.4.6版本中,站点目录需要显式给出访问权限,这个比httpd2.2版本有了更加细分的权限控制。如果不显示给出,即便定义了站点目录,默认也是不能访问的。

    还有一点:站点目录的根目录是相对httpd服务来说的,比如上面这个,对于Linux文件系统来说,这是/var/www/html目录,而对于httpd服务来说,把这个一整个目录当作是一个根目录,比如一个文件存在Linux系统上的/var/www/html/images/1.jpeg。我们在浏览器中访问时,输入的地址是:http://192.168.1.1/images1.jpeg来访问的。

    2、定义站点目录的访问权限

    我们的配置文件中可能有很多个Directory代码块,每一个代码块对应不同的权限。所以我们一定要找对站点目录才能继续修改。这里面主要有两点需要注意:

    1)Options :主要定义了访问路径下的资源权限问题。Options有三个选项需要学习:

    Indexes :当访问的路径下无默认主页面文件存在,且没有指定具体要访问的资源时,会将此路径下的所有资源以列表呈现给用户。这是一个非常危险的操作,一般上来说只有到下载页面时才使用此功能

    FollowSymlinks :比如现在要访问的目录下面有一个文件,但是这个文件是一个符号链接,他链接的是其他的目录下的一个文件。当启用此功能时,会直接将目标文件的内容显示出来,该功能默认也是启用的。

    none:不启用任何功能。

    2)站点访问权限配置。Require all granted表示全部客户端可访问此站点数据。相反的是Require all denied。

    需要注意的是:定义某个IP或者Host主机名访问的时候,需要添加代码段来实现,比如:

    <Directory>
    <Requireall>
    
        Require IP
        Require not IP
    </Requireall>
    </Directory>

    3、定义默认匹配的主页面

    我们访问网站的时候,网站自动会跳转到index.html这个页面并返回结果给我们 ,默认访问的页面就是这个参数控制的。我们可以定义多个,依次使用空格隔开,匹配的时候是自左向右依次匹配的。

     4、alias路径别名

    路径别名的作用就是,比如上面的,假如现在我访问的是 /webpath目录,那么系统此时会立即跳转到/full/filesystem/path这个目录来访问。方便用户。

  • 相关阅读:
    刷新SqlServer数据库中所有的视图
    代码的阅读
    unity3d的模型规范
    XOCDE5开发
    unity3d自动寻路教程
    u3d性能优化
    U3D层的运用
    关于unity3d插件的自动打包
    unity3d各平台通讯原生的平台API的说明
    uniSWF使用注意事项
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/10488713.html
Copyright © 2011-2022 走看看