在linux中,要搭建一个web服务器基本上都是基于httpd实现的,所以要想使用web服务器,则需要先安装httpd
yum install httpd
关于httpd的软件包,主要有3种
我们安装的就是最基本的httpd工具
而httpd.i386 是我们的httpd工具
httpd-devel.i386 则是服务器软件包
httpd-manual.i386 则是各种各样的说明文档,帮助文档。
小扩展:
/etc/httpd 目录下保存着所有的配置文件
相关的日志文件都在 /var/log/httpd
相关的模块都在/usr/lib/httpd/modules
相关的pid文件都在/var/run
相关的二进制文件/usr/sbin /usr/bin
服务脚本:/etc/rc.d/init/httpd
而在/etc/httpd目录下
./conf目录:放的是我们主配置文件
./conf.d目录:保存着可以被分为配置文件一部分的,在启动时被加载的,所以这里面所有.conf结尾的文件都会被当做主配置文件加载时候的一部分一起被加载。
当我们安装好httpd,我们就可以开启这个服务来使用了!
service httpd start service httpd status
开启 httpd服务以及监听
小扩展:
nststat -tnl 我们经常使用这个命令来查看80端口是否已经开启
service httpd reload 而用这条命令在重读配置文件
开启之后我们就可以在自己的浏览器输入我们的ip试试啦!
我们看到了Redhat为我们准备的一个欢迎页,为什么会是这样的呢?
因为其实我们的正确的主页默认在:/var/www/html/目录下的index.html
当我们没有这个文件的时候,他就会自动读取/etc/httpd/conf.d/下的welcome.conf,而这个文件,则就是我们现在看到的主页啦!
==================================================
当然,仅仅能开启,能用,是不行的,我们必须要加入自己的元素,那么怎么做呢?
修改/etc/httpd/conf/httpd.conf文件!
httpd.conf的简单介绍:
首先注意这个配置文件里的所有指令都不区分大小写。但是后面跟的路径将严格区分大小写。
主要配置文件分为三大段:
Section 1 全局配置
Section 2 主服务器的配置
Section 3 关于虚拟主机的
一点一点的来看:
ServerTokens OS
服务器标示,它主要用于定义底下显示什么信息的。(初始化为 OS)
如果想看ServerTokens提供哪些指令,则需要装那个帮助文档包
ServerRoot "/etc/httpd"
主目录装在哪,这个很重要,不能改。后面的相对路径都是根据这个路径来的
Timeout 120
TCP连接的超时时间。(120秒)
KeepAlive Off
是否使用持久连接。
MaxKeepAliveRequests 100
定义最多请求多少对象
KeepAlive Timeout 15
不能让你长期占坑的超时时间。
接下来的这种形式表示它是一个“容器”这个“容器”里的参数只对被定义的一个文件/目录/IP等有效
<IfModuie prefork.c> ##比如这个就是对prefork.c这个c语言的文件有效
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256 服务器最多允许多少个用户连进来
MaxClients 256 最大并发客户端数
MaxRequestsPerChild 4000 每一个进程最多允许多少请求。
</IfModule>
Listen 80
监听在所有地址的80端口上
LoadModule 这个表明了启用什么模块
格式:LoadModule foo_module modules/mod.foo.so
其实就是 LoadModule 模块名 模块位置
Include conf.d/*.conf
这则就是指定了所有在/etc/httpd/conf.d/下的以conf结尾的文件都可以当配置文件的一部分来使用。
User apache
Group apache
这两个定义安全上下文的时候,用户/组访问进来到底以哪个身份来运行。这里默认是apache身份
ServerAdmin root@localhost
服务器管理员的邮箱地址,可以随便的自定义
ServerName www.a.org
服务器的名字。
DocumentRoot "/var/www/html"
定义默认情况下主服务器中网页文件存放在什么地方(这个是需要我们根据实际情况来修改的)
好吧,我们又遇到了一个“容器”,来看看这个容器是干什么用的。
<Directory "/var/www/html"> 定义某个特定目录在被访问的时候,应该有哪些访问特征的
Options Indexes FollowSymLinks 这里定义了 允许映像文件 和 追踪符号链接。其实这两项暂时对我们都没有什么很大的用途,可以将其改成 None
这个选项还有其他的选择比如:
SynLinksifOwnerMatch 属主匹配的时候允许访问
ExecCGI 是否允许执行这个网站的CGI脚本。
MultiViews 多功能视图 可以显示不同的页面功能。
AllowOverride None
是否允许覆盖,这里的None表示不允许任何人覆盖。主要覆盖什么呢?其实就是定义了是否启用下面这俩,访问控制的,如果是None则启用下面的,如果是其他则屏蔽下面的
Order allow,deny # 定义访问控制
定义允许/不允许如何 这里只能定义一种(允许|不允许)的条件, 而哪项写在后面,那项就是默认。
Allow from all 基于客户端来源的访问控制规则,这里直接Allow from all则定义了所有都允许。
比如:定义,拒绝192.168.0.1访问
Order deny,allow
deny from 192.168.0.1
比如:定义只允许 192.168.0.0/24网段访问
Order allow,deny
Allow from 192.168.0.0/24
<Directory> 结束,标志着我们的容器到头了
OK我们继续~
DirectoryIndex index.html index.html.var
指定主页面叫什么名字,有多个则按顺序一个个的检查。
Errorlog logs/error_log
错误日志的存放位置
这里保存着服务器启动的信息,和发生的错误信息
LogLevel warn
日志级别,只有高于或等于这个级别(warn)的日志才会被记录下来
LogFormat "........"
定义日志格式,每一种格式的名称叫什么。
CustomLog logs/access_log combines
定义访问日志,并以什么格式显示,这里我们用定义好的 combines 格式进行显示。
当我们修改完httpd.conf的时候,我们就可以保存退出了,然后需要运行
httpd -t 来检查一下我们的配置文件是否有语法错误。
当一切OK的了之后,我们就可以重读配置文件来使用了!
------------------------------------------------------------------------
那么我们练习一下:
实现以下应用:
1、网页存放位置:/web/html
2、访问控制列表:仅允许 192.168.0.0/24 访问,且不允许索引文件,但允许使用链接文件
3、使用common格式的访问日志
4、设定可以使用主页面文件为index.php、index.jsp和index.html;
5、设定持久连接的保持时间为3秒钟;
6、设定同时监听80和8080端口;
你是否设置成功了呢?是否遇到了这样的问题呢?
[root@station29 conf]# service httpd start Starting httpd: Syntax error on line 282 of /etc/httpd/conf/httpd.conf: DocumentRoot must be a directory [FAILED]
好吧,其实我忘了告诉你一个很重要的知识点:
httpd接受了selinux的控制。
我们在使用配置httpd的功能的时候,必须将selinux临时关掉,因为它会发现你企图修改一个灰常重要的文件,所以它会禁止你的~
如何关掉呢?很简单~
setenforce 0
而我们可以使用 getenforce可以查看selinux的状态
Enforcing 表示开着
Permissive 表示关了……
OK,说了这么多,这条命令输入之后,重新启动一次httpd,看看是不是可以了呢?