首页 » LANMP » Apache » 正文

Apache配置以及一些注意事项

1.基本配置

#配置 httpd 开机自启动

#启动 http

写一个 index.php,放到/var/www/html 目录下

现在访问:http://192.168.1.126/
访问不成功,这是因为防火墙阻止了外部访问 80 端口

关闭防火墙服务:

现在再访问就好了。

如网站不在默认的/var/www/html 目录下,则需要如下设定(或者关闭 selinux),不然 apache 访问不了:

 

不建议把网站直接配置到 http.conf 里,而是配置到 extra/httpd-vhosts.conf 里,尤其是本地有多个网站时。需要在 http.conf 里取消 Include conf/extra/httpd-vhosts.conf 这一行前面的注释。然后在extra/httpd-vhosts.conf 里增加:

注意:需要注释掉“Indexes”这个选项,避免列出网站目录下的文件,造成信息泄露(还有一种办法,就是在每个目录下放一个 index.html 文件,有了这个文件,apache 就不会列出目录了。
另外,网站如果使用了伪静态,还需要开启 rewrite 模块。方法是找到 LoadModule rewrite_module modules/mod_rewrite.so 这一行,删掉前面的#号。
不推荐把伪静态规则写在.htaccess 文件。这样做的话,需要设置 AllowOverride All,Apache 在访问每个文件的时候,都要扫描当前目录和所有父目录下的.htaccess 文件。更好的做法是放到VirtualHost 节点里如下配置,比如:

同时,在 directory 节点设置 AllowOverride none。这样的话,Apache 在启动时就能把伪静态规则加载到内存中去,而且也不会去扫描子目录了,提高了性能。

有的时候,伪静态规则即使正确了,也会无法访问,如果我们去看错误日志,就会发现伪静态报了 400 错误。解决这个错误的办法就是把 rewrite 配置块从 VirtualHost 移到 directory 组中。或者把 rewrite 规则写到.htaccess文件中。

当然,错误还可能是由于 rewrite 规则写得比较烂导致的。Rewrite 规则写到 virtualhost 或 directory 节点的区别在于生效的时期不同。
有个小细节需要说明,加载模块可以有两种方式,一种是模块名,一种是模块文件。比如<IfModule rewrite_module>,或者<IfModule mod_rewrite.c>。后面这种文件名的形式是兼容 Apache 2.1之前的写法,Apache 2.1 及以后推荐使用模块名的写法。

为了方便测试环境和正式环境的切换,可以使用 hostAdmin 这个插件(Firefox 和 Chrome 均支持)
比如本地配置了 XXX 网的测试环境,打开 hostAdmin 编辑器,增加一条记录和我本地 apache 配置的 IP 相映射。使用时,同一个地址,只需点一下鼠标即可在正式和测试之间切换。而且,你可以配置同一个域名的多个 IP 切换。浏览器底部状态栏会显示你在用的是哪一个 IP。
还有一个地方需要注意,文件上传目录需要防止 PHP 木马上传和执行,可以做一个规则,禁止此目录的 PHP 被执行,可以这么做:
在可写文件夹的目录下,建一个.htaccess 文件,内容为:

或者写入:

这样再去请求这个目录下的 PHP 文件就不会被执行了,而是被当做普通文件下载。

 

2.Option 选项详解

Options 指令的主要作用是控制特定目录将启用哪些服务器特性。
All
表示除 MultiViews 之外的所有特性。这也是 Options 指令的默认设置。
None
表示不启用任何的服务器特性。
Indexes
如果输入的网址对应服务器上的一个文件目录,而此目录中又没有 DirectoryIndex 指令(例如:DirectoryIndex index.html ),那么服务器会返回由 mod_autoindex 模块生成的一个格式化后的目录列表,并列出该目录下的所有文件。通常应该是禁止的,除非是在做 FTP 和 HTTP 浏f0000;”>FollowSymLinks
符号链接,通常应该开启。用 在使用 rewrite 时,必须开启。这个选项看你很少有人会注意到。官方是这样说的

“To enable the rewrite engine in this context, you need to set “RewriteEngine On” and “Options
FollowSymLinks” must be enabled. If your administrator has disabled override of FollowSymLinks for a
user’s directory, then you cannot use the rewrite engine. This restriction is required for security
reasons.”

MultiViews
允许使用 mod_negotiation 模块提供内容协商的”多重视图”。简而言之,如果客户端请求的路径可能对应多种类型的文件,那么服务器将根据客户端请求的具体情况自动选择一个最匹配客户端要求的文件。例如,在服务器站点的 file 文件夹下中存在名为 hello.jpg 和 hello.html 的两个文件,此时用户输入 Http://localhost/file/hello,如果在 file 文件夹下并没有 hello 子目录,那么服务器将会尝试在 file 文件夹下查找形如 hello.*的文件,然后根据用户请求的具体情况返回最匹配要求的 hello.jpg 或者 hello.html。通常不需要。
SymLinksIfOwnerMatch
服务器仅在符号连接与目标文件或目录的所有者具有相同的用户 ID 时才使用它。简而言之,只有当符号连接和符号连接指向的目标文件或目录的所有者是同一用户时,才会使用符号连接。如果该配置选项位于<Location>配置段中,将会被忽略。
ExecCGI
允许使用 mod_cgi 模块执行 CGI 脚本。
Includes
允许使用 mod_include 模块提供的服务器端包含功能。

Options 指令语法允许在配置选项前加上符号”+”或者”-”,实际上,Apache 允许在一个目录配置中设置多个 Options 指令。不过,一般来说,如果一个目录被多次设置了 Options,则指定特性数量最多的一个 Options 指令会被完全接受(其它的被忽略),而各个 Options 指令之间并不会合并。但是如果我们在可选配置项前加上了符号”+”或”-”,那么表示该可选项将会被合并。所有前面有”+”号的可选项将强制覆盖当前的可选项设置,而所有前面有”-”号的可选项将强制从当前可选项设置中去除。比如下面这样:

#示例 1

#示例 2

注意:混合使用前面带”+”/”-”和前面不带”+”/”-”的同一个选项,也就是说,Options -Indexes FollowSymLinks。
这样是错的,会报这样的错误“ Either all Options must start with + or -, or no Option may”。简单地说,就是要么前面都有符号,要么都没有。

 

3. 目录访问权限配置详解

给指定的文件夹配置对应的访问权限是 Apache 配置中的基础应用,也是 Apache 使用者的必备技能之一。在Apache 配置文件中,给指定目录设置基本的访问权限,主要是靠 Allow、Deny、Order 三个指令的配合使用来实现的。
1.Allow 指令
Allow 指令的作用与其英文单词的含义一致,用于设置允许访问当前目录(及其子目录)或文件的用户范围。例如,Allow from all 表示允许所有用户访问。下面,我们参考更多的例子,以帮助理解(Deny 与 Order 用法一致):

 

2.Deny 指令
同样的,Deny 指令的作用就是“Deny(拒绝) ”,用于设置拒绝访问当前目录或文件的用户范围。例如,Deny from all 表示拒绝所有用户访问。
 

3.Order 指令
在 Apache 的配置文件中,Order 指令用于控制 Allow 指令和 Deny 指令的生效顺序。例如,Order Allow,Deny 表示当前配置段中的 Allow 指令先生效,Deny 指令后生效。
在 Apache 中,Allow 指令和 Deny 指令在同一配置段中都可以有多条。不过,对于 Allow 和 Deny 指令而言,如果先生效的指令与后生效的指令的作用范围存在冲突,则起冲突的作用范围部分以后生效的指令为准。
下面,我们同样参考几个具体的例子以帮助大家理解:

 

4.Require 指令
这是 Apache 2.4 的指令,意在取代 2.2 中的 allow,deny 等老的指令,只不过目前还兼容 Apache 2.2 的老指令。
比如,在 Apache 2.2 中

在 Apache 2.4 中则如下配置

禁止某个 IP 可以写作:

但是实际使用中发现,同一个版本,只是 32 位和 64 位的区别,有些配置下 Require all granted 不能替代 Allow from all,有些就行。具体还没弄清楚。这里提示下,如果遇到 403 问题,可以用回老的配置。

提示:有时候,你在本机配置了网站如 192.168.1.11,你自己可以访问,但是和你在一个局域网里的同事的电脑上不能访问,apache 报了 403,很有可能就是你这里设置的问题。尤其是 Apache 2.4 默认是 Require local,也就是只有本地 IP 才能访问,需要修改为 all granted

 

4.win下Apache 的配置和注意事项

如果用 yum 安装,确实比较简单,会自动配置 Apache。如果是手动安装的话,比如 win 上,建议手动配置,即能加深理解 Apache 的运行机制,也比在 Linux 上手动要轻松。手动的话,只需要注意修改以下几个地方:

Linux 下手动配置也是这么个道理。

如果是 Apache 2.4+win 平台,可能会遇到形如“(OS 64)指定的网络名不再可用。 : AH00341: winnt_accept: Asynchronous AcceptEx failed.”这样的报错。可以如下试试,加入下面的配置到httpd.conf 文件。

再试试命令行中执行:
这个错误,我在家中 win7 32 位+apace 2.4.4 的环境中没有遇到。但是其他人在 64 位 win7 和 win 2003 中均遇到过。另外,我的 Apache 是使用 Apache longue(http://www.apachelounge.com/)版本。根据网上的资料,确实是 Apace 2.4 中引入的新特性对 win 64 位 OS 支持不好导致的。

 

发表评论

正在加载验证码......

请先完成验证