zoukankan      html  css  js  c++  java
  • 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 Modules Related Directives
    --------------------------------------------
    mod_so <IfModule>
    LoadModule

    * httpd基于模块化,编译配置时,默认会把基本的功能模块加载到服务器内核。
    * 对于动态加载的模块可以通过LoadModule指令在任何时候完成。
    * <IfModule>可用于条件加载
    * Dos命令 httpd.exe -l 可以查看已经加载的模块

    * httpd.exe支持的参数指令

    -D name : define a name for use in <IfDefine name> directives
    -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 Modules Related Directives
    -----------------------------------------
    <Directory>
    <DirectoryMatch>
    <Files>
    <FilesMatch>
    <Location>
    <LocationMatch>
    <VirtualHost>

    * 指令范围标签可以指定指令生效的范围,其可以嵌套
    * 可以通过在<VirtualHost>标签中放置多个指令以同时支持多个虚拟主机站点
    * 节点配置参见: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

    <Directory /www/htdocs/example>
    AddType text/example .exm
    </Directory>


    * 禁用.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 模块目录 例如PHP MEMCACHE编译后的模块在这里面

    Bin目录
    |-- ab apache http服务器性能压力测试工具,类似的jmeter loadrunner webbench
    |-- 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端口
    <IfModule !mpm_netware_module>
    <IfModule !mpm_winnt_module>
    User daemon apache运行用户
    Group daemon apache运行组
    </IfModule>
    </IfModule>
    ServerAdmin you@example.com 管理员邮箱
    DocumentRoot "/usr/local/apache2.2.22/htdocs" 站点目录,注意最后不要加/线

    <Directory /> 根目录权限
    Options FollowSymLinks 可以使用符号链接
    AllowOverride None
    Order deny,allow
    Deny from all
    </Directory>
    <Directory "/usr/local/apache2.2.22/htdocs"> 目录权限 注意Indexes的作用是允许浏览目录
    Options Indexes FollowSymLinks
    AllowOverride None 禁止用户对目录配置文件.htaccess修改,一般为none
    Order allow,deny
    Allow from all
    </Directory>

    <IfModule dir_module>
    DirectoryIndex index.html 站点目录首页文件多个文件用空格隔开
    </IfModule>

    <FilesMatch "^\.ht"> 防止WEB用户查看以.ht开头的隐藏文件
    Order allow,deny
    Deny from all
    Satisfy All
    </FilesMatch>

    ErrorLog "logs/error_log" 错误日志
    LogLevel warn 警告级别
    <IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 复合日志格式
    LogFormat "%h %l %u %t \"%r\" %>s %b" common 常规日志格式
    <IfModule logio_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio 复合日志格式
    </IfModule>
    CustomLog "logs/access_log" common 默认访问日志格式
    </IfModule>

    <IfModule alias_module>
    ScriptAlias /cgi-bin/ "/usr/local/apache2.2.22/cgi-bin/" CGI别名配置
    </IfModule>
    <IfModule cgid_module>
    </IfModule>

    <Directory "/usr/local/apache2.2.22/cgi-bin"> CGI权限访问路径
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
    </Directory>
    DefaultType text/plain 定义不能确定MIME类型时候使用默认MIME类型,如果服务主要包含text或HTML ,text/plain是一个好选择

    <IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-compress .Z 允许信息在传输中使用mosaic/x 2.1+解压信息 但不是所有浏览器都支持
    AddType application/x-gzip .gz .tgz
    </IfModule>

    <IfModule ssl_module>
    SSLRandomSeed startup builtin
    SSLRandomSeed connect builtin
    </IfModule>

    四、虚拟主机http_vhost.conf配置文件

    NameVirtuaHost *:80 表示基于名称的虚拟主机 *:80表示监听本机所有IP的80端口上提供HTTP服务,*可以设置为具体IP
    <VirtualHost *:80>
    serveradmin 管理员邮箱
    servername 域名
    serveralias 别名 可以设置多个域名指向同一个站点
    errorlog 错误日志
    customlog 访问日志
    </VirtualHost>


    虚拟主机的配置是局部优先原则,也就是http_vhost.conf配置了,那么就不会从主配置文件http.conf中读取了


    五、修改Apache默认站点目录

    1、文档路径更改
    DocumentRoot "D:/Software/GreenSoft/Apache/htdocs"
    改成
    DocumentRoot "E:/wwwroot/Apache"

    2、目录更改
    <Directory "D:/Software/GreenSoft/Apache/htdocs">
    改成
    <Directory "E:/wwwroot/Apache">


    六、配置多站点方式

    方式一 拷贝配置文件,安装新服务
    1、将httpd.conf复制一个新的文件httpdNew.conf
    2、将httpdNew.conf中的侦听端口改成未使用的自定义的端口。 Listen:8111
    3、将httpdNew.conf中的网站目录 DocumentRoot "原绝对路径" 改成 DocumentRoot "新绝对路径"
    4、将httpdNew.conf中的权限设置 <Directory "原绝对路径" > 改成 <Directory "新绝对路径" >
    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、找到<VirtualHost> definition注释所在位置。加入指令:
    <VirtualHost localhost:8333>
    ServerName localhost
    DocumentRoot "虚拟站点新绝对路径"
    </VirtualHost>

    方式三 建立虚拟主机方式
    1、修改虚拟主机配置文件 X:\Apache安装目录根目录\conf\extra\httpd-vhosts.conf文件.加入配置:
    <VirtualHost 127.0.1.1:8222>
    DocumentRoot "虚拟站点新绝对路径"
    ServerName url.com
    ErrorLog "虚拟站点新绝对路径/error.log"
    </VirtualHost>

    2、修改主配置文件X:\Apache安装目录根目录\conf\httpd.conf。去掉#Include conf/extra/httpd-vhosts.conf前面的#号
    3、修改主配置文件X:\Apache安装目录根目录\conf\httpd.conf。加目录权限:
    <Directory "虚拟站点新绝对路径">
    Options Indexes FollowSymLinks MultiViews ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    </Directory>
    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加入
    <Directory "站点绝对路径">
    Options FollowSymLinks
    AllowOverride All
    </Directory>
    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/.*$ [NC]
    RewriteRule .(gif&line;jpg)$ - [F]
    RewriteRule .(gif&line;jpg)$ http://www.mydomain.com/替代名 [R,L]

    八、配置反盗链
    1、参见 配置Apache支持Url重写 节,配置Apache支持url重写
    2、在站点的.htaccess文件中加入
    RewriteEngine on
    #允许空“HTTP_REFERER”的访问
    RewriteCond %{HTTP_REFERER} !^$ [NC]
    RewriteCond %{HTTP_REFERER} !nobing.cn [NC]
    #定义被盗链时替代的图片
    RewriteRule .*\.(gif|jpg)$ http://nobing.cn/no.png [R,NC,L]

    说明:
    R 就是转向的意思
    NC 指的是不区分大小写
    L 的作用是指明本次转向到此结束,后续的转向不受先前判断语句的影响

    多个扩展名用|分隔


    九、配置缓存

    LoadModule cache_module modules/mod_cache.so
    LoadModule mem_cache_module modules/mod_mem_cache.so
    <IfModule mod_cache.c>
    #默认缓存有效期(秒)
    CacheDefaultExpire 3600
    CacheMaxExpire 86400
    CacheLastModifiedFactor 0.1

    #禁止缓存某些特定的URL
    CacheDisable /local_files
    #使用特定的存储类型缓存某些特定的URL
    CacheEnable mem /manual
    CacheEnable fd /images
    CacheEnable disk /
    <IfModule mod_mem_cache.c>
    CacheEnable mem /
    MCacheSize 8192
    MCacheMaxObjectCount 10000
    MCacheMinObjectSize 1
    MCacheMaxObjectSize 51200
    #MCacheRemovalAlgorithm LRU
    </IfModule>
    </IfModule>

    本博所有文章未标明转载的情况下都属于个人原创,转载请注明来源。版权所有,请勿用于商业用途。欢迎大家交流沟通!

    作者:茶沫  博客:http://www.cnblogs.com/janas/  邮件:nofulls@gmail.com

    专注于机器学习、前端相关邻域。关注 全栈深入 公众号查看更多硬核文章。
  • 相关阅读:
    Java并发编程原理与实战九:synchronized的原理与使用
    Java并发编程原理与实战八:产生线程安全性问题原因(javap字节码分析)
    Java并发编程原理与实战七:线程带来的风险
    Java并发编程原理与实战六:主线程等待子线程解决方案
    Java并发编程原理与实战五:创建线程的多种方式
    Java并发编程原理与实战四:线程如何中断
    Java并发编程原理与实战三:多线程与多进程的联系以及上下文切换所导致资源浪费问题
    Java并发编程原理与实战二:并行&并发&多线程的理解
    ConcurrentHashMap 产生NullPointerException
    Java并发编程原理与实战一:聊聊并发
  • 原文地址:https://www.cnblogs.com/janas/p/2659230.html
Copyright © 2011-2022 走看看