Apache 服务器配置

  • Directory 目录路径

可以使用<Directory 目录路径>和</Directory>这对语句为主目录或虚拟目录设置权限,它们是一对容器语句,必须成对出现,它们之间封装的是具体 的设置目录权限语句,这些语句仅对被设置目录及其子目录起作用。下面是主配置文件中设置目录权限的例子。

<Directory "/var/www/icons">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

(1)定义目录使用哪些特性

Options Indexes MultiViews

Options选项用于定义目录使用哪些特性,包括Indexes、MultiViews和ExecCGI等,如表1所示。

表1   目录特性选项

命    令 说    明
Indexes 允许目录浏览

当客户仅指定要访问的目录,但没有指定要访问目录下的哪个文件,而且目录下不存在默认文档时,Apache以超文本形式返回目录中的文件和子目录列表(虚拟目录不会出现在目录列表中),如图7-8所示

MultiViews 允许内容协商的多重视图

MultiViews其实是Apache的一个智能特性。当客户访问目录 中一个不存在的对象时,如访问“http://192.168.16.177/icons/a”,则Apache会查找这个目录下所有a.*文件。由于 icons目录下存在a.gif文件,因此Apache会将a.gif文件返回给客户,而不是返回出错信息

All All包含了除MultiViews之外的所有特性,如果没有Options语句,默认为All
ExecCGI 允许在该目录下执行CGI脚本
FollowSymLinks 可以在该目录中使用符号连接
Includes 允许服务器端包含功能
IncludesNoExec 允许服务器端包含功能,但禁用执行CGI脚本

让主目录允许目录浏览

细心的用户可能会发现虽然在主目录设置了Indexes权限,且主目录中并不存在默认文档,但访问时并不会出现目录列表,而只出现Apache的测 试页面。解决这个问题的方法很简单,只要将位于/etc/httpd/conf.d/目录下的welcome.conf文件删除后重启Apache即可。

允许目录浏览要小心

一旦定义允许目录浏览,就会将Web站点的文件夹和文件名结构暴露给黑客。目录浏览还会允许黑客浏览文件并掌握服务器配置信息,所以指定该权限往往带来安全性上的隐患。除非有充足的理由要使用目录浏览,否则应该禁用它。

(2)设置.htaccess文件中的指令类型

AllowOverride None

AllowOverride选项用于定义位于每个目录下.htaccess(访问控制)文件中的指令类型。基于安全和效率的原因,虽然可以通 过.htaccess来设置目录的访问权限,但应尽可能地避免使用.htaccess文件,所以一般将AllowOverride设置为”None”,即 禁止使用.htaccess文件,而将目录权限的设置放在主配置文件httpd.conf的<Directory> 和</Directory>语句之间。

(3)设置缺省的访问权限与Allow和Deny语句的处理顺序

Order allow, deny

Order选项用于定义缺省的访问权限与Allow和Deny语句的处理顺序。Allow和Deny语句可以针对客户机的域名或IP地址进行设置,以决定哪些客户机能够访问服务器。Order语句通常设置为以下两种值之一。

allow, deny:缺省禁止所有客户机的访问,且Allow语句在Deny语句之前被匹配。如果某条件既匹配Deny语句又匹配Allow语句,则Deny语句会起作用(因为Deny语句覆盖了Allow语句)。

deny, allow:缺省允许所有客户机的访问,且Deny语句在Allow语句之前被匹配。如果某条件既匹配Deny语句又匹配Allow语句,则Allow语句会起作用(因为Allow语句覆盖了Deny语句)。
下面举一些例子来说明Order、Allow和Deny语句的使用方法。

(4)Require从Apache2.2升级到Apache2.4后,发现原来用来限制部分IP和垃圾网络爬虫的访问控制规则不起作用,查询后才发现,Apache2.4中开始使用mod_authz_host这个新的模块来进行访问控制和其他的授权检查。原来在Apache2.2版本下用以实现网站访问控制的Order,Allow,Deny指令需要替换为新的Require访问控制指令。

Require all granted

允许所有

Require all denied
拒绝所有
Require env env-var [env-var] ...
允许匹配环境变量中任意一个
Require method http-method [http-method] ...
允许特定的HTTP方法(GET/POST/HEAD/OPTIONS)
Require expr expression
允许,表达式为true
Require user userid [ userid ] ...
允许特定用户
Require group group-name [group-name] ...
允许特定用户组
Require valid-user
允许,有效用户
Require ip 192.100 192.168.100 192.168.100.5
允许特定IP或IP段,多个IP或IP段间使用空格分隔


(5)DirectoryIndex Apache默认的检索页面

Apache默认索引页面是index.html,修改成其他文件需要修改httpd.conf文件:

DirectoryIndex index.php index.html

及先检索index.php 再检索index.html

虚拟主机 (Virtual Host) 是在同一台机器搭建属于不同域名或者基于不同 IP 的多个网站服务的技术. 可以为运行在同一物理机器上的各个网站指配不同的 IP 和端口, 也可让多个网站拥有不同的域名.

相关的配置有:Listen  NameVirtualHost  <VirtualHost>

1.  Listen  要监听的端口,多个端口,要写多个Listen;否则Apache启动的时候,不会启动相应的套接字。

   比如  

           Listen 80

           Listen 8080

2  最关键的VirtualHost

   重要:Apache 在接受到请求时,首先会默认第一个VirtualHost,然后再找匹配的,如果没有匹配的,就是第一个VirtualHost起作用。

   因此在httpd.conf中,将<Dicrectory />(这个是所有目录的默认配置)

   和 <Direcotry /opt/lampp/htdocs>的权限,都是deny from all.作为默认。

<VirtualHost *:80>
    #文档的根目录
    DocumentRoot "D:\phpStudy\WWW\cq"
    #域名
    ServerName www.cq.com
    ServerAlias 
    #配置rewrite相关选项
</VirtualHost>


<VirtualHost *:83>
        ServerAdmin webmaster@localhost #服务器返回给客户端的错误信息中包含的管理员邮件地址 
        DocumentRoot /var/www/html/activityAwareness/dist #文档的根目录

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

ServerName 您的服务器有多个主机名,这些主机名解析为一个地址,您希望对www.example.com和www.example.org作出不同的响应。例如:

# Ensure that Apache listens on port 80
Listen 80
<VirtualHost *:80>
    DocumentRoot "/www/example1"
    ServerName www.example.com

    # Other directives here
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/www/example2"
    ServerName www.example.org

    # Other directives here
</VirtualHost>

apache会根据不同的域名导向不同的文件地址。在几乎所有基于名称的虚拟主机情况下,您都希望使用上面的配置。事实上,这种配置唯一不适用的地方是,当您根据不同的IP地址或端口提供不同的内容时。

参考文件1

参考文件2

猜你喜欢

转载自blog.csdn.net/sjpeter/article/details/86606130