httpd简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了httpd简介相关的知识,希望对你有一定的参考价值。

参考技术A

httpd具有以下特性:

其中并行处理模式MPM(多路处理模块)包含了三种运行模式。分别为prefork、worker和event。

profork是一个两级进程模型,父进程管理子进程,每个进程响应一个请求。由一个主进程负责生成多个子进程以及回收子进程、创建套接字、接收请求,并将请求派发给某个子进程进行处理。每个子进程只负责处理一个请求。其工作模型:预先生成几个空闲进程,等待用于响应用户请求,设定最大空闲和最小空闲;所有已建立的套接字由客户端进程和服务期端子进程进行通信,一旦出现空闲,会回收子进程。
特点:进城之间完全独立,无需担心线程安全问题。但进程占用的系统资源较多,在处理高并发请求时无法快速处理。
其在httpd2.2为的配置:

worker是一个三级结构、多进程多线程的模式,其在启动时也预先fork了几个子进程,每个子进程能够生产若干个服务线程和若干个监听线程,每个服务线程处理一个请求,监听线程负责接入请求并将其传递给服务线程处理和应答。线程比起进程会更轻量,因为线程通常会共享父进程的内存空间,因此内存的占用会减少些,在高并发的场景下表现比prefork模式更好。其工作模型:

worker模式的特点:线程比起进程会更轻量级,因此占用用内存少,处理高并发请求时性能更好。但是当一个线程出现问题的时候会导致同一进程下的线程也会出现问题。在keep-alive长连接的方式下,某个线程会被一直占用,即使中间没有请求,也需要等待到超时才会被释放。
在httpd2.2中的配置

event是一个事件驱动模型,是一个两级结构的多进程模型,父进程管理子进程,子进程通过event-driven机制直接响应多个请求。event模式解决了在keep-alive模式下,线程被长期占用直到超时,从而导致资源浪费的问题。
在event模块中,有一个专门的线程来管理这些keep-alive类型的线程,当接收到真实的请求时,会将请求传递给服务线程,执行完毕后,会将对应的服务线程释放,这样就能实现线程的异步非阻塞。
在httpd2.2中的配置:

示例
Centos6系统下实现httpd-2.2的安装,并分别实现prefork、worker、event等几种工作方式.

1、centos6上安装装httpd-2.2

prefork模式
实现prefork模式。httpd的默认运行模式为prefork,查看其运行模式为:

在/etc/httpd/conf/httpd.conf文件中查看prefork的设置

启动httpd服务并查看相关进程状态:

修改/etc/httpd/conf/httpd.conf中的prefork配置

重启httpd服务并常看进程状态:

worker模式
修改配置文件/etc/sysconfig/httpd配置文件,将文件中HTTPD=/usr/sbin/httpd.worker这一句取消注释。然后重启服务查看进程状态。

然后修改/etc/httpd/conf/httpd.conf文件中的worker配置

event模式

修改配置文件/etc/sysconfig/httpd配置文件,将文件中HTTPD=/usr/sbin/httpd.worker这一句修改为HTTPD=/usr/sbin/httpd.event。然后重启服务查看进程状态。

修改配置文件/etc/httpd/conf/httpd.conf,添加evnet配置

查看进程状态

一次完整的http请求处理过程:

在一次完整的http请求过程中,会出现两种报文,分别是http的请求报文request和http的响应报文response。

以上各字段的含义:

http协议的请求方法共有以下7中

状态响应码是http请求处理返回的结果状态标识,属于响应报文中的内容,熟知常见的状态响应码能帮助我们快速定位故障及进行相应的排错,状态码的类型大体可分为下面几类:

常用的状态码:

httpd服务的主配置文件/etc/httpd/conf/httpd.conf。此文件内容通常以下三大部分组成:

除主配置稳健以外,其余的相关配置文件包括:

这些配置文件在httpd2.4中通常在主配置文件中通过 IncludeOptional conf.d/*.conf 、 Include conf.modules.d/*.conf 进行调用响应目录下的配置文件。路径为相对路径,其根目录由主配置文件中的Serverroot进行设定。

在主配置文件中,修改httpd服务监听IP和接口的格式为:

注意:

示例:

持久链接是指tcp连续建立后,每个资源获取完成后不全断开连接,而是继续等待其它资源请求的进行。对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常响应;此时,设置较短的持久连接时长,以及较少的请求数量来缓解。具体设置如下:

示例:

在httpd服务的主配置文件中,“\'Main\' server”部分,定义web文档路径映射。

常用的站点访问控制即只有两种:一种是基于文件系统路径的访问控制机制;另一种是基于URL的站点访问控制机制。两者可同时设置
基于文件系统路径:
1、基于源地址实现访问控制,在此设置的目录下所有文件都遵循此处的指令设置。格式为:

2、针对单个文件实现访问控制。其格式为:

3、DSO动态共享对象机制
在/etc/httpd/conf/httpd.conf主配置文件中使用配置指令实现模块加载:

模块文件路径可使用相对路径:相对于ServerRoot(默认为/etc/httpd)
例如:

4、根据模式匹配到的文件实现访问控制。正则表达式要启用引擎,因此建议不使用;其格式为:

基于URL路径:
定义URL的目录,表示在此设置的目录下所有文件都遵循此处的指令设置;

"Directory"中各选项的参数

示例
新建/web/html目录,编辑修改httpd服务,使其能够web访问/web/html目录下的index.html目录文件:

httpd的虚拟主机是利用httpd自带的VirtualHost功能来实现的。一个httpd服务器上配置多个虚拟主机,实现一个服务器提供多站点服务,其实就是访问同一个服务器上的不同目录。虚拟主机的配置方式为:
在/etc/httpd/conf/httpd.conf主配置文件中修改,或者在//etc/httpd/conf.d/*.conf目录下新建配置文件。

httpd虚拟主机有三种实现方式:
1、基于IP方式的实现:需要给每个虚拟主机设置至少一个IP地址。
示例:
利用virtualhost基于IP的方式实现/var/www/html目录和/web/html目录下的网页文件的同时访问

2、基于port的方式实现:需要为每个虚拟主机使用至少一个独立的port。
示例:
基于port的方式实现/var/www/html目录和/web/html目录下的网页文件的同时访问。

3、基于FQDN的方式实现:为每个虚拟主机使用至少一个FQDN。其配置方式为:如果是httpd-2.2,需要在配置文件中添加 NameVirtualHost IP:PORT

示例:

修改window系统的hosts文件,并测试

基于用户的访问控制是通过http协议自身的认证来实现的。http协议的认证有两种方式:

由于并不是所有浏览器都支持摘要认证,所以一般使用较多的是basic认证方式。其设置过程如下:
1、用htpasswd命令生成提供账号和密码存储的文本文件
htpasswd
语法

选项:

设置过程:

2、编辑配置文件,设置用户认证,然后重启httpd。配置文件既可以是修改主配置文件/etc/httpd/conf/httpd.conf,也可以在/etc/httpd/conf.d/文件加下新建配置文件。

访问服务器测试

有大量用户需要认证时,可使用基于域的认证方式,把用户加入到域中,将用户划分为相应的域组,并根据域组来做相应的访问控制。
1、先创建域组文件:

2、修改配置文件,然后重启服务,登陆访问测试:

Apache(httpd)的简介安装以及如何使用

Apache(httpd)网站


前些天发现了一个巨牛的人工智能学习网站,内容通俗易懂、风趣幽默,忍不住想分享一下。对人工智能感兴趣的同学可以去看看哦
点击跳转到网站。

一、Apache网站服务的概述

Apache的起源以及特点

  • 出现: 针对之前出现的若干个web服务器程序进行整合,完善后形成的软件
  • 管理维护: 由ASF负责
  • 主要特点:
    (1)开放源代码
    (2)跨平台使用,支持绝大多数硬件平台,支持所有的unix系统和linux系统,支持大多数windows平台
    (3)支持多种web编程语言,perl,php,python,java等
    (4)模块化设计,根据所需功能去安装不同的模块
    (5)运行非常稳定,支持大负载访问的web站点
    (6)安全性高,及时修复已发现的漏洞

二、Apache服务器的安装

(1)准备工作

  • httpd服务的默认监听端口: 80
    (为了避免端口冲突,先用rpm的方式卸载已安装的httpd)
[root@centos7-007 ~]# rpm -e httpd --nodeps 
错误:未安装软件包 httpd 
  • Apache需要apr、pcre等软件包的支持,从系统光盘预安装这些软件及开发工具包
[root@centos7-007 ~]# mkdir /media  (创建挂载目录)
[root@centos7-007 ~]# mount /dev/cdrom /media/cdrom   (把镜像文件挂载)
[root@centos7-007 ~]# vim /etc/yum.repos.d/centos.repo   
(写一个yum库,写之前,进去目录中,先用rm -rf * 删除一下文件在创建,后缀是.repo就行)
[aaa]                                                           
name=这是一个本地YUM                             
baseurl=file:///media/cdrom   (这里写镜像挂载的目录即可)              
enabled=1                                                         
gpgcheck=0    
[root@centos7-007 ~]#  yum  -y  install apr apr-devel cyrus-sasl-devel expat-devel libdb-devel apr-util-devel apr-util pcre-devel pcre openldap-devel
为了避免系统中存在一些依赖性关系包没有安装的问题,可以使用yum装,方便一点

(2)源码编译安装Apache

[root@centos7-007 ~]# ll  (上传源码包)
总用量 8268
-rw-------. 1 root root    1220 9   3 18:16 anaconda-ks.cfg
-rw-r--r--  1 root root 8460433 12  9 17:25 httpd-2.4.25.tar.gz
[root@centos7-007 ~]#  tar zxvf httpd-2.4.25.tar.gz -C /usr/src/ (解压到指定目录)
[root@centos7-007 ~]#  cd /usr/src/httpd-2.4.25/  (切换到解压的目录)
[root@centos7-007 httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi && make && make install 
(根据需要进行配置,加载相应的模块,&&是执行完前一个命令在执行后一个命令,直接使用&&编译及安装)
[root@centos7-007 httpd-2.4.25]# cd
[root@centos7-007 ~]# ls /usr/local/httpd/  (确认安装结果,安装完成会有12个文件)
bin    cgi-bin  error   icons    logs  manual
build  conf     htdocs  include  man   modules
[root@centos7-007 ~]# ln -s /usr/local/httpd/bin/* /usr/local/bin/  (创建软连接)
[root@centos7-007 ~]# cp /usr/local/httpd/bin/apachectl  /etc/init.d/httpd 
(把Apache的服务脚本复制到/etc/init.d下并且命名为httpd)
[root@centos7-007 ~]# vi /etc/init.d/httpd  
(进入刚刚复制的文件,再第二行写入chkconfig: 35 85 21 ,用于添加系统服务时识别)
#!/bin/sh
#chkconfig: 35 85 21 
。。。。。
添加chkconfig 识别配置,将该服务在35 级别启动;启动和关闭的顺序分别为85 21
保存退出
[root@centos7-007 ~]# chkconfig  --add  httpd (添加httpd为系统服务)
发现已经可以通过systemctl管理http服务
[root@centos7-007 ~]# systemctl start httpd
[root@centos7-007 ~]# systemctl status httpd
 httpd.service - (null)
   Loaded: loaded (/etc/rc.d/init.d/httpd; bad; vendor preset: disabled)
   Active: active (running) since  2020-12-09 17:36:45 CST; 11s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 18095 ExecStart=/etc/rc.d/init.d/httpd start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/httpd.service
           ├─18098 /usr/local/httpd/bin/httpd -k start
           ├─18099 /usr/local/httpd/bin/httpd -k start
           ├─18100 /usr/local/httpd/bin/httpd -k start
           └─18101 /usr/local/httpd/bin/httpd -k start

12 09 17:36:45 centos7-007 systemd[1]: Starting (null)...
12 09 17:36:45 centos7-007 httpd[18095]: AH00558: httpd: Co...
12 09 17:36:45 centos7-007 systemd[1]: Started (null).
Hint: Some lines were ellipsized, use -l to show in full.
[root@centos7-007 ~]# 
*****如果不把apache添加到系统服务里那么启动apache服务的命令为:
[root@centos7-007 ~]# /usr/loacl/httpd/bin/apachectl start\\stop\\restart  (在主目录里直接启用)
*****可以查看端口号
[root@centos7-007 ~]# netstat   -anpt  | grep httpd  
(最小安装的centos可能会没有netstat这条命令)
tcp6       0      0 :::80                   :::*                    LISTEN      18098/httpd     
[root@centos7-007 ~]# yum -y install vim net-tools (安装vim以及网络工具如netstat)

三、Apache重要子目录的作用

我这里是安装到/usr/local下了,但是主目录里的子目录是相同的

  • /usr/local/httpd/bin
    存放各种执行程序文件,包括主程序httpd、服务控制工具apachectl等
  • /usr/local/httpd/logs
    存放httpd服务的日志文件
  • /usr/local/httpd/conf
    存放各种配置文件、主配置文件httpd.conf、增强配置子目录extra等
  • /usr/local/httpd/htdocs
    存放网页文档,默认首页文件是index.html,可以在主配置文件里进行修改

四、利用apache服务配合dns等服务结合使用

安装完apache服务后,只要服务处于开启状态,那么就可以直接进行访问
访问的地址就是apache服务器的地址
打开一台win7或者真机也可以,同一网段同一网卡,直接进行访问,默认页面就是 It works!

可以去主目录下的/htdocs下修改index.html从而修改网页内容

[root@centos7-007 ~]# vim /usr/local/httpd/htdocs/index.html 
<html><body><h1>It works!</h1></body></html>
修改为:
aaaaaa
重启服务,再次使用win7访问,发现页面已经变成aaaaaa
[root@centos7-007 ~]# systemctl restart httpd

apache和dns相结合使用

要求:以www.aaa.com这个域名访问网站
步骤:

*****安装dns服务 (之前已经挂载光盘并且已经写了yum库文件)
[root@centos7-007 ~]# yum -y install bind
[root@centos7-007 ~]# vim /etc/named.conf (进入dns的主配置文件)
。。。。。 
options 
        listen-on port 53  192.168.100.7; ;  (地址改为本机地址)
        listen-on-v6 port 53  ::1; ;
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query      any; ;  (允许所有主机可解析)
。。。。。
zone "." IN 
        type hint;
        file "named.ca";
;
zone "aaa.com" IN     (从上面的zone区域复制四行到下面,然后修改成要求的数据)
        type master;
        file "aaa.ca";
;
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
保存退出
*****添加区域配置文件
[root@centos7-007 ~]# cd /var/named/ 
[root@centos7-007 named]# ll
总用量 16
drwxrwx--- 2 named named    6 4   1 2020 data
drwxrwx--- 2 named named    6 4   1 2020 dynamic
-rw-r----- 1 root  named 2253 4   5 2018 named.ca
-rw-r----- 1 root  named  152 12 15 2009 named.empty
-rw-r----- 1 root  named  152 6  21 2007 named.localhost
-rw-r----- 1 root  named  168 12 15 2009 named.loopback
drwxrwx--- 2 named named    6 4   1 2020 slaves
[root@centos7-007 named]# cp named.localhost aaa.ca 
(复制模板文件到新的aaa.ca,这个新的文件必须和刚才在主配置文件里的 file项的文件名相同)
[root@centos7-007 named]# vim aaa.ca  (编写区域配置文件)
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
修改为:
$TTL 1D
@       IN SOA  aaa.com.      mail.aaa.com.  (
                                        2020120900 ; serial (这个随便修改成10位数即可)
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      www.aaa.com.
www IN A 192.168.100.7     (地址是本机地址)
保存退出
*****把主配置文件和区域配置文件的属主和属组改成named
[root@centos7-007 named]# chown named:named aaa.ca    
[root@centos7-007 named]# chown named:named /etc/named.conf 
[root@centos7-007 named]# systemctl start named  (开启dns服务)
*****修改apache的主配置文件
[root@centos7-007 named]# vim /usr/local/httpd/conf/httpd.conf 
。。。。。。 (在200行修改httpd的主机名为www.aaa.com)
200 ServerName www.aaa.com:80   200+G 即可跳转到200行,修改为www.aaa.com)
。。。。。
保存退出
[root@centos7-007 named]# apachectl -t (检查主配置文件)
Syntax OK   (没有问题)
[root@centos7-007 named]# systemctl restart httpd (重启apache服务)
修改win7的dns地址为apache服务器的地址,使用www.aaa.com进行访问



成功!!!!

五、httpd.conf主配置文件详解

vim /usr/local/httpd/conf/httpd.conf (主配置文件路径)
组成: 注释行和设置行两部分组成
注释行: 以“#”开头,包含相关配置内容的说明和解释

(1)全局配置项

特点: 独立存在,使用“关键字 值”这种配置格式
重要的配置项:

  • ServerRoot : 设置httpd 服务器的根目录
    (默认httpd 安装的位置就是该根目录的位置)
  • Listen : httpd 服务监听的端口
    (默认监听TCP 的80 端口)
  • ServerName: Web 站点完整的主机名
    (主机名 + 域名)
  • DocumentRoot: 默认的网站根目录,也就是网页文档实际所存放的位置
  • DirectoryIndex: 网站的默认索引页,可以设置多个首页文件,以空格分开;
    (默认的是index.html)
  • PidFile: 用于设置保存httpd 进程号文件所在的位置,
    (默认保存地址: /usr/local/httpd/logs/httpd.pid)

(2)区域配置项

特点: 使用一对组合标记,限定了配置项的作用范围,区域配置项只对区域内有效
示例:

[root@centos7-007 ~]# vim /usr/local/httpd/conf/httpd.conf 
。。。。。 (如:下面这个就算区域配置项)
<Directory "/usr/local/httpd/htdocs">
    #
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    # Note that "

以上是关于httpd简介的主要内容,如果未能解决你的问题,请参考以下文章

httpd简介

Apache(httpd)的简介安装以及如何使用

web service :httpd简介

LAMP简介与MySQL安装

httpd搭建虚拟主机与Apache网站基础服务

httpd