rpm -qa | grep httpd //查询系统是否安装了Apache
service httpd start 或者 /etc/init.d/httpd start // 启动Apache服务器, apache2.4版本之后,用 systemctl start httpd.service 代替
默认的配置文件信息
主配置文件:/etc/httpd/conf/http.conf
服务器的根目录(ServerRoot):/etc/httpd
根文档目录(DocumentRoot):/var/www/html //修改这个目录可以改变默认发布网页的位置,即你自己指定的位置,不过还有修改相应的<Directory "/var/www/html">
访问日志文件:/etc/httpd/logs/access_log
错误日志文件:/etc/httpd/logs/error_log
模块存放路径:/etc/httpd/modules
httpd.conf配置文件主要由全局环境、主服务器配置和 虚拟主机3个部分组成
Web服务的基本配置
主目录的路径(DocumentRoot)
默认位置:/var/www/html //可以将需要发布的网页放在这个目录下
默认文档 :(DirectoryIndex) //在浏览器中,输入Web站点的IP地址或域名即显示出来的 Web页面
DirectoryIndex index.html index.htm index.php index.html.var //常见的文档名
配置Apache监听的IP地址和端口号
Listen 80 // 默认监听所有客户端的请求,注释掉这行可以添加指定监听的IP和端口
Listen 192.168.16.177 80
设置相对根目录路径
ServerRoot “/etc/httpd” //如果不是以“\”开头的路径都是相对路径;它一般包含conf和 logs子目录
设置日志文件
ErrorLog logs/error_log //错误日志,可以自定义
CustomLog logs/access_log combined //访问日志 ,可以自定义
ServerAdmin xuehen@qq.com //设置网络管理员的Email地址
ServerName 192.168.100.222:80 //设置Apache服务器自身的主机名
AddDefaultCharset GB2312(避免出现中文乱码) //设置默认字符集
虚拟目录: 如果希望在主目录以外其他目录中进行网页发布,需要设置虚拟目录
<IfModule alias_module>
Alias /abc "/home/abc" // /abc是别名 /home/abc是实际的物理路径,建议用绝对路径
设置目录权限
可以使用<Directory 目录路径>和</Directory>为主目 录或虚拟目录设置权限,称这对标记为容器
<Directory “/var/www/icons”> //在标记里指定需要进行权限控制的绝对目录路径
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Options: //定义目录使用哪些特性
Indexes:允许目录浏览(通常应该禁用此功能)当用户仅指定要访问的目录,但没有指定要访问目录下的那个文件,而且目录下不存在默认文档时,Apache以超文本形式返回目录中的文件和子目录列表
MultiViews:允许内容协商的多重视图 它其实是Apache的一个智能特性。当用户访问目录中一个不存在的对象时,如访问“http://192.168.177/icons/a”,则Apache会查找这个目录下所有a.* 文件,由于icons目录下不存在a.gif文件,因此Apache会将a.gif文件返回给用户,而不是返回出错信息
All:包含除了MultiViews之外的所有特性。如果没有Options语句,默认 为All
ExecCGI:允许执行CGI脚本
FollowSymLinks:可以在该目录中使用符号链接
includes :允许服务器端包含功能
includesNoexec:允许服务器端包含功能,但禁用执行CGI脚本
注意:为了让主目录允许目录浏览,需要删除/etc/httpd/conf.d 目录下的welcome.conf文件,然后重启Apache
AllowOverride:定义位于每个目录下的.htaccess(访问控制)文 件中的指令类型
出于效率和安全的原因,通常应该避免使用.htaccess 时常设置为AllowOverride None
httpd -t :检查语法的合法性 //用于检测Apache语法配置是否正确 httpd -v :查看Apache版本
Apache-2.2 与 Apache-2.4区别
<Directory "/var/www/vhosts/wwwroot"> <Directory "/var/www/vhosts/wwwroot">
Options -Indexes Options-Indexes
AllowOverride All AllowOverride All
Order allow,deny Require all granted
Allow from all </Directory>
</Directory>
总结:
删除了 Order deny,allow 和 Order allow,deny
把 Deny from all 替换成了 Require all denied,
把Allow from all 替换成了 Require all granted
allow, deny:缺省禁止所有客户机的访问,且Allow语句在Deny语句之前被匹配;如果某条件既匹配Deny语句又匹配Allow语句,则Deny语句会起作用(因为Deny语句覆盖了Allow语句)
deny, allow:缺省允许所有客户机的访问,且Deny语句在Allow语句之前被匹配;如果某条件既匹配Deny语句又匹配Allow语句,则Allow语句会起作用(因为Allow语句覆盖了Deny语句)
以下参考:
Options FollowSymLinks
AllowOverride None
Apache服务器可以针对目录进行文档的访问控制,然而访问控制可以通过两种方式来实现,一个是在设置文件 httpd.conf(或access.conf)中针对每个目录进行设置,另一个方法是在每个目录下设置访问控制文件,通常访问控制文件名字为.htaccess。虽然使用这两个方式都能用于控制浏览器的访问,然而使用配置文件的方法要求每次改动后重新启动httpd守护进程,比较不灵活,因此主要用于配置服务器系统的整体安全控制策略,而使用每个目录下的.htaccess文件设置具体目录的访问控制更为灵活方便
Directory语句就是用来定义目录的访问限制的,这里可以看出它的标准语法,为一个目录定义访问限制。上例的这个设置是针对系统的根目录进行的,设置了允许符号连接的选项FollowSymLinks ,以及使用AllowOverride None表示不允许这个目录下的访问控制文件来改变这里进行的配置,这也意味着不用查看这个目录下的相应访问控制文件
由于Apache对一个目录的访问控制设置是能够被下一级目录继承的,因此对根目录的设置将影响到它的下级目录。注意由于AllowOverride None的设置,使得Apache服务器不需要查看根目录下的访问控制文件,也不需要查看以下各级目录下的访问控制文件,直至httpd.conf(或access.conf )中为某个目录指定了
允许Alloworride,即允许查看访问控制文件。由于Apache对目录访问控制是采用的继承方式,如果从根目录就允许查看访问控制文件,那么Apache就必须一级一级的查看访问控制文件,对系统性能会造成影响。而缺省关闭了根目录的这个特性,就使得Apache从httpd.conf中具体指定的目录向下搜寻,减少了搜寻的级数,增加了系统性能。因此对于系统根目录设置AllowOverride None不但对于系统安全有帮助,也有益于系统性能
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
这里定义的是系统对外发布文档的目录的访问设置,设置不同的
AllowOverride选项,以定义配置文件中的目录设置和用户目录下的安全控制文件的关系,而Options选项用于定义该目录的特性
配置文件和每个目录下的访问控制文件都可以设置访问限制,设置文件是由管理员设置的,而每个目录下的访问控制文件是由目录的属主设置的,因此管理员可以规定目录的属主是否能覆盖系统在设置文件中的设置,这就需要使用 啊AllowOverride参数进行设置,通常可以设置的值为:
AllowOverride的设置 对每个目录访问控制文件作用的影响
All 缺省值,使访问控制文件可以覆盖系统配置
None 服务器忽略访问控制文件的设置
Options 允许访问控制文件中可以使用Options参数定义目录的选项
FileInfo 允许访问控制文件中可以使用AddType等参数设置
AuthConfig 允许访问控制文件使用AuthName,AuthType等针对每个用户的认证机制,这使目录属主能用口令和用户名来保护目录 Limit 允许对访问目录的客户机的IP地址和名字进行限制每个目录具备一定属性,可以使用Options来控制这个目录下的一些访问特性设置,以下为常用的特性选项:
Options设置 服务器特性设置
All 所有的目录特性都有效,这是缺省状态
None 所有的目录特性都无效
FollowSymLinks 允许使用符号连接,这将使浏览器有可能访问文档根目录 (DocumentRoot)之外的文档 SymLinksIfOwnerMatch 只有符号连接的目的与符号连接本身为同一用户所拥有时,才允许访问,这个设置将增加一些安全性
ExecCGI 允许这个目录下可以执行CGI程序 Indexes 允许浏览器可以生成这个目录下所有文件的索引,使得在这个目录下没有index.html(或其他索引文件)时,能向浏览器发送这个目录下的文件列表
此外,上例中还使用了Order、Allow、Deny等参数,这是Limit语句中用来根据浏览器的域名和 IP地址来控制访问的一种方式。其中Order定义处理Allow和Deny的顺序,而Allow、Deny则针对名字或IP进行访问控制设置,上例使用allowfrom all,表示允许所有的客户机访问这个目录,而不进行任何限制
UserDir public_html
当在一台Linux上运行Apache服务器时,这台计算机上的所有用户都可以有自己的网页路径,形如
AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec #
# Order allow,deny
# Allow from all # #
# Order deny,allow
# Deny from all
这里可以看到Directory的另一个用法,即可以通过简单的模式匹配方法,针对分布在不同目录下的子目录定义访问控制权限。这样设置就需要Apache服务器对每个路径进行额外的处理,因此就会降低服务器的性能,所以缺省情况并没有打开这种访问限制
用户认证 (建立虚拟目录并配置用户认证)
#htpasswd -c /etc/httpd/conf/webpasswd xuehen (-c:指定创建的文件名,这个文件存在后,就不在用-c)
#vim /etc/httpd/conf/httpd.conf
Alias /abc "/home/abc"
<Directory "/home/abc"> (配置文件修改过之后都要重启服务)
AuthType Basic
AuthName "xuehen's webserver"
AuthUserFile /etc/httpd/webpasswd
Require valid-user
</Directory>
创建虚拟主机(基于IP)( 这个需要多网卡)
在服务器里绑定多个IP地址,然后配置Apache,把多个网站绑定到不同的IP上
<VirtualHost *:80>
ServerAdmin xuehen@qq.com
ServerName 192.168.1.100
DocumentRoot /home/abc
DirectoryIndex index.html
ErrorLog logs/error_log
CustomLog logs/access_log combined
</VirtualHost>
<Directory /home/123/>
Require all granted
</Directory>
虚拟主机基于域名
<VirtualHost *:80>
DocumentRoot /home/123/
ServerName hua.xuehen.com
ErrorLog logs/hua_error
CustomLog logs/hua_access combined
</VirtualHost>
<Directory /home/123/>
Require all granted
</Directory>
<VirtualHost *:80>
DocumentRoot /home/abc/
ServerName meng.xuehen.com
ErrorLog logs/meng_error
CustomLog logs/meng_access combined
</VirtualHost>
<Directory /home/abc/>
Require all granted
</Directory>
注意:在hosts /w/system32/driver/etc/hosts 文件夹中添加IP与域名对应