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文件,用如下任何地址都可以进行访问了:

    http://loclahost:8090

    http://127.0.0.1:8090

    http://xframe.com:8090

  • apache的AllowOverride以及Options使用详解

    AllowOverride参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件,如果设置为All,那么所有在.htaccess文件里有的指令都将被重写。对于AllowOverride,还可以对它指定如下一些能被重写的指令类型.

    通常利用Apacherewrite模块对 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 FollowSymLinksAllowOverride 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 rewrite

    1  AuthConfig  允许使用所有的权限指令,他们包括AuthDBMGroupFile AuthDBMUserFile  AuthGroupFile  AuthName AuthTypeAuthUserFileRequire

    2  FileInfo    允许使用文件控制类型的指令。它们包括AddEncoding AddLanguage  AddType  DEfaultType ErrorDocument LanguagePriority

    3  Indexes     允许使用目录控制类型的指令。它们包括AddDescription  AddIcon  AddIconByEncoding AddIconByType  DefaultIcon  DirectoryIndex  FancyIndexing  HeaderName  IndexIgnore  IndexOptions ReadmeName

    4  Limit       允许使用权限控制指令。它们包括Allow DenyOrder

    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 #允许特定IPIP段,多个IPIP段间使用空格分隔

    复制代码

     

     

     

     

     

     

猜你喜欢

转载自www.cnblogs.com/simon-xie/p/9478353.html