欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

httpd服务

程序员文章站 2022-06-12 12:49:24
...

httpd

1、httpd简介

httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。
通常,httpd不应该被直接调用,而应该在类Unix系统中由apachectl调用,在Windows中做为服务运行。

2、httpd版本

主要介绍httpd的两大版本:

  • httpd-2.2
  • httpd-2.4

2.1 httpd的特性

  • httpd-2.2 特性:
    事先创建进程
    按需维持适当的进程
    模块化设计,核心比较小,各种功能通过模块添加(包括PHP),支持运行时配置,支持单独编译模块
    支持多种方式的虚拟主机配置,如基于ip的虚拟主机,基于端口的虚拟主机,基于域名的虚拟主机等
    支持https协议(通过mod_ ssI模块实现)
    支持用户认证
    支持基于IP或域名的ACL访问控制机制
    支持每目录的访问控制(用户访问默认主页时不需要提供用户名和密码,但是用户访问某特定目录时需要提供用户名和支持URL重写
    支持MPM (Multi Path Modules,多处理模块)。用于定义httpd的工作模型(单进程、 单进程多线程、多进程、多进程单线程、多进程多线程)
  • httpd-2.4 特性:
    MPM支持运行DSO机制(Dynamic Share Object,模块的动态装/卸载机制),以模块形式按需加载
    支持event MPM, event MPM模块生产环境可用
    支持异步读写
    支持每个模块及每个目录分别使用各自的日志级别
    每个请求相关的专业配置,使用来配置
    增强版的表达式分析器
    支持毫秒级的keepalive timeout
    基于FQDN的虚拟主机不再需要Name Virtual Host指令
    支持用户自定义变量
    支持新的指令(Allow Override List)
    降低对内存的消耗

3、httpd基础

3.1 httpd 自带的工具程序

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

3.2 web 相关的命令

1.curl 命令

  • curl是基于URL语法在命令行方式下的传输工具,它支持FTP,FTPS,HTTP,HTTPS等协议

  • curl 支持的功能:
    ·https 认证
    ·http 的POST/PUT 等方法
    ·ftp 上传
    ·kerberos 认证
    ·http 上传
    ·代理服务器
    ·cookies
    ·用户名/密码认证
    ·下载文件断点传续
    ·socks5 代理服务器
    ·通过http 代理服务器上传文件到ftp服务器

  • 语法

//语法:curl [option] […]
常用的option:
-A……//设置用户代理发送给服务器
-basic……//使用Http 基本认证
–tcp-nodelay …… //使用TCP_NODELAY选项
-e …… //来源网址
–cacert ……//CA证书
–compressed ……//要求返回时压缩格式
-H ……//自定义请求首部信息传递服务器
-I ……//只显示响应报文首部信息
–limit-rate ……//设置传输速度
-o……//把输出写到文件中

2.httpd 命令

-l……//查看静态编译模块,列出核心中编译了那些模块
-M……//输出一个已经启用的模块列表,包括静态编译在服务器中的模块和作为DSO动态加载的模块
-v……//显示httpd版本,然后退出
-V……//显示httpd和apr/apr-util的版本和编译参数,然后退出
-X……//以调试模式运行httpd
-t……//检查配置文件是否有错误

4、 编译安装 httpd-2.4

**//安装前请确保本地仓库或网络源有一个可以用**
**//安装开发环境**
[aaa@qq.com ~]# yum groupinstall "Development Tools"
……安装过程略
[aaa@qq.com ~]# groupadd -r apache 
[aaa@qq.com ~]# useradd -r -g apache apache
[aaa@qq.com ~]# yum -y install openssl-devel pcre-devel expat-devel libtool
……安装过程略
**//下面下载安装包请确保电脑有网(如果有下载好的安装包可直接上传即可。)**
**//下载并安装apr-1.4+和apr-util-1.4+**
[aaa@qq.com ~]# cd /usr/src/ 
[aaa@qq.com src]# wget http://mirrors.shu.edu.cn/apache//apr/apr-1.6.5.tar.bz2
……下载过程略
[aaa@qq.com src]# wget http://mirrors.shu.edu.cn/apache//apr/apr-util-1. 6.1.tar.bz2 
……下载过程略
[aaa@qq.com src]# ls 
apr-1.6.5.tar.bz2  apr-util-1.6.1.tar.bz2  debug  kernels 
[aaa@qq.com src]# tar xf apr-1.6.5.tar.bz2 
[aaa@qq.com src]# tar xf apr-util-1.6.1.tar.bz2
[aaa@qq.com src]# ls 
apr-1.6.5  apr-1.6.5.tar.bz2  apr-util-1.6.1  apr-util-1.6.1.tar.bz2  debug  kernels 
[aaa@qq.com src]# cd apr-1.6.5 
[aaa@qq.com apr-1.6.5]# vim configure 
		........   
		cfgfile="${ofile}T"    
		trap "$RM \"$cfgfile\"; exit 1" 1 2 15    
		# $RM "$cfgfile"        //将此行添加注释
		.........
[aaa@qq.com apr-1.6.5]# ./configure  --prefix=/usr/local/apr 
……配置过程略
[aaa@qq.com apr-1.6.5]# make && make install 
……编译安装过程略

[aaa@qq.com apr-1.6.5]# cd /usr/src/apr-util-1.6.1 
[aaa@qq.com apr-util-1.6.1]# ./configure   --prefix=/usr/local/apr-util --with-apr=/usr/local/apr 
……配置过程略 
[aaa@qq.com apr-util-1.6.1]# make && make install 
……编译安装过程略

**//下载httpd(如有下载完成的安装包可直接上传)**
[aaa@qq.com ~]# wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.38 .tar.bz2 
……下载过程略
[aaa@qq.com ~]# ls 
httpd-2.4.38.tar.bz2 
[aaa@qq.com ~]# tar xf httpd-2.4.38.tar.bz2
[aaa@qq.com ~]# ls 
httpd-2.4.38.tar.bz2   httpd-2.4.38
[aaa@qq.com ~]# cd httpd-2.4.38 
[aaa@qq.com httpd-2.4.38]# ./configure  --prefix=/usr/local/apache      --sysconfdir=/etc/httpd38   --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
……配置过程略
[aaa@qq.com httpd-2.4.37]# make && make install 
……编译安装过程略

**//创建软连接**
[aaa@qq.com ~]#echo  "export  PATH=/usr/local/apache/bin:$PATH"  >  /etc/profile.d/httpd.sh
**//取消ServerName前面的注释**
[aaa@qq.com ~]# sed -i '/#ServerName/s/#//g' /etc/httpd24/httpd.conf 
**//启动服务(80端口为httpd服务端口)**
[aaa@qq.com ~]# apachectl start
[aaa@qq.com ~]# ss  -antl
State      Recv-Q Send-Q              Local Address:Port                             Peer Address:Port              
LISTEN     0      128                             *:80                                          *:*                  
LISTEN     0      128                             *:22                                          *:*                  
LISTEN     0      100                     127.0.0.1:25                                          *:*                  
LISTEN     0      128                             *:443                                         *:*                  
LISTEN     0      128                            :::22                                         :::*                  
LISTEN     0      100                           ::1:25                                         :::*                  

5、httpd 常用配置

模块 功能
prefork 多进程模型,预先生成进程,一个请求用一个进程响应,一个主进程负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求, 即使没有用户请求,也会预先生成多个空闲进程
worker 基于线程工作,一个请求用一个线程响应(启动多个进程,每个进程生成多个线程
event 基于事件的驱动,一个进程处理多个请求

5.1 控制访问法则

法则 功能
Require all granted 允许所有主机访问
Require all deny 拒绝所有主机访问
Require ip IPADDR 授权指定来源地址的主机访问
Require not ip IPADDR 拒绝指定来源地址的主机访问
Require host HOSTNAME 授权指定来源主机名的主机访问
Require not host HOSTNAME 拒绝指定来源主机名的主机访问

6、虚拟主机

虚拟主机有三类::

  • 相同IP不同端口
  • 不同IP相同端口
  • 相同IP相同端口不同域名

6.1 相同IP不同端口

[aaa@qq.com ~]# vim  /etc/httpd38/httpd.conf 
.......
**//在最后一行加入以下内容**
<VirtualHost *:80>
    DocumentRoot "/usr/local/apache/htdocs/aaa"
    ServerName  zhao.example.com
    ErrorLog "logs/11-error_log"
    CustomLog "logs/11-access_log" common
</VirtualHost>

<VirtualHost *:81>
    DocumentRoot "/usr/local/apache/htdocs/bbb"
    ServerName  wen.example.com
    ErrorLog "logs/22-error_log"
    CustomLog "logs/22-access_log" common
</VirtualHost>

**//末行模式下搜索:/Listen** 
**//在添加一个端口(默认端口为80)**
#
#Listen 12.34.56.78:80
Listen 80
Listen 81
.....

[aaa@qq.com ~]# apachectl   -t
Syntax OK
[aaa@qq.com ~]# cd  /usr/local/apache/htdocs/
[aaa@qq.com htdocs]# mkdir  aaa   bbb
[aaa@qq.com htdocs]# ls
aaa  bbb  index.html
[aaa@qq.com htdocs]# cd  aaa/
[aaa@qq.com aaa]# echo  "123456789"  > index.html
[aaa@qq.com htdocs]# cd  bbb/
[aaa@qq.com bbb]# echo  "987654321"  > index.html
[aaa@qq.com ~]# apachectl   restart

httpd服务
httpd服务

6.2 不同IP相同端口

[aaa@qq.com ~]# vim  /etc/httpd38/httpd.conf 
.......
**//在最后一行加入以下内容**
<VirtualHost 192.168.206.129:80>
    DocumentRoot "/usr/local/apache/htdocs/aaa"
    ServerName  zhao.example.com
    ErrorLog "logs/11-error_log"
    CustomLog "logs/11-access_log" common
</VirtualHost>

<VirtualHost 192.168.206.100:80>
    DocumentRoot "/usr/local/apache/htdocs/bbb"
    ServerName  wen.example.com
    ErrorLog "logs/22-error_log"
    CustomLog "logs/22-access_log" common
</VirtualHost>

[aaa@qq.com ~]# apachectl   -t
Syntax OK
**//临时添加一个ip**
[aaa@qq.com ~]#ip  addr add  192.168.206.100/24  dev eth0
[aaa@qq.com ~]# cd  /usr/local/apache/htdocs/
[aaa@qq.com htdocs]# mkdir  aaa   bbb
[aaa@qq.com htdocs]# ls
aaa  bbb  index.html
[aaa@qq.com htdocs]# cd  aaa/
[aaa@qq.com aaa]# echo  "123456789"  > index.html
[aaa@qq.com htdocs]# cd  bbb/
[aaa@qq.com bbb]# echo  "987654321"  > index.html
[aaa@qq.com ~]# apachectl   restart

httpd服务
httpd服务

6.3 相同IP相同端口不同域名

[aaa@qq.com ~]# vim  /etc/httpd38/httpd.conf 
.......
**//在最后一行加入以下内容**
<VirtualHost *:80>
    DocumentRoot "/usr/local/apache/htdocs/aaa"
    ServerName  zhao.example.com
    ErrorLog "logs/11-error_log"
    CustomLog "logs/11-access_log" common
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/usr/local/apache/htdocs/bbb"
    ServerName  wen.example.com
    ErrorLog "logs/22-error_log"
    CustomLog "logs/22-access_log" common
</VirtualHost>

[aaa@qq.com ~]# apachectl   -t
Syntax OK
[aaa@qq.com ~]# cd  /usr/local/apache/htdocs/
[aaa@qq.com htdocs]# mkdir  aaa   bbb
[aaa@qq.com htdocs]# ls
aaa  bbb  index.html
[aaa@qq.com htdocs]# cd  aaa/
[aaa@qq.com aaa]# echo  "123456789"  > index.html
[aaa@qq.com htdocs]# cd  bbb/
[aaa@qq.com bbb]# echo  "987654321"  > index.html
[aaa@qq.com ~]# apachectl   restart

**//下面的操作需要先返回电脑桌面**
1、点击桌面上的‘我的电脑’
2、点击进入:C:\windows\systemd32\drivers\etc\
3、把里面的hosts文件拖到电脑桌面上双击用记事本打开
4、在hosts文件里的最后一行加上你ip和你的域名(域名就是你上面设置的 ServerName)
192.168.206.xxx    xxx.xxx.com
192.168.206.xxx    xxx.xxx.com
5、关闭并保存文件,然后把文件拖回原来的位置
6、刷新一下‘我的电脑’

httpd服务
httpd服务