httpd服务基本知识与配置

Apache httpd是HTTP服务器程序,常作为后台进程运行并创建子进程或线程来处理请求。主要版本包括httpd-2.2和httpd-2.4。文章介绍了httpd自带的工具如apachectl,curl命令,以及httpd的编译安装方法。重点讨论了虚拟主机的配置,包括相同IP不同端口、不同IP相同端口和相同IP相同端口但域名不同的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

httpd服务

httpd简介

httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。

通常,httpd不应该被直接调用,而应该在类Unix系统中由apachectl调用,在Windows中作为服务运行

版本信息

目前主要的版本有2个:
CentOS6系列的版本默认提供的是httpd-2.2版本的rpm包
CentOS7系列的版本默认提供的是httpd-2.4版本的rpm包

工作模型与工作方式

工作模型工作方式
prefork多进程模型,预先生成进程,一个请求用一个进程响应一个主进程负责生成n个子进程,子进程也称为工作进程。每个子进程处理一个用户请求,即使没有用户请求,也会预先生成多个空闲进程,随时等待请求到达,最大不会超过1024个
worker基于线程工作,一个请求用一个线程响应(启动多个进程,每个进程生成多个线程)
event基于事件的驱动,一个进程处理多个请求

httpd基础

httpd自带的工具程序

工具功能
htpasswdbasic认证基于文件实现时,用到的帐号密码生成工具
apachectlhttpd自带的服务控制脚本,支持start,stop,restart
apxs由httpd-devel包提供的,扩展httpd使用第三方模块的工具
rotatelogs日志滚动工具
suexec访问某些有特殊权限配置的资源时,临时切换至指定用户运行的工具
abapache benchmark,httpd的压力测试工具

rpm包安装的httpd程序环境

文件/目录功能
/var/log/httpd/access.log访问日志
/var/log/httpd/error_log错误日志
/var/www/html/站点文档目录
/usr/lib64/httpd/modules/模块文件路径
/etc/httpd/conf/httpd.conf主配置文件
/etc/httpd/conf.modules.d/*.conf模块配置文件
/etc/httpd/conf.d/*.conf辅助配置文件

curl命令

curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE及LDAP等协议

//用法
curl -o 下载下来取名  下载的位置

httpd命令

//语法:
httpd [options]
选项:
    -l      //查看静态编译的模块,列出核心中编译了哪些模块。它不会列出使用LoadModule指令动态加载的模块
    -M      //输出一个已经启用的模块列表,包括静态编译在服务器中的模块和作为DSO动态加载的模块
    -v      //显示httpd的版本,然后退出
    -V      //显示httpd和apr/apr-util的版本和编译参数,然后退出
    -X      //以调试模式运行httpd。仅启动一个工作进程,并且服务器不与控制台脱离
    -t      //检查配置文件是否有语法错误

编译安装httpd-2.4

[root@zlb ~]# yum -y install openssl-devel pcre-devel expat-devel libtool   //安装必要的软件包
[root@zlb ~]# yum groupinstall -y "Development Tools"   //安装工具
[root@zlb ~]# groupadd -r apache    //创建组
[root@zlb ~]# useradd -r -M -s /sbin/nologin -g apache apache
[root@zlb ~]# 
//事先下载好依赖包,我这里已经下载了
[root@zlb ~]# ls  
anaconda-ks.cfg  apr-1.6.3.tar.bz2  apr-util-1.6.1.tar.bz2  httpd-2.4.34.tar.bz2
[root@zlb ~]# tar xf  apr-1.6.3.tar.bz2   //解压这些包
[root@zlb ~]# tar xf apr-util-1.6.1.tar.bz2 
[root@zlb ~]# tar xf httpd-2.4.34.tar.bz2 
[root@zlb ~]# ls
anaconda-ks.cfg  apr-1.6.3.tar.bz2  apr-util-1.6.1.tar.bz2  httpd-2.4.34.tar.bz2
apr-1.6.3        apr-util-1.6.1     httpd-2.4.34
[root@zlb ~]# mv apr-1.6.3 /usr/src/   //移动到相应的目录中
[root@zlb ~]# mv apr-util-1.6.1 /usr/src/
[root@zlb ~]# cd /usr/src/
[root@zlb src]# ls
apr-1.6.3  apr-util-1.6.1  debug  kernels
[root@zlb src]# cd apr-1.6.3/
[root@zlb apr-1.6.3]# vim configure

    cfgfile=${ofile}T
    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
    $RM "$cfgfile"   //删除此行或者注释掉

    cat <<_LT_EOF >> "$cfgfile"

[root@zlb apr-1.6.3]# ./configure --prefix=/usr/local/apr   //编译安装,指定位置
[root@zlb apr-1.6.3]# make && make install
[root@zlb apr-1.6.3]# cd /usr/src/apr-util-1.6.1/
[root@zlb apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@zlb apr-util-1.6.1]# make && make install
[root@zlb ~]# cd httpd-2.4.34
[root@zlb httpd-2.4.34]#
[root@zlb httpd-2.4.34]# ./configure --prefix=/usr/local/apache \
> --sysconfdir=/etc/httpd24 \
> --enable-so \
> --enable-ssl \
> --enable-cgi \
> --enable-rewrite \
> --with-zlib \
> --with-pcre \
> --with-apr=/usr/local/apr \
> --with-apr-util=/usr/local/apr-util/ \
> --enable-modules=most \
> --enable-mpms-shared=all \
> --with-mpm=prefork

[root@zlb httpd-2.4.34]# make && make install

[root@zlb ~]# vim /etc/httpd24/httpd.conf

    # Require all granted
      Require ip 192.168.26.2   //加入主机
</Directory>
[root@zlb ~]# apachectl stop
[root@zlb ~]# ss -antl
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128               *:22                            *:*                  
LISTEN     0      100       127.0.0.1:25                            *:*                  
LISTEN     0      128              :::22                           :::*                  
LISTEN     0      100             ::1:25                           :::*                  
[root@zlb ~]# apachectl start
[root@zlb ~]# ss -antl
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128               *:22                            *:*                  
LISTEN     0      100       127.0.0.1:25                            *:*                  
LISTEN     0      128              :::80                           :::*                  
LISTEN     0      128              :::22                           :::*                  
LISTEN     0      100             ::1:25                           :::*                  
[root@zlb ~]# 

虚拟主机

分成三类:

  1. 相同IP不同端口
  2. 不同IP相同端口
  3. 相同IP相同端口,不同域名

下面分别对这三个示例进行配置:
相同IP不同端口:

[root@zlb ~]# vim /etc/httpd24/httpd.conf
<VirtualHost 192.168.26.9:80>
    ServerName www.xxx.com
    DocumentRoot "/usr/local/apache/htdocs/xxx"
    ErrorLog "logs/xxx_error_log"
    CustomLog "logs/xxx_access_log" combined
    <Directory /usr/local/apache/htdocs/xxx>
        <RequireAll>
        Require  ip 192.168.26.1
        </RequireAll>
    </Directory>
</VirtualHost>
<VirtualHost 192.168.26.9:8080>
    ServerName www.xxx2.com
    DocumentRoot "/usr/local/apache/htdocs/xxx2"
    ErrorLog "logs/xxx2_error_log"
    CustomLog "logs/xxx2_access_log" combined
    <Directory /usr/local/apache/htdocs/xxx2>
        <RequireAll>
        Require  ip 192.168.26.1
        </RequireAll>
    </Directory>
</VirtualHost>

[root@zlb ~]# vim /etc/httpd24/httpd.conf   //这里要添加监听端口
Listen 80
Listen 8080

[root@zlb ~]# cd /usr/local/apache/htdocs/
[root@zlb htdocs]# ls
index.html
[root@zlb htdocs]# mkdir xxx   //创建目录
[root@zlb htdocs]# mkdir xxx2
[root@zlb htdocs]# echo "This is xxx" > xxx/index.html   //创建文件
[root@zlb htdocs]# echo "This is xxx2" > xxx2/index.html
[root@zlb htdocs]# cat xxx
xxx/  xxx2/ 
[root@zlb htdocs]# cat xxx/index.html 
This is xxx
[root@zlb htdocs]# cat xxx2/index.html 
This is xxx2
[root@zlb htdocs]#

[root@zlb ~]# apachectl stop 
[root@zlb ~]# ss -antl
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128               *:22                            *:*                  
LISTEN     0      100       127.0.0.1:25                            *:*                  
LISTEN     0      128              :::22                           :::*                  
LISTEN     0      100             ::1:25                           :::*                  
[root@zlb ~]# apachectl start 
[root@zlb ~]# ss -antl
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128               *:22                            *:*                  
LISTEN     0      100       127.0.0.1:25                            *:*                  
LISTEN     0      128              :::8080                         :::*             //这里的8080端口已经加上去了     
LISTEN     0      128              :::80                           :::*                  
LISTEN     0      128              :::22                           :::*                  
LISTEN     0      100             ::1:25                           :::*                  
[root@zlb ~]#

在这里插入图片描述在这里插入图片描述

[root@zlb ~]# vim /etc/httpd24/httpd.conf 
<VirtualHost 192.168.26.9:80>
    ServerName www.xxx.com
    DocumentRoot "/usr/local/apache/htdocs/xxx"
    ErrorLog "logs/xxx_error_log"
    CustomLog "logs/xxx_access_log" combined
    <Directory /usr/local/apache/htdocs/xxx>
        <RequireAll>
        Require  ip 192.168.26.1
        </RequireAll>
    </Directory>
</VirtualHost>
<VirtualHost 192.168.26.5:80>
    ServerName www.xxx2.com
    DocumentRoot "/usr/local/apache/htdocs/xxx2"
    ErrorLog "logs/xxx2_error_log"
    CustomLog "logs/xxx2_access_log" combined
    <Directory /usr/local/apache/htdocs/xxx2>
        <RequireAll>
        Require  ip 192.168.26.1
        </RequireAll>
    </Directory>


[root@zlb ~]# vim /etc/httpd24/httpd.conf
#Listen 12.34.56.78:80
Listen 80


[root@zlb ~]# ip addr add 192.168.26.5/24 dev ens32   //这里要添加一个IP
[root@zlb ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:4c:8c:36 brd ff:ff:ff:ff:ff:ff
    inet 192.168.26.9/24 brd 192.168.26.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet 192.168.26.5/24 scope global secondary ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::efce:6c39:35ae:6692/64 scope link 
       valid_lft forever preferred_lft forever
[root@zlb ~]# 

[root@zlb ~]# apachectl stop 
[root@zlb ~]# apachectl start
[root@zlb ~]# ss -antl
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128               *:22                            *:*                  
LISTEN     0      100       127.0.0.1:25                            *:*                  
LISTEN     0      128              :::80                           :::*                  
LISTEN     0      128              :::22                           :::*                  
LISTEN     0      100             ::1:25                           :::*                  
[root@zlb ~]# 

在这里插入图片描述
在这里插入图片描述

相同的IP和端口,域名不同

[root@zlb ~]# vim /etc/httpd24/httpd.conf 
<VirtualHost 192.168.26.9:80>   //2处的IP和端口相同
    ServerName www.xxx.com   //域名不能相同
    DocumentRoot "/usr/local/apache/htdocs/xxx"
    ErrorLog "logs/xxx_error_log"
    CustomLog "logs/xxx_access_log" combined
    <Directory /usr/local/apache/htdocs/xxx>
        <RequireAll>
        Require  ip 192.168.26.1
        </RequireAll>
    </Directory>
</VirtualHost>
<VirtualHost 192.168.26.9:80>
    ServerName www.xxx2.com
    DocumentRoot "/usr/local/apache/htdocs/xxx2"
    ErrorLog "logs/xxx2_error_log"
    CustomLog "logs/xxx2_access_log" combined
    <Directory /usr/local/apache/htdocs/xxx2>
        <RequireAll>
        Require  ip 192.168.26.1
        </RequireAll>
    </Directory>
</VirtualHost>

//在Windows的c盘上要添加主机名,具体路径为c盘>Windows>System32>drivers>etc/hosts
[root@zlb ~]# apachectl stop   //每次更改配置文件必须重启Apache服务
[root@zlb ~]# apachectl start
[root@zlb ~]#

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值