web服务之Apache

二、Apache web服务

 

2.1 Apache介绍

Apache Software Fondation基金

httpd是apache的web服务器端软件

 

2.2 相比nginx优缺点

2.2.1 缺点

资源占用高

并发性能差

 

2.2.2 优点

rewrite,比nginx 的rewrite 强大

模块多

少bug

稳定

处理动态请求能力优于nginx

 

2.3 MPM(多处理模块)

可以通过httpd -V查看

[root@localhost ~]# httpd -V | grep -i "server mpm"
Server MPM:     Prefork

prefork(默认) 单进程模型

worker 单线程响应单用户请求

event 单进程响应多用户请求

 

2.3.1 prefork工作模式

(一个进程处理一个客户端请求)

Apache在启动之初,就预先fork一些子进程,然后等待请求进来。之所以这样做,是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程,在一个时间点内,只能处理一个请求。

作用:用一个进程处理一个用户请求。

优点:成熟稳定,兼容所有新老模块。同时,不需要担心线程安全的问题。

缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求。

 

2.3.2 worker工作模式

(一个进程生成多个线程,一个线程处理一个客户端请求)

使用了多进程和多线程的混合模式。它也预先fork了几个子进程(数量比较少),然后每个子进程创建一些线程,同时包括一个监听线程。每个请求过来,会被分配到1个线程来服务。线程比起进程会更轻量,因为线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比起prefork有更多的可用线程,表现会更优秀一些

作用:一个进程生成多个线程,一个线程处理一个用户请求

优点:占据更少的内存,高并发下表现更优秀。

缺点:必须考虑线程安全的问题。

 

2.3.3 event工作模式

(支持keepalive,数据传送完毕自动断开,但是不支持https)

用一个线程处理一个用户请求。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,

将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。

HTTP采用keepalive方式减少TCP连接数量,但是由于需要与服务器线程或进程进行绑定,导致一个繁忙的服务器会消耗完所有的线程。Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限 制,此时Event MPM方式是最有效的,但不能在HTTPS访问下工作。

 
Apache针对不同的操作系统提供了多个不同的MPM模块,例如:mpm_beos、mpm_event、mpm_netware、mpmt_os2、mpm_prefork、mpm_winnt、mpm_worker。

不同操作系统上默认的MPM模块
操作系统MPM模块描述
Windowsmpm_winnt它只创建一个单独的子进程,并在这个子进程中轮流产生多个线程来处理请求。
Unix/Linuxmpm_prefork(一个进程处理一个客户端请求)
BeOSmpm_beos由Be公司开发的一种多媒体操作系统,官方版已停止更新。
Netwarempm_netware由NOVELL公司推出的一种网络操作系统
OS/2mpmt_os2一种最初由微软和IBM共同开发的操作系统,现由IBM单独开发(微软放弃OS/2,转而开发Windows)

2.4 相关文件(2.4)

主配置文件: /etc/httpd/conf/httpd.conf 编译安装目录/conf/httpd.conf

其他配置文件:

/etc/httpd/conf.d/*.conf

/etc/httpd/conf.modules.d/*.conf

网页数据文件: /var/www/html 编译安装目录/html/

 

2.5 监听端口

http: tcp 80

https: tcp 443

 

2.6 主配置文件(httpd2.2)

httpd.apache.org

Section 1: Global Environment

  • ServerTokens OS

  • ServerRoot “/etc/httpd” 服务端相关文件默认目录

  • PidFile run/httpd.pid 进程运行时将pid写入文件

  • Listen 80 监听端口

  • KeepAlive Off 是否开启持久连接

  • Include conf.d/*.conf 将conf.d目录下所有.conf结尾文件包含进来(Include conf.modules.d/*.conf)

  • User apache 服务进程(/usr/sbin/httpd)执行者

  • Group apache 服务进程执行组

 
Section 2: ‘Main’ server configuration 配置主站点

  • ServerAdmin root@localhost 网站管理员邮箱
  • ServerName www.pl.com 站点名称
  • DocumentRoot “/var/www/html” 站点根目录
  • DirectoryIndex index.html index.html.var 目录首页
  • ErrorLog logs/error_log 错误日志
  • CustomLog logs/access_log combined 用户访问日志
  • Alias /icons/ “/var/www/icons/” 别名,当访问/icons目录即访问/var/www/icons(www.pl.com/icon/a.jpg、/var/www/icons/a.jpg)
  • 为指定目录定义功能
<Directory />
	Options FollowSymLinks
	#FollowSymLinks  是否允许追踪符号链接
	#Indexes 索引,用于基于http协议的文件浏览
	AllowOverride None
</Directory>
  • 访问控制

    Order allow,deny (默认拒绝所有)
    Allow from all

    Order deny,allow (默认允许所有)
    deny from 192.168.1.0/24
    allow from all

 

Section 3: Virtual Hosts

  • NameVirtualHost *:80 #开启虚拟主机
  • <VirtualHost *:80>
  • DocumentRoot /var/www/html
  • ServerName www.pl.com
  • ErrorLog logs/www.pl.com-error_log
  • CustomLog logs/www.pl.com-custom_log common
  • </VirtualHost>
  • <VirtualHost *:80>
  • DocumentRoot /test
  • ServerName www.test.com
  • ErrorLog logs/www.test.com-error_log
  • CustomLog logs/www.test.com-custom_log common
  • <Directory /test/download>
  • options indexes #将download目录作为文件共享目录,并生成索引页面
  • </Directory>

web认证功能

<VirtualHost *:80>
<Directory /test/private>
        AuthName "Input your username and password,please!"
        AuthType Basic
        AuthUserFile /etc/httpd/testpasswd
        require valid-user
</Directory>
</VirtualHost>

生成用户认证文件 htpasswd -cm /etc/httpd/testpasswd alice (第一次添加用户需-c)

1.基于IP的虚拟主机

2.基于端口的虚拟主机

3.基于域名的虚拟主机

 

2.6.1 基于域名的虚拟主机

配置文件

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
<Directory />
    AllowOverride none
    Require all granted # 修改这个
</Directory>
[root@localhost ~]# vim /etc/httpd/conf.d/vhost.conf
<VirtualHost *:80>
	DocumentRoot "/data/pl"
	ServerName www.pl.com
	ErrorLog "logs/www.pl.com-error_log"
	TransferLog "logs/host.pl.com-access_log"
</VirtualHost>
<VirtualHost *:80>
	DocumentRoot "/data/haha"
	ServerName www.haha.com
	ErrorLog "logs/www.haha.com-error_log"
	TransferLog "logs/host.haha.com-access_log"
</VirtualHost>
<VirtualHost *:80>
	DocumentRoot "/data/hehe"
	ServerName www.hehe.com
	ErrorLog "logs/www.hehe.com-error_log"
	TransferLog "logs/host.hehe.com-access_log"
</VirtualHost>

创建文件

[root@localhost ~]# mkdir /data
[root@localhost ~]# mkdir /data/{pl,haha,hehe}
[root@localhost ~]# echo "<h>pl</h>" > /data/pl/index.html
[root@localhost ~]# echo "<h>haha</h>" > /data/haha/index.html
[root@localhost ~]# echo "<h>hehe</h>" > /data/hehe/index.html

写入域名解析

[root@localhost ~]# vim /etc/hosts
192.168.217.155 www.pl.com www.haha.com www.hehe.com

测试

在这里插入图片描述

 

2.6.2 虚拟主机做文件共享以及认证
  1. www.pl.com 静态页面

  2. www.haha.com 文件共享

  3. www.hehe.com 认证

  4. 解析动态php请求

配置

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
<Directory />
    AllowOverride none
    Require all granted # 修改这个
</Directory>
[root@localhost ~]# vim /etc/httpd/conf.d/vhost.conf
<VirtualHost *:80>
	DocumentRoot "/data/pl"
	ServerName www.pl.com
	ErrorLog "logs/www.pl.com-error_log"
	TransferLog "logs/host.pl.com-access_log"
</VirtualHost>
<VirtualHost *:80>
	DocumentRoot "/data/haha"
	ServerName www.haha.com
	ErrorLog "logs/www.haha.com-error_log"
	TransferLog "logs/host.haha.com-access_log"
<Directory "/data/haha/share">
	Options Indexes 
</Directory>
</VirtualHost>
<VirtualHost *:80>
	DocumentRoot "/data/hehe"
	ServerName www.hehe.com
	ErrorLog "logs/www.hehe.com-error_log"
	TransferLog "logs/host.hehe.com-access_log"
<Directory "/data/hehe/secert">
	AuthName "Input your username and password,please!"
	AuthType Basic
	AuthUserFile /etc/httpd/testpasswd
	require valid-user
</Directory>
</VirtualHost>

文件共享

[root@localhost ~]# rm -rf /data/haha/index.html
[root@localhost ~]# mkdir /data/haha/share
[root@localhost ~]# cp -a /etc/*.conf /data/haha/share/

访问

在这里插入图片描述

认证

[root@localhost ~]# htpasswd -cm /etc/httpd/testpasswd alice
New password: 
Re-type new password: 
Adding password for user alice
[root@localhost ~]# mkdir /data/hehe/secert
[root@localhost ~]# echo "this is secert" > /data/hehe/secert/index.html

访问

在这里插入图片描述

可以看到

在这里插入图片描述

 

2.7 源码编译安装httpd2.4

0.安装相关编译工具

[root@httpd ~]# yum install -y automake make autoconf gcc expat-devel gcc-c++
[root@httpd ~]# wget http://archive.apache.org/dist/apr/apr-1.5.1.tar.gz
[root@httpd ~]# wget http://archive.apache.org/dist/apr/apr-util-1.6.1.tar.gz
[root@httpd ~]# wget http://www.zlib.net/zlib-1.2.11.tar.gz
[root@httpd ~]# wget https://sourceforge.net/projects/pcre/files/pcre/8.38/pcre-8.38.tar.gz
[root@httpd ~]# wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2n.tar.gz
[root@httpd ~]# wget http://archive.apache.org/dist/httpd/httpd-2.4.29.tar.gz

 
1.下载源码包

apr-1.5.1.tar.gz

[root@httpd ~]# tar -xzvf apr-1.5.1.tar.gz
[root@httpd ~]# cd apr-1.5.1 
[root@httpd apr-1.5.1]# ./configure --prefix=/usr/local/apr
[root@httpd apr-1.5.1]# make && make install

yum -y install libtool libtool-ltdl libtool-ltdl-devel

在这里插入图片描述

apr-util-1.6.1.tar.gz

[root@httpd ~]# tar -xzvf apr-util-1.6.1.tar.gz 
[root@httpd ~]# cd apr-util-1.6.1
[root@httpd apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@httpd apr-util-1.6.1]# make && make install

zlib-1.2.11.tar.gz

[root@httpd ~]# tar -xzvf zlib-1.2.11.tar.gz
[root@httpd ~]# cd zlib-1.2.11
[root@httpd zlib-1.2.11]# ./configure --prefix=/usr/local/apr
[root@httpd zlib-1.2.11]# make && make install

pcre-8.38.tar.gz

[root@httpd ~]# tar -xzvf pcre-8.38.tar.gz
[root@httpd ~]# cd pcre-8.38
[root@httpd pcre-8.38]# ./configure --prefix=/usr/local/pcre
[root@httpd pcre-8.38]# make && make install

openssl-1.0.2n.tar.gz

[root@httpd ~]# tar -xzvf openssl-1.0.2n.tar.gz
[root@httpd ~]# cd openssl-1.0.2n
[root@httpd openssl-1.0.2n]# ./config -fPIC --prefix=/usr/local/openssl enable-shared 
[root@httpd openssl-1.0.2n]# make && make install

httpd-2.4.29.tar.gz

[root@httpd ~]# tar -xzvf httpd-2.4.29.tar.gz   
[root@httpd ~]# cd httpd-2.4.29
[root@httpd httpd-2.4.29]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-ssl --with-ssl=/usr/local/openssl --enable-cgi  --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event --with-pcre=/usr/local/pcre   --with-apr=/usr/local/apr  --with-apr-util=/usr/local/apr-util --enable-expires --enable-deflate
[root@httpd httpd-2.4.29]# make && make install

yum install -y zlib-devel

apr-util版本太高

开启服务

[root@httpd ~]# /usr/local/httpd/bin/apachectl start

 
访问192.168.217.154:80

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值