zgdy 发表于 2015-8-4 11:20:32

Apache服务器的安装与配置

  文档:http://httpd.apache.org/docs/2.4/
  指令:http://httpd.apache.org/docs/2.4/mod/core.html
  一、配置文件
  语法
  * 主配置文件httpd.conf,更改只有重启服务才会生效
* 配置中一行一个命令,如果要多行一个命令,则最后以\结束,且与该行最后个字符无其它字符或者空白
* 每行注释以#开头,会被忽略,一行命令符后不能再接注释
* 空行空白字符在配置文件中被忽略
* 配置文件错误检测可以通过 Test Configuration来完成(httpd.exe -w -t -f "D:\Software\GreenSoft\Apache\conf\httpd.conf" -d "D:\Software\GreenSoft\Apache\.")
  
模块
  Related ModulesRelated Directives
--------------------------------------------
mod_so
LoadModule
  * httpd基于模块化,编译配置时,默认会把基本的功能模块加载到服务器内核。
* 对于动态加载的模块可以通过LoadModule指令在任何时候完成。
* 可用于条件加载
* Dos命令 httpd.exe -l 可以查看已经加载的模块
  * httpd.exe支持的参数指令
  -D name            : define a name for use indirectives
-d directory       : specify an alternate initial ServerRoot
-f file            : specify an alternate ServerConfigFile
-C "directive"   : process directive before reading config files
-c "directive"   : process directive after reading config files
-n name            : set service name and use its ServerConfigFile
-k start         : tell Apache to start
-k restart         : tell running Apache to do a graceful restart
-k stop|shutdown   : tell running Apache to shutdown
-k install         : install an Apache service
-k config          : change startup Options of an Apache service
-k uninstall       : uninstall an Apache service
-w               : hold open the console window on error
-e level         : show startup errors of level (see LogLevel)
-E file            : log startup errors to file
-v               : show version number
-V               : show compile settings
-h               : list available command line options (this page)
-l               : list compiled in modules
-L               : list available configuration directives
-t -D DUMP_VHOSTS: show parsed settings (currently only vhost settings)
-S               : a synonym for -t -D DUMP_VHOSTS
-t -D DUMP_MODULES : show all loaded modules
-M               : a synonym for -t -D DUMP_MODULES
-t               : run syntax check for config files
-T               : start without DocumentRoot(s) check
  
  指令作用范围
  
Related ModulesRelated Directives
-----------------------------------------







  * 指令范围标签可以指定指令生效的范围,其可以嵌套
* 可以通过在标签中放置多个指令以同时支持多个虚拟主机站点
* 节点配置参见:http://httpd.apache.org/docs/2.4/sections.html
  
  .htaccess文件
  * httpd通过在站点目录里面放置.htaccess文件允许配置分散
* .htaccess的语法与主配置文件一致,对于该配置文件的变更只要请求过来会立即生效
* 可以在.htaccess中放置的指令见:http://httpd.apache.org/docs/2.4/mod/directive-dict.html#Context
* 如果有权限配置主配置,则应避免使用.htaccess文件方式来配置,这种方式影响服务器性能
1)配置.htaccess文件后,httpd会查找每个目录的.htaccess文件,不管你实际有没有使用
2)文档被请求的时候,.htaccess文件每次都会被加载
  3)httpd会在多层目录中查找.htaccess文件,以应用完整的指令。
4).htaccess中地址重写指令中的正则表达式在每次请求的时候重新编译。
5)安全问题,用户在修改.htaccess使管理员对配置的管理失控。只有设置AllowOverride指令才可以使用户使用指定的指令。
  
  
* 在.htaccess中配置指令与在主配置中配置Dirctory块可以达到相同效果,但是后者有更好的性能。
  Contents of .htaccess file in /www/htdocs/example
AddType text/example .exm
  等价于:
  Section from your httpd.conf file
  
    AddType text/example .exm

  
* 禁用.htaccess可以用指令 AllowOverride None
  
  二、Apache目录结构
  根目录
|-- bin       程序命令目录
|-- build
|-- cgi-bin
|-- conf      配置文件目录
|-- error
|-- htdocs    编译安装时站点目录
|-- icons
|-- include
|-- lib
|-- logs       默认日志文件存放包括错误日志(error_log)和访问日志(access_log) tail -f access_log可以随时看访问记录, 里面httpd.pid还会记录主进程号
|-- man
|-- manual
|-- modules   模块目录例如PHPMEMCACHE编译后的模块在这里面
  
  Bin目录
|-- ab                   apache http服务器性能压力测试工具,类似的jmeterloadrunnerwebbench
|-- apachectl            apache的启动命令
|-- apr-1-config
|-- apu-1-config
|-- apxs               apache服务器编译和安装扩展的工具,在进行DSO方式模块编译时会用到例如编译PHP时就用到:--with-apxs2=/usr/local/apache/bin/apxs
|-- checkgid
|-- dbmmanage
|-- envvars
|-- envvars-std
|-- htcacheclean         清理磁盘缓存区的命令,一般少用
|-- htdbm
|-- htdigest
|-- htpasswd             建立更新基本认证文件例如配置nagio监控时候会用到
|-- httpd                为apache的控制命令程序,apachectl执行的时候会调用到httpd
|-- httxt2dbm
|-- logresolve
  
Conf目录
|-- extra                              辅助apache配置文件
|   |-- httpd-autoindex.conf
|   |-- httpd-dav.conf                   dav支持配置
|   |-- httpd-default.conf               apache相关服务配置 如超时时间 保持连接时间
|   |-- httpd-info.conf
|   |-- httpd-languages.conf             语言支持
|   |-- httpd-manual.conf
|   |-- httpd-mpm.conf                  服务器池管理,如apache模式配置 连接等
|   |-- httpd-multilang-errordoc.conf
|   |-- httpd-ssl.conf                  支持SSL加密配置
|   |-- httpd-userdir.conf
|   |-- httpd-vhosts.conf               虚拟机配置文件
|-- httpd.conf                            主配置文件
|-- magic
|-- mime.types
|-- original
  
  三、httpd.conf主配置文件常见配置
  
ServerRoot "/usr/local/apache2.2.22"   apache安装目录
Listen 80                              apache端口


User daemon                              apache运行用户
Group daemon                           apache运行组


ServerAdmin you@example.com            管理员邮箱
DocumentRoot "/usr/local/apache2.2.22/htdocs"   站点目录,注意最后不要加/线
                              根目录权限
    Options FollowSymLinks               可以使用符号链接
    AllowOverride None
    Order deny,allow
    Deny from all

目录权限 注意Indexes的作用是允许浏览目录
    Options Indexes FollowSymLinks
    AllowOverride None                     禁止用户对目录配置文件.htaccess修改,一般为none
    Order allow,deny
    Allow from all   

  
    DirectoryIndex index.html               站点目录首页文件多个文件用空格隔开

                             防止WEB用户查看以.ht开头的隐藏文件
    Order allow,deny
    Deny from all
    Satisfy All

  ErrorLog "logs/error_log"                        错误日志
LogLevel warn                                    警告级别

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 复合日志格式
    LogFormat "%h %l %u %t \"%r\" %>s %b" common    常规日志格式
   
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio复合日志格式
   
    CustomLog "logs/access_log" common   默认访问日志格式

  
    ScriptAlias /cgi-bin/ "/usr/local/apache2.2.22/cgi-bin/"CGI别名配置



              CGI权限访问路径
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all

DefaultType text/plain   定义不能确定MIME类型时候使用默认MIME类型,如果服务主要包含text或HTML ,text/plain是一个好选择
  
    TypesConfig conf/mime.types
    AddType application/x-compress .Z          允许信息在传输中使用mosaic/x 2.1+解压信息但不是所有浏览器都支持
    AddType application/x-gzip .gz .tgz

  
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin

  
  四、虚拟主机http_vhost.conf配置文件
  NameVirtuaHost *:80表示基于名称的虚拟主机*:80表示监听本机所有IP的80端口上提供HTTP服务,*可以设置为具体IP

serveradmin 管理员邮箱
servername域名
serveralias 别名      可以设置多个域名指向同一个站点
errorlog    错误日志
customlog   访问日志

  
虚拟主机的配置是局部优先原则,也就是http_vhost.conf配置了,那么就不会从主配置文件http.conf中读取了
  
五、修改Apache默认站点目录
  1、文档路径更改
DocumentRoot "D:/Software/GreenSoft/Apache/htdocs"
改成
DocumentRoot "E:/wwwroot/Apache"
  2、目录更改

改成

  
  
六、配置多站点方式
  方式一 拷贝配置文件,安装新服务
1、将httpd.conf复制一个新的文件httpdNew.conf
2、将httpdNew.conf中的侦听端口改成未使用的自定义的端口。 Listen:8111
3、将httpdNew.conf中的网站目录 DocumentRoot "原绝对路径" 改成 DocumentRoot "新绝对路径"
4、将httpdNew.conf中的权限设置改成
5、安装新服务。Dos下进到Apache安装目录下的Bin目录,输入命令 httpd.exe -k install -n "服务名" -f "X:\Apache安装目录根目录\conf\httpdNew.conf"
6、启动新服务。输入命令 httpd -k start
  
方式二 添加新端口,新虚拟目录的方式
1、httpd.conf在之前侦听端口的基础上,加上新侦听端口 Listen 8333.这样Apache有多个侦听端口
2、httpd.conf中加入虚拟主机支持。加入指令:NameVirtualHost *
3、找到 definition注释所在位置。加入指令:

ServerName localhost
DocumentRoot "虚拟站点新绝对路径"

  
  方式三 建立虚拟主机方式
1、修改虚拟主机配置文件 X:\Apache安装目录根目录\conf\extra\httpd-vhosts.conf文件.加入配置:

    DocumentRoot "虚拟站点新绝对路径"
    ServerName url.com
    ErrorLog "虚拟站点新绝对路径/error.log"

  2、修改主配置文件X:\Apache安装目录根目录\conf\httpd.conf。去掉#Include conf/extra/httpd-vhosts.conf前面的#号
3、修改主配置文件X:\Apache安装目录根目录\conf\httpd.conf。加目录权限:

    Options Indexes FollowSymLinks MultiViews ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all

4、重启对应的Apache服务
  
  七、配置Apache支持Url重写
  1、加载重写模块。httpd.conf中找到#LoadModule rewrite_module modules/mod_rewrite.so,去掉#号
2、httpd.conf中找到AllowOverride None,改成 AllowOverride All (All表示整台服务器上都支持URL规则重写)
3、httpd.conf加入

Options FollowSymLinks
AllowOverride All

4、重启Apache服务器并启动服务
5、在URL重写的网站目录下放一个.htaccess文件,文件名是.htaccess。如无此文件或此文件中没定义任何关于URL重写的规则,则重写不会生效。
6、在.htaccess中通过正则表达式映射需要伪静态的页面。URL正则表达式如下:
RewriteEngine on
RewriteRule index.html index.php
RewriteRule (\d+).html$ info\.php\?infoid=$1
效果为:www.abc.cn/info/info.php?infoid=100 映射为 www.abc.cn/info/100.html
  
可用于以下用途:
1、http错误的自定义页。格式 ErrorDocument 错误代码 /目录名/名.扩展名
ErrorDocument 404 /errors/notfound.html
ErrorDocument 401 "你权限访问该页面!"
  2、拒绝某IP的访问
order allow,deny
deny from 210.10.56.32
deny from 219.5.45.
deny from www.baidu.com
allow from all
  3、保护.htaccess文档
4、Url转向(文档迁移,目录更改,显示友好易记的url)。格式:
Redirect /旧目录/旧文档名 新文档名
Redirect 旧目录 新目录
  5、更改默认主页
DirectoryIndex 新的缺省名
DirectoryIndex filename.html index.cgi index.pl default.htm
  6、反盗链
RewriteEngine on
RewriteCond %{ HTTP_REFERER } !^$
RewriteCond %{ HTTP_REFERER } !^http://(www.)?domain.com/.*$
RewriteRule .(gif&line;jpg)$ -
RewriteRule .(gif&line;jpg)$ http://www.mydomain.com/替代名
  
  八、配置反盗链
1、参见 配置Apache支持Url重写 节,配置Apache支持url重写
2、在站点的.htaccess文件中加入
RewriteEngine on
#允许空“HTTP_REFERER”的访问
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !nobing.cn
#定义被盗链时替代的图片
RewriteRule .*\.(gif|jpg)$ http://nobing.cn/no.png
  说明:
R 就是转向的意思
NC 指的是不区分大小写
L 的作用是指明本次转向到此结束,后续的转向不受先前判断语句的影响
  多个扩展名用|分隔
  
  
九、配置缓存

LoadModule cache_module modules/mod_cache.so   
LoadModule mem_cache_module modules/mod_mem_cache.so   
   
    #默认缓存有效期(秒)
    CacheDefaultExpire 3600
    CacheMaxExpire 86400
    CacheLastModifiedFactor 0.1
   
    #禁止缓存某些特定的URL   
    CacheDisable /local_files   
    #使用特定的存储类型缓存某些特定的URL   
    CacheEnable mem /manual   
    CacheEnable fd /images   
    CacheEnable disk /   
      
      CacheEnable mem /   
      MCacheSize 8192
      MCacheMaxObjectCount 10000
      MCacheMinObjectSize 1
      MCacheMaxObjectSize 51200
      #MCacheRemovalAlgorithm LRU   
      

  
  
  本博所有文章未标明转载的情况下都属于个人原创,转载请注明来源。版权所有,请勿用于商业用途。欢迎大家交流沟通!
  作者:茶沫  博客:http://www.iyunv.com/janas/  邮件:nofulls@gmail.com
页: [1]
查看完整版本: Apache服务器的安装与配置