Apache安装使用笔记
下载
-
打开网页http://httpd.apache.org/,点击
在download页面点击
然后在新页面选择
在新窗口选择
选择32位或64位apache下载,此处下载64位的apache:
httpd-2.4.34-o110h-x64-vc14.zip
-
安装
将httpd-2.4.34-o110h-x64-vc14.zip解压开到某个目录,打开readme_first.html会有完整的介绍。下图是apache支持的操作系统
下载Visual C++ 2015 x64 Redistribution并安装
-
启动服务
-
将apache加入到windows服务
到D:\green\Apache24\bin目录下执行httpd -k install,会在windows服务中看见apache的服务项
红色部分为测试apache启动,有错误是因为apache目录在httpd.conf中指定的不对,打开httpd.conf,找到38行,将Define SRVROOT "/Apache24"修改为实际目录
Define SRVROOT "D:/green/Apache24"
-
Apache命令
Start Apache httpd –k start
Stop Apache
httpd -k stop
Restart Apache
httpd -k restart
Uninstall Apache Service
httpd -k uninstall
Test Config Syntax
httpd -t
Version Details
httpd -V
Command Line Options List
httpd -h
-
配置
-
Listen 配置
Listen主要侦听web服务端口状态,默认为:80,即侦听所有的地址的80端口,注意这里也可以写成IP地址的侦听形式,不写即默认的地址:0.0.0.0
-
ServerRoot 配置
-
Apache服务管理员通知邮箱地址
此选项主要用指定Apache服务管理员通知邮箱地址,选择默认值即可,如果有真实的邮箱地址也可以设置此值
-
Apache根目录访问权限设置
此选项主要是针对用户对根目录下所有的访问权限控制,默认Apache对根目录访问都是拒绝访问
-
Apache的默认网站根目录设置及访问控制
-
Apache的默认首页设置
-
虚拟目录配置
-
修改httpd-vhost.conf
打开Apache24\conf\extra\httpd-vhost.conf文件,添加如下内容:
<VirtualHost *:8090>
DocumentRoot "d:\wwwroot"
ServerName www.xframe.com
ServerAlias xframe.com
<Directory "d:\wwwroot">
Options Indexes FollowSymLinks MultiViews
AllowOverride none
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
-
添加端口监听
在httpd.conf中找到Listen 80,在Listen 80下面添加Listen 8090,如果虚拟目录不需要80以外的端口就不需要这样做。
-
打开对虚拟机的支持
在httpd.conf中找到Include conf/extra/httpd-vhosts.conf,将前面的#号删掉
-
修改hosts
打开C:\Windows\System32\drivers\etc中的hosts文件,添加如下内容:
127.0.0.1 xframe.com
::1 xframe.com
关闭该文件,打开cmd窗口,执行如下命令刷新dns缓存:
ipconfig /flushdns
-
重启服务并访问
重新启动apache,在5.1中,我们建立的虚拟机对应的物理目录为d:\wwwroot,虚拟主机名为xframe.com,我们在该目录下拷贝一个index.html文件,用如下任何地址都可以进行访问了:
-
apache的AllowOverride以及Options使用详解
AllowOverride参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件,如果设置为All,那么所有在.htaccess文件里有的指令都将被重写。对于AllowOverride,还可以对它指定如下一些能被重写的指令类型.
通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置。从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override ,即<Directory />
AllowOverride None
</Directory>在 AllowOverride 设置为 None 时, .htaccess 文件将被完全忽略。当此指令设置为 All 时,所有具有 ".htaccess" 作用域的指令都允许出现在 .htaccess 文件中。
而对于 URL rewrite 来说,至少需要把目录设置为< Directory /myblogroot/>
AllowOverride FileInfo
< /Directory>2.在要支持url rewirte的目录启用 Options FollowSymLinks和AllowOverride All
Alias /php "c:/web/php/"
<Directory "c:/web/php/">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
这样通过http://localhost:8080/php/访问时,/php/和其下面的子目录将支持url rewrite1 AuthConfig 允许使用所有的权限指令,他们包括AuthDBMGroupFile AuthDBMUserFile AuthGroupFile AuthName AuthTypeAuthUserFile和Require
2 FileInfo 允许使用文件控制类型的指令。它们包括AddEncoding AddLanguage AddType DEfaultType ErrorDocument LanguagePriority
3 Indexes 允许使用目录控制类型的指令。它们包括AddDescription AddIcon AddIconByEncoding AddIconByType DefaultIcon DirectoryIndex FancyIndexing HeaderName IndexIgnore IndexOptions ReadmeName
4 Limit 允许使用权限控制指令。它们包括Allow Deny和Order
5 Options 允许使用控制目录特征的指令.他们包括Options 和XBitHack
Options
1 All 准许以下除MultiViews以外所有功能
2 MultiViews 允许多重内容被浏览,如果你的目录下有一个叫做foo.txt的文件,那么你可以通过/foo来访问到它,这对于一个多语言内容的站点比较有用
3 Indexes 若该目录下无index文件,则准许显示该目录下的文件以供选择
4 IncludesNOEXEC 准许SSI,但不可使用#exec和#include功能
5 Includes 准许SSI
6 FollowSymLinks 在该目录中,服务器将跟踪符号链接。注意,即使服务器跟踪符号链接,它也不会改变用来匹配不同区域的路径名,如果在<Local>;标记内设置,该选项会被忽略
7 SymLinksIfOwnerMatch 在该目录中仅仅跟踪本站点内的链接
8 ExecCGI 在该目录下准许使用CGI
-
使用require指令进行访问控制
从Apache2.2升级到Apache2.4后,发现原来用来限制部分IP和垃圾网络爬虫的访问控制规则不起作用,查询后才发现,Apache2.4中开始使用mod_authz_host这个新的模块来进行访问控制和其他的授权检查。原来在Apache2.2版本下用以实现网站访问控制的Order,Allow,Deny指令需要替换为新的Require访问控制指令。
注意:使用require指令时,需要在指令外添加<RequireAll></RequireAll>标签对,否则重启Apache2.4加载规则时将出现错误:" negative Require directive has no effect in <RequireAny> directive "。
下面直接给出一些实例对Require指令的使用进行说明:
-
允许所有访问请求
Apache2.4下的配置:
<Directory xxx/www/yoursite>
<RequireAll>
Require all granted
</RequireAll>
</Directory>
-
拒绝所有访问请求
<Directory xxx/www/yoursite>
<RequireAll>
Require all denied
</RequireAll>
</Directory>
-
只允许来自特定域名主机的访问请求,其他请求将被拒绝
<Directory xxx/www/yoursite>
<RequireAll>
Require host google.com
</RequireAll>
</Directory>
-
只允许来自特定IP或IP段的访问请求,其他请求将被拒绝
<Directory xxx/www/yoursite>
<RequireAll>
Require ip 192.120 192.168.100 192.168.1.1
</RequireAll>
</Directory>
-
允许所有访问请求,但拒绝来自特定IP或IP段的访问请求(阻止恶意IP或恶意爬虫网段的访问)
<Directory xxx/www/yoursite>
<RequireAll>
Require all granted
Require not ip 192.168.1.1
Require not ip 192.120 192.168.100
</RequireAll>
</Directory>
-
允许所有访问请求,但拒绝某些User-Agent的访问请求(通过User-Agent屏蔽垃圾网络爬虫)
使用mod_setenvif通过正则表达式匹配来访请求的User-Agent,并设置内部环境变量BADBOT,最后拒绝BADBOT的访问请求。
<Directory xxx/www/yoursite>
SetEnvIfNoCase User-Agent ".*(FeedDemon|JikeSpider|AskTbFXTV|CrawlDaddy|Feedly|Swiftbot|ZmEu|oBot).*" BADBOT
SetEnvIfNoCase User-Agent "brandwatch" BADBOT
SetEnvIfNoCase User-Agent "rogerbot" BADBOT
<RequireAll>
Require all granted
Require not env BADBOT
Require not ip 192.168.100.1
</RequireAll>
</Directory>
-
其它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段间使用空格分隔
-
apache禁止列目录
- 两步:
- 1、修改Apache配置文件httpd.conf,把Options Indexes FollowSymLinks改成Options FollowSymLinks
- 2、如果配置了虚拟目录,则打开httpd-vhosts.conf,将你的虚拟目录下的Options Indexes FollowSymLinks MultiViews 修改为Options FollowSymLinks MultiViews
-