详解CentOS配置和管理web服务-Apache
家住海边喜欢浪:zhang789.blog.51cto.com
目录
1、web介绍
2、web历史和工作原理
3、http请求流程
4、关于Apache
5、Apache服务器软件安装使用
6、符号链接和虚拟目录
7、页面重定向
8、Apache日志文件
9、Apache安全配置
10、虚拟主机
10.1、基于IP
10.2、基于域名
10.3、基于端口
web服务器配置和管理
http协议简介
http协议,全称HyperText Transfer Protocol,中文名称超文本传输协议,是互联网应用最为广泛的一种网络协议,所有的www都必须遵守这个标准,设计http最初的目的为了提供一种发布和接收HTML(一种页面标记语言)
web服务器介绍
万维网又称web(world wide web,www),是在internet上以超文本为基础形成的信息网,用户可以通过浏览器可以访问web服务器上面的信息资源
web服务的历史和工作原理
web服务的历史
Internet上最热门的服务之一就是万维网,它是因特网上以超文本为基础形成的信息网,用户可以通过查阅Internet上的信息资源,例如:平时上网使用浏览器访问网站信息的最常见应用。
web在1989年起源于欧洲的一个国家核能源研究院中,由于随着研究的深入和发展,研究院的文件越来越多,而且人员流动非常大,要找到相关的资料是非常困难的,于是一个科学家就提出这样的一个建议,咋服务器上维护一个目录,目录的链接指向每个人的文件,每个人维护自己的文件,保证别人访问的时候总是最新的文档,这个建议得到了采纳并不断的完善后,最终形成如今Internet上最常见的www服务
web的工作原理
web系统是客户端/服务端的C/S架构,所以有服务器端端和客户端程序两个部分,常用的服务器端软件有Apache,IIS,nginx等,常见的客户端浏览器有IE,Mozilla等,用户在浏览器地址栏中输入资源定位地址(URL)来访问web页面
web页面是以超文本标记语言(HTML)进行编写,它是文本不在是传统的书页方式文本,而是可以在浏览器上面从一个页面跳转到另一个页面,使用HTML语言编制的web除了文本意外还可以嵌入视频,音乐,图象等
浏览一个页面时,(比如http://www.baidu.com/index.html)浏览器会向服务器www.baidu.com发送一条HTTP请求,服务器会去寻找所期望的对象(在这个例子就是/index.html),如果发送成功,就将对象,对象类型,对象长度以及其他一些信息放在http响应中发给客户端
[root@localhost ~]# curl -I www.baidu.com
HTTP/1.1 200 OK
Server: bfe/1.0.8.18
Date: Thu, 06 Oct 2016 07:23:46 GMT
Content-Type: text/html
Content-Length: 277
Last-Modified: Mon, 13 Jun 2016 02:50:09 GMT
Connection: Keep-Alive
ETag: "575e1f61-115"
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: no-cache
Accept-Ranges: bytes
http协议请求原理过程图
一次完整的Http请求处理过程:
(1) 建立或处理连接请求;
(2) 接收请求;
(3) 解析请求,处理请求;
(4) 加载用户请求的资源;
(5) 构建响应报文;
(6) 发送响应报文;
(7) 记录访问于日志中;
访问错误响应码
1xx:
2xx: 成功响应
3xx: 重定向响应
4xx: 客户端错误
5xx: 服务端错误
知名Web服务
某个网站统计的web软件排名
Windows系统中默认Web服务程序是IIS(Internet Information Services),这是一款图形化的网站管理工具,IIS程序不光能提供Web网站服务,还能够提供FTP、NMTP、SMTP等服务功能,但只能在Windows系统中使用。
nginx——最初于2004年10月4日为俄罗斯知名门户站点而开发的,作为一款轻量级的网站服务软件,因其稳定性和丰富的功能而深受信赖,但最最最被认可的是低系统资源、占用内存少且并发能力强,目前国内如新浪、网易、腾讯等门户站均使用。
Apache——取自美国印第安人土著语Apache,寓意着拥有高超的作战策略和无穷的耐性,由于其跨平台和安全性广泛被认可且拥有快速、可靠、简单的API扩展。目前拥有很高的Web服务软件市场占用率,全球使用最多的Web服务软件,开源、跨平台(可运行于Unix,linux,windows中)。
Tomcat——属于轻量级的Web服务软件,一般用于开发和调试JSP代码,通常认为Tomcat是Apache的扩展程序。
关于Apache服务
Nginx程序作为Web服务软件届的后起之秀已经通过自身的努力与优势赢得了大批站长的信赖,不得不说真的很棒!但是Apache程序作为老牌的Web服务软件因其卓越的稳定性与安全性成为了红帽RHEL7系统中默认的网站服务软件,同样也是红帽RHCSA与RHCE考试认证中避不开的考题。
Apache简介
Apache是一种开源的httpd服务器软件,可以在UNIX、Linux以及Windows在内的大多数主流计算机操作系统系统上面运行,Apache是由Illinois大学Urbana-Champaign的国家高级计算机程序中心开发,它的名字取自apatchy server 的读音,即充满补丁的服务器,可见在最初的时候该程序并不是非常完善
Apache优点
但由于Apache是开源软件,所以得到开源社区的支持,不断开发出新的功能特性,并修补了原来的缺陷,经过多年不断的完善,如今的Apache已经是最流行的web服务端软件之一Apache拥有以下众多的特性,保证了它可以高速稳定的运行
支持所有的计算机平台
简单有效的配置文件
支持虚拟主机
支持多种方式的http认证
集成Perl脚本语言
集成代理服务器模块
支持实时监视服务器状态和定制服务器日志
支持服务器端包含指令
支持Php
支持第三方软件开发商提供的软件
Apache模块化
Apache服务器的安装使用
httpd相关软件及安装
httpd-2.2.15-29.el6_4.x86_64.rpm //服务端主程序包,服务器运行核心软件包
httpd-devel-2.2.15-29.el6_4.x86_64.rpm //apache开发程序包,如开发附加模块的时候需要此软件
httpd-manual-2.2.15-29.el6_4.noarch.rpm //Apache手册文档
httpd-tools-2.2.15-29.el6_4.x86_64.rpm //一起apache的工具,如htpasswd
apr-devel-1.3.9-5.el6_2.x86_64.rpm //安装httpd-devel的时候的依赖包
apr-util-devel-1.3.9-3.el6_0.1.x86_64.rpm //安装httpd-devel的时候的依赖包
expat-devel-2.0.1-11.el6_2.x86_64.rpm //安装httpd-devel的时候的依赖包
安装Apache
Linux基本都自带Apache软件
[root@localhost ~]# ls /mnt/Packages/ | grep "httpd"
httpd-2.2.15-53.el6.centos.x86_64.rpm
[root@localhost ~]# yum install -y httpd httpd-manual
[root@localhost ~]# yum install -y elinks //这是一个字符界面浏览器 使用方式 “elinks 域名”
[root@localhost ~]# service httpd restart //服务启动
[root@localhost ~]# chkconfig httpd on //服务开机启动
[root@localhost ~]# netstat -antup | grep 80 //启动是否成功,查看端口是否开放
相关文件
[root@localhost ~]# ls /etc/httpd/ //apache工作目录,配置文件目录
[root@localhost ~]# ls /etc/httpd/conf/httpd.conf //yum或rpm方式安装的配置文件位置
[root@localhost ~]# ls /etc/httpd/conf.d/ //这个是默认httpd.conf里面include位置
[root@localhost ~]# ls /var/log/httpd/ //默认日志目录
[root@localhost ~]# ls /var/log/httpd/access_log //默认访问日志
[root@localhost ~]# ls /var/log/httpd/error_log //默认错误日志
[root@localhost ~]# ls /var/www/html/ //默认网站根目录
[root@localhost ~]# ls /etc/httpd/modules/ //apache库文件,模块文件目录
[root@localhost ~]# ls /etc/httpd/run/httpd.pid //apache运行的进程pid
[root@localhost ~]# ls /var/www/manual/ //apache手册也,需要安装httpd-manual
查看Apache的相关信息
查看Apache软件版本信息
[root@localhost ~]# httpd -V
Server version: Apache/2.2.15 (Unix)
Server built: May 11 2016 19:28:33
Server's Module Magic Number: 20051115:25
Server loaded: APR 1.3.9, APR-Util 1.3.9
Compiled using: APR 1.3.9, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
查看已经被编译的模块
[root@localhost ~]# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
httpd.conf主配置文件的解释
ServerTokens OS #返回操作系统类型,如apache/2.0.54(unix)
ServerRoot "/etc/httpd" #服务器配置文件目录
ServerName 192.168.1.235:80 #服务器主机名
PidFile run/httpd.pid #apache运行进程ID存放
Timeout 60 #超时时间,多少s没有反应就超时
KeepAlive Off #是否允许一个永久的链接,设置为OFF的时候,不能保持连接功能,传输效率比较低,设置为ON时,可以提高服务器传输文件的效率,建议开启
MaxKeepAliveRequests 100 #设置KeepAlive为ON时,设置客户端每次连接允许请求相应最大文件数,默认100个
KeepAliveTimeout 15 #超时时间,同一个客户端下一个请求15s没收到就超时
Listen 80 #监听端口,默认本地IP,如果指定ip写上IP:80
StartServers 8 #服务开始起启动8个进程
MinSpareServers 5 #最小空闲5个进程
MaxSpareServers 20 #最多空闲20个进程
ServerLimit 256 #服务器允许配置进程数上线
MaxClients 256 #最大连接数256,超过要进入等候队列
MaxRequestsPerChild 4000 #每个进程生存期内服务最大的请求数量,0表示用不结束
Options FollowSymLinks #Options Indexes 目录浏览 FollowSymLinks用连接浏览
AllowOverride None #设置为none,忽略.htaccess
LoadModule auth_basic_module modules/mod_auth_basic.so #载入的库,模块
● ● ● ● ● ●
Include conf.d/*.conf #conf.d里面的conf文件也属有效配置文件
User apache #apache运行以哪个身份运行
Group apache #apache运行以哪个组的身份运行
ServerAdmin root@localhost #管理员邮箱
DocumentRoot "/var/www/html" #默认的主目录,如果改动要改动两处,Directory
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny #这里默认后者生效,也就是deny生效
Allow from all #这里说允许所有
LogLevel warn #日志等级
DirectoryIndex index.html index.html.var #首页
AccessFileName .htaccess #access文件名
AddDefaultCharset UTF-8 #支持的语言,默认编码
#配置文件的最后是虚拟主机的字段,其中你大部分字段做个了解即可,用到的时候去查即可
检测配置文件语法
[root@localhost ~]# cat /etc/httpd/conf/httpd.conf | grep "^Listen" //修改web端口为55667
Listen 55667
[root@localhost ~]# apachectl configtest
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
Syntax OK
[root@localhost ~]# service httpd reload //切记http服务不可以随便重启,修改配置文件要重新载入配置文件
Reloading httpd:
创建一个测试首页
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
[root@localhost html]# echo "zhang789.blog.51cto.com
" >> index.html
[root@localhost html]# ll
total 4
-rw-r--r-- 1 root root 33 Oct 6 09:06 index.html
符号链接和虚拟目录
DocumentRoot的参数是指定web发布文档的主目录,在默认情况下,用户通过http访问web服务器浏览的所有资料都是存在该目录下,该参数只能设置一个目录作为参数值,那么是不是在Apache中就能有一个目录存放文档文件呢?如果文档根目录空间不足,要放到其他的文件系统中应该怎么办,
符号链接
例如:/var/www/html/doc这个目录,希望吧/usr/share/doc目录映射成/var/www/html/doc,配置就是一个软连接就行
[root@localhost html]# ln -s /usr/share/doc/ doc
[root@localhost html]# ll
total 4
lrwxrwxrwx 1 root root 15 Oct 6 09:49 doc -> /usr/share/doc/
-rw-r--r-- 1 root root 33 Oct 6 09:06 index.html
虚拟目录(别名)
使用虚拟目录是另一种将根目录以外的内容加入站点中的办法,下面举一个简单的例子,把/var/log目录映射成网站根目录下的/log下
1、打开httpd.conf文件,添加如下内容
Alias /log "/var/log"
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
2、重载httpd服务,然后访问加资源URL/log路径
页面重定向
如果用户经常访问某个网站的网页,他很可能会把页面的URL添加到收藏夹,在每次访问网站的时候,可以直接点击收藏夹的记录访问,但是如果网站进行了目录架构的更改,用户再使用原来的URL访问时就会出现404页面无法找到的错误,为了方便用户能够使用原来的URL进行访问,这时就需要页面重定向了
假设网站有一个doc目录,现在管理员要对网站的目录结构就行整理,并把/doc目录移动到/old-doc目录下,如果用户还是访问原来的URL就会出现404的错误,
1、打开httpd.conf配置文件,添加如下内容
Alias /old-doc "/usr/share/doc"
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
#指定当用户访问/doc目录遇到404错误自动重定向到http://192.168.211.128:55667/old-doc
Redirect 303 /doc http://192.168.211.128:55667/old-doc
2、重载httpd服务
3、使用浏览器再次访问
Apache日志文件
Apache运行会生成两个日志文件,access_log(访问日志)error_log(错误日志)
[root@localhost httpd]# pwd
/var/log/httpd
[root@localhost httpd]# ls
access_log error_log
1、访问日志文件
Apache的访问日志就是记录web服务器的所有访问活动(如下图)
从文件内容可以看出,每一行都记录了一次访问记录,由7个部分组成
192.168.211.1 - - [06/Oct/2016:10:23:26 +0800] "GET /old-doc/ HTTP/1.1" 200 149404 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36"
//客户端地址、访问者的标示、访问者的验证名字、请求的时间、请求类型、请求的http代码、发送给客户端的字节数
7部分详细说明 客户端地址
:表明访问网站的客户端IP地址 访问者的标示
:该项一般为空白,用“-”代替 访问者验证的名字
:该项用于记录访问者进行身份验证时提供的名字,一般情况下该项也为空白 请求的时间
:记录访问操作的发生时间 请求类型
:该项记录了服务器收到是一个什么类型的请求,一般类型包括GET、post、HEAD 请求的代码
:通过该项信息可以知道请求是否成功,遇到了什么样的问题错误,正常情况下,为200 发送给客户端的字节数
:表示发送给客户端的总的字节数,通过检查该数值是否和文件大小相同,可以知道传输是否被中断
2、错误日志
错误日志是Apache提供的另外一种标准日志,该日志记录了Apache服务运行过程发生的错误日志,httpd.conf配置文件中提供了一下两个配置参数:
ErrorLog logs/error_log
LogLevel warn
它们分别用于配置错误日志的位置和日志的级别
日志的级别说明
严重程度 等级 说明
1 emerg 系统不可以用
2 alert 需要立即引起注意的情况
3 crit 危急情况
4 error 错误信息
5 warn 警告信息
6 notiee 需要引起注意的情况
7 info 一般信息
8 debug 由运行于debug模式的程序输出的信息
emerg级别的信息最为严重,debug级别最低,如果用户吧错误日志设置成warn级别,则严重程度由1-5会被记录下来
从文件内容可以看出,每一行记录了一个错误,由3个部分组成,
时间 错误等级 错误信息
[Thu Oct 06 10:22:24 2016] [error] [client 192.168.211.1] Directory index forbidden by Options directive: /usr/share/doc/
第一个括号是错误发生的时间
2016年10月06 10:22:24 第二个是错误等级
:error 第三个是错误的内容
:[客户192.168.211.1]目录索引选项禁止指令:/usr/share/doc/
Apache安全配置
Apache提供了多种安装控制手段,包括web访问控制,用户登录密码设置及.htaccess文件
访问控制
访问控制是提高apache服务器安全级别的最有效的手段之一,看下Diertory段,Diertory段用于设置与目录相关的参数和指令,包括访问控制和认证
<Diretory 目录的路径>
目录相关的配置参数和指令
Diretory>
每个Diretory段以
开始结束,
指定目录及其里面的所有文件和子目录,在段中可以设置与目录相关的参数和指令,包括访问控制和认证
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
1、Allow 指令
Allow指令用于设置那些客户端可以访问Apache
Allow for [All/全域名/部分域名/ip地址/网络地址/cidr地址。。。]
all
表示所有客户端 全域名
:表示域名对应的客户端 www.baidu.com 部分域名
:表示域内的所有客户端 baidu.com IP地址
:如172.16.2.1 网络地址
:如192.168.1.0/256.356.355.0 CIDR地址
:172.16.20.0/24
2、Deny指令
Deny指令用户设置拒绝那些客户端访问Apache,格式和Allow一样
3、Order指令
Order指令用于指定访问规则的先后顺序,有一下两种
Order Allow,Deny;先执行允许访问规则,在执行拒绝访问规则
Order Deny,Allow; 先执行拒绝访问规则,在执行允许访问规则
实例:
现在,假设网站中一个logo目录,是登录网站后台的目录,所以网站管理员希望该目录只能由该网站管理员访问(192.168.211.1),其他都不能访问
1、打开httpd.conf配置文件添加如下内容
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 192.168.211.1
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
Syntax OK
[root@localhost httpd]# service httpd reload
Reloading httpd:
用户认证
Apache的用户认证方式包括基本(Basic)认证和摘要(Digest)认证两种,摘要认证比基本认证更加安全,但有个别浏览器不支持,基本认证很简单,当用户在浏览器输入认证模式的URL时候,会弹出一个对话框,要求输入账户密码,当用户输入后,web服务验证他的正确性,如果正确,则返回页面,错误则返回401页面
要使用用户认证,首先要创建好用户名和密码,在Apache中提供htpasswd命令用于创建和修改密码文件,该命令在
/support目录下
要在/etc/httpd/conf/下创建一个名为users的认证密码文件,并在密码文件添加sam用户
[root@localhost ~]# htpasswd -c /etc/httpd/conf/users sam
New password:
Re-type new password:
Adding password for user sam
认证密码文件创建后,如果再向users文件添加一个ken的用户 不加-C
[root@localhost ~]# htpasswd /etc/httpd/conf/users ken
New password:
Re-type new password:
Adding password for user ken
与/etc/passwd文件类似,认证密码都是一行一个
[root@localhost ~]# cat /etc/httpd/conf/users
sam:fGNODsapTMn72
ken:8HenVGxWHKF8A
用户名:加密后的密码
htpasswd没有删除账户指令,直接在配置文件里面删除
创建完成认证密码后,还要对配置文件进行修改,用户认证是在httpd.conf配置文件中
段中进行设置
案例:
现在网站管理员为了更加安全,加强控制,对log目录经过sam用户认证才能访问
1、在httpd.conf配置文件添加如下内容
"/var/www/html/log">
Options Indexes FollowSymLinks
AllowOverride None
AuthType Basic //设置认证的方式
AuthName "doc" //设置保护区域的名称
AuthUserFile /etc/httpd/conf/users //认证密码的文件
require user sam //指定那些用户可以进行访问
Order deny,allow
Deny from all
Allow from 192.168.211.1
</Directory>
2、检测语法,重载服务
[root@localhost ~]# apachectl configtest
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
Syntax OK
[root@localhost ~]# service httpd reload
Reloading httpd:
[root@localhost ~]#
虚拟主机
虚拟主机就是指将一台物理服务器虚拟多台web服务器,可以有效的节省硬件资源,Apache支持基于IP地址或主机名的虚拟机服务
虚拟主机的介绍
虚拟主机就是将一台物理服务器虚拟成多台web服务器,对于一些小规模的网站,通过web虚拟主机技术、可以跟其他网站共享一台服务器,有效减少系统的运行成本,
比如说,一家从事web托管的公司,他为企业提供web服务,那么他肯定不会为每个企业准备一台物理服务器,
Apache提供3中虚拟主机方案:
基于IP的虚拟主机服务
,基于主机名的虚拟主机
和基于端口的虚拟主机
基于IP的虚拟主机
基于IP的虚拟主机,服务上面必须设置多个IP地址,服务器根据请求目的的IP地址来判断请求的是哪个虚拟主机
Apache中是通过httpd.conf配置文件的
段来配置虚拟主机服务的
[:端口] IP地址:主机名[:端口]...>
虚拟主机的相关配置参数和指令
案例:
假设一台服务器上面有两个IP地址,分别为192.168.211.128和192.168.211.130,对应www.server1.com和www.server2.com,现在要根据这两个IP地址来实现虚拟主机
当客户端访问192.168.211.128访问/var/www/html/server1
当客户端访问192.168.211.130访问/var/www/html/server2
问题:
如果服务器只有一个网卡,可以通过单网卡配置多IP来模拟
1、在/var/www/html/server1和server2下,分别生成index.html文件
[root@localhost html]# mkdir server{1,2}
[root@localhost html]# ls
index.html log loganalyze old-doc server1 server2
[root@localhost server1]# cat index.html
基于IP的虚拟主机测试
基于IP的虚拟主机测试:www.server1.com
为了管理方便在/etc/httpd/conf.d/下面创建一个vhost.conf(在httpd.conf主配置里面有指定,conf.d/*.conf都是可生效的文件)
[root@localhost conf.d]# vim /etc/httpd/conf.d/vhost.conf
ServerAdmin [email protected]
DocumentRoot /var/www/html/server1
AllowOverride none
Allow from all
Order Allow,deny
ErrorLog /log/httpd/vhost_log/error_server1.log
ServerAdmin [email protected]
DocumentRoot /var/www/html/server2
AllowOverride none
Allow from all
Order Allow,deny
ErrorLog /log/httpd/vhost_log/error_server2.log
重载Apache服务访问
基于主机名的虚拟主机(域名)
大多数物理机IP有限,基于IP这种方式太浪费IP资源了,更多的都是使用基于域名的虚拟主机服务
http1.1协议中,增加了对主机名的虚拟主机服务的支持,具体的说,当客户端向web服务器发送请求时,客户端想要访问的主机名也通过请求头中的Host语句传递给web服务器,web服务器接受到这个请求后,通过检查Host语言来判断客户端请求的是哪个虚拟主机
与基于IP地址虚拟主机的配置方法不同,用户必须在conf配置文件使用NameVirtualHost参数 NameVirtualHost IP地址/主机名[:端口]
NameVirtualHost 192.168.211.128
ServerName www.server1.com
DocumentRoot /var/www/html/server1
AllowOverride none
Allow from all
Order Allow,deny
ErrorLog /log/httpd/vhost_log/error_server1.log
NameVirtualHost 192.168.211.130
ServerName www.server2.com
DocumentRoot /var/www/html/server2
AllowOverride none
Allow from all
Order Allow,deny
ErrorLog /log/httpd/vhost_log/error_server2.log
检查配置语法,重载httpd服务
基于端口的虚拟主机
在同一IP,同一主机名下,使用监听不同端口,访问时需要加访问的端口。使用不多,一般用来做内网测试使用
配置文件
ServerName www.server1.com
DocumentRoot /var/www/html/server1
AllowOverride none
Allow from all
Order Allow,deny
ErrorLog /log/httpd/vhost_log/error_server1.log
Listen 8080 //添加监听端口
ServerName www.server2.com
DocumentRoot /var/www/html/server2
AllowOverride none
Allow from all
Order Allow,deny
ErrorLog /log/httpd/vhost_log/error_server2.log
重载服务