apache (Web服务器)
简介:
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
Apache HTTP服务器是一个模块化的服务器,源于NCSAhttpd服务器,经过多次修改,成为世界使用排名第一的Web服务器软件。
它可以运行在几乎所有广泛使用的计算机平台上。
Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用
一 http请求处理过程
一次完整的http请求处理过程:
(1) 建立或处理连接:接收请求或拒绝请求
(2) 接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程;
(3) 处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据请求报文的首部来判断用户请求的资料
(4) 访问资源:获取请求报文中请求的资源,web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源;这些资源放置于本地文件系统某路径下,此路径通常称为DocRoot
(5) 构建响应报文
(6) 发送响应报文,有长连接和短连接模式
(7) 记录日志
二 并发访问响应模型(Web I/O):
1.单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个;多个请求被串行响应;
2.多进程I/O结构:并行启动多个进程,每个进程响应一个请求;
3.复用I/O结构:一个进程响应n个请求;
(1)多线程模型:一个进程生成N个线程,每个线程响应一个用户请求;
(2)事件驱动:event-driven
4复用的多进程I/O结构:启动多个(m)进程,每个进程响应n个请求;
三 apache 的工作模式
1.prefork:多进程模型,每个进程响应一个请求;
一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;
2.worker:多线程模型,每个线程响应一个请求;
一个主进程:生成多个子进程,每个子进程负责生个多个线程,每个线程响应一个请求;
3.event:事件驱动模型,每个线程响应n个请求;
一个主进程:生成m个子进程,每个进程直接响应n个请求;
四 安装前准备
说明
操作系统:CentOS 6.7 64位
Apache 版本:httpd-2.2.15-47.el6.centos.3.x86_64
httpd服务器ip:192.168.1.5
1. 配置好IP、DNS 、网关,确保使用远程连接工具能够连接服务器
2. 配置防火墙,iptables –F 清理防火墙规则或者关闭iptables
3. 关闭SELINUX, setenforce 0 #立即生效(实际是宽容模式)
五 安装配置
1. 安装apache,yum安装会自动解决依赖关系
yum -y install httpd
2. 启动httpd 服务,并测试页面是否显示正常
service httpd start
如果启动报错信息是:httpd:httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
那就去主配置文件找到#ServerName www.example.com:80 ,把前面的注释去掉就可以启动不报错了.
3. 定义server页面文档路径,在新的路径目录下创建文件内容,重新加载服务,测试页面.
mkdir -pv /www/htdocs
vi /www/htdocs/index.html
test Page
主配置文件修改这一行 DocumentRoot "/var/www/html"
vi /etc/httpd/conf/httpd.conf
DocumentRoot "/www/htdocs" #修改成这样
service httpd reload
4. 基于来源访问控制.
vi /etc/httpd/conf/httpd.conf
<Directory "/www/htdocs"> #修改这里的路径 Order allow,deny Deny from 192.168.1.3 #找到这一行添加192.168.1.3 Allow from all
service httpd reload
5. 设置路径别名
cd /www/htdocs/
vi bbs/index.html
Page at /www/htdocs/bbs #先自己测试看看是否是显示的内容
mkdir /forum
vi /forum/index.html
Page /forum
vi /etc/httpd/conf/httpd.conf
Alias /bbs/ "/forum/"
service httpd reload
6. 基于用户访问控制
cd /www/htdocs/
mkdir amdin
vi admin/index.html
Page FOR Admin
vi /etc/httpd/conf/httpd.conf #在主配置文件下添加如下几行
<Directory "/www/htdocs/admin"> Options None AllowOverride None AuthType Basic AuthName "Administator private" AuthUserFile "/etc/httpd/conf.d/.htpasswd" Require valid-user </Directory>
创建2个用户
htpasswd -c -m /etc/httpd/conf.d/.htpasswd tom
htpasswd -m /etc/httpd/conf.d/.htpasswd jerry
service httpd reload
7. 基于组的用户认证,基于组的认证修改的配置文件在以上的例子添加修改
vi /etc/httpd/conf/httpd.conf #在主配置文件下添加如下几行
<Directory "/www/htdocs/admin"> Options None AllowOverride None AuthType Basic AuthName "Administator private" AuthUserFile "/etc/httpd/conf.d/.htpasswd" AuthGroupFile "/etc/httpd/conf.d/.htgroup" Require group webadmin </Directory>
htpasswd -m /etc/httpd/conf.d/.htpasswd obama
创建组添加用户
vi /etc/httpd/conf.d/.htgroup
webadmin:jerry obama
service httpd reload
六 虚拟主机
注意:现在httpd服务器ip:172.28.0.97
1. 基于ip 的虚拟主机配置,进入主配置文件修改
vi /etc/httpd/conf/httpd.conf
#DocumentRoot "/var/www/html" #把这行注释掉
<VirtualHost 172.28.0.97:80> ServerName web1.test.com DocumentRoot "/vhosts/web1/htdocs" </VirtualHost>
然后创建相应的目录和内容,并重新加载配置文件和测试
mkdir -pv /vhosts/{web1,web2}/htdocs
vi /vhosts/web1/htdocs/index.html
Page at Web1
service httpd reload
2. 基于端口的虚拟主机,在以上的例子中在多个8080端口
vi /vhosts/web2/htdocs/index.html
Page at Web2
vi /etc/httpd/conf/httpd.conf
Listen 8080 #添加这一行监听8080端口 <VirtualHost 172.28.0.97:8080> ServerName web3.magedu.com DocumentRoot "/vhosts/web2/htdocs" </VirtualHost>
httpd -t #测试语法错误
service httpd restart
3. 基于名称的虚拟主机,在以上的虚拟配置上修改,并测试
vi /etc/httpd/conf/httpd.conf
NameVirtualHost 172.28.0.97:80 #把注释去掉,表示基于主机名的虚拟主机
httpd -t
mkdir -pv /web/vhosts/{www1,www2}
vi /web/vhosts/www1/index.html
Page at www1.stu.com
vi /web/vhosts/www2/index.html
Page at www2.stu.com
在另外一台机子上可以在hosts文件中添加172.28.0.97 www1.stu.com www2.stu.com
4. 通过www1.stu.com/server-status输出httpd工作状态相关信息,且只允许提供帐号密码才能访问(status:status);
cd /web/vhosts/www1/
mkdir admin
htpasswd -c -m /etc/httpd/conf.d/.htpasswd tom
vi /etc/httpd/conf/httpd.conf
service httpd reload
七 为上面的第1个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点;
httpd服务器ip:172.28.0.97
CA服务器IP:172.28.0.59
1. 生成密钥对 cakey.pem,并创建所需文件(在CA服务器上操作)
cd /etc/pki/CA/
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
touch index.txt
echo 01 > serial
2. 开始申请CA机构的根证书,20年x509类型(在CA服务器上操作)
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300
-new: 生成新证书签署请求;
-x509: 专用于CA生成自签证书;
-key: 生成请求时用到的私钥文件;
-days n:证书的有效期限;
-out /PATH/TO/SOMECERTFILE: 证书的保存路径;
3. 在httpd服务器上,生成自己的私钥key与csr证书请求
cd /etc/httpd/
mkdir ssl
cd ssl/
(umask 077;openssl genrsa -out httpd.key 1024) #生成自己的私钥
openssl req -new -key httpd.key -out httpd.csr
4. 把证书传送给CA
scp httpd.csr root@172.28.0.59:/tmp/
5. 在CA上签署证书,并将证书发还给请求者(在CA服务器上操作)
openssl ca -in /tmp/httpd.csr -out certs/www1.stu.com.crt -days 365
scp certs/www1.stu.com.crt 172.28.0.97:/etc/httpd/ssl
6. httpd要支持SSL 需要安装这个mod_ssl模块
yum -y install mod_ssl
cd /etc/httpd/conf.d/
vi ssl.conf
<VirtualHost 172.28.0.97:443> #修改这行IP DocumentRoot "/web/vhosts/www1" #注释去掉修改 ServerName www1.stu.com #注释去掉修改 # Server Certificate: SSLCertificateFile /etc/httpd/ssl/www1.stu.com.crt #修改证书文件路径 # Server Private Key: SSLCertificateKeyFile /etc/httpd/ssl/httpd.key #这个证书私钥 service httpd restart
7. 测试https是否配置成功
在其他的机子上做测试
openssl s_client -connect 172.28.0.97:443 -CAfile /etc/pki/CA/cacert.pem
原创文章,作者:liangkai,如若转载,请注明出处:http://www.178linux.com/13843
评论列表(1条)
已置顶,优化点:
1. markdown 神器可参考
2. 题目不够专业