设为首页 收藏本站
查看: 1961|回复: 0

[经验分享] Apache配置文件重要指令详解

[复制链接]

尚未签到

发表于 2018-11-18 09:55:17 | 显示全部楼层 |阅读模式
  写在前面
    在运维的工作中很大一部分的时间都在和Web服务器打交道。当前在开源web服务器端的软件有两大巨头,其一为Apache,二为Nginx。近年来Nginx的市场占有率逐年递增。但是,作为一个合格的运维工程师,要熟练的掌握这两种服务端软件的配置。

  Apache配置文件详解
  
  httpd配置文件主要有指令和容器两种组成。容器指令一般只在容器中生效。

  ServerRoot指令
    ServerRoot为Apache的安装家目录,rpm安装默认为/etc/httpd
  Listen指令
    设置服务器监听的IP以及端口号,默认监听服务本机所有ip地址的80端口。
    语法:Listen[ip:]port    #配置文件中可以多次使用Listen指令,但是要至少使用一次。
  DocumentRoot指令
    设置web服务器的资源根目录,也就是客户端访问网站的根路径。默认为/var/www/html
  持久链接配置
    持久链接为连接建立之后,每个资源获取完成后不会断开连接,而是继续等待其他的请求完成。断开有两个条件,数量限制和时间限制。
    时间限制:在上一个数据包发送完毕,间隔一个固定时间,如果超过这个时间,连接被释放。
    数量限制:如果连续请求多个资源,资源数量达到某个阈值,连接会被释放,让后重新建立连接。
  KeepAlive  On   #启用持久链接
  KeepAliveTimeout  15 #等待同一客户端在同一连接上的下一个请求的秒数。
  KeepAliveRequests  100 #在持久连接中允许的最大请求数。设置为0,允许无限数量。
  可以使用telnet 协议演示持久链接的效果。
  telnet  172.18.11.6   
  GET  / http/1.1
  host:172.18.11.6   #两次回车,构建http请求报文,如果是持久连接,在获取页面后,telnet不断开  
  LoadModule指令
  
    Apache的DSO机制实现,动态的加载卸载模块,rpm安装默认启用该功能,如果编译安葬需要开启--enable-so将mod_so模块一静态方式集成在core模块中。支持的模块一般存储在SerRoot/modules目录下。加载模块时,只需把模块前面的注释取消即可,卸载反之。
    语法:LoadModule模块(模块中定义,不可变更) 模块的路径名称(相对ServerRoot的路径)。
  [root@centos6  conf]# httpd -l|grep mod_so #httpd为当前工作模式,查看当前版本是否支持动态加载/卸载模块
  [root@centos6  conf]# httpd.worker -M  #httpd.woker为当前的工作模式,查看当前已经加载的模块
  
Include指令
    在配置文件中有Include conf.d/*.conf 指令,系统默认加载在ServerRoot/conf.d 目录下所有.conf结尾的配置文件。
  IfModule容器
    该容器中的指令只有在对应的模块被加载时才会被处理。该指令语法指令
    以为例:
    #只有在使用prefork模块时才会生效
  StartServers       8   #服务启动时启动的服务进程数,除了出进程之外,开启8个子进程来服务
  MinSpareServers    5   #最小空闲进程数
  MaxSpareServers   20   #最大空闲进程数   (假如有200个客户端同时请求,又潮水般退去,这时空闲的200个进程不会全部被存在,而是释放至最大空闲进程数)
  ServerLimit      256   #服务器进程数量最大值
  MaxClients       256   #最大并发连接数
  MaxRequestsPerChild  4000 #一个服务器进程最多能够响应所少次请求。一个进程处理完请求后不会被释放,而是加入空闲进程队列,一个进程最多能够被重复使用4000次,然后系统会杀掉这个进程。
  
  
    #使用worker.c工作模式下生效
  StartServers         4     #服务启动时启动的服务进程数,又受
  MaxClients         300   #最大并发连接数
  MinSpareThreads     25     #最小空闲线程数,当全部线程都被用于处理请求时,系统会再次创建最小个线程等待用户请求
  MaxSpareThreads     75    #最大空闲线程数,
  ThreadsPerChild     25   #一个进程可以创建的线程数
  MaxRequestsPerChild  0   #一个进程最多能够响应请求的最大次数,0表示无上限
  
  ServerTokens指令
    显示服务器版本信息
  ServerTokens  Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
  ServerTokens  Prod[uctOnly]  Server: Apache
  ServerTokens  Major: Server: Apache/2
  ServerTokens  Minor: Server: Apache/2.0
  ServerTokens  Min[imal]: Server: Apache/2.0.41
  ServerTokens  OS: Server: Apache/2.0.41 (Unix)
  ServerTokens  Full (or not specified): Server: Apache/2.0.41
  (Unix)  PHP/4.2.2 MyMod/1.2
  This  setting applies to the entire server and cannot be
  enabled  or disabled on a virtualhost-by-virtualhost basis.
  After  version 2.0.44, this directive also controls the
  information  presented by the ServerSignature directive.
  建议使用:ServerTokens  Prod
  ServerName指令
    设置本机的主机名称以及端口,一般在URL的重定向或者虚拟主机中用到。
  Options指令
    该指令为特定目录设置的选项,语法格式:Options [+|-]选项  [[+|-] 选项]。选项有以下几种
  None:不启用任何功能
  All:开启除MultiViews之外的所有功能
  ExecCGI:允许执行该目录下的所有CGI脚本
  FollowSymlinks:允许指定目录下的文件链接到目录外的文件或者目录
  Indexes:如果URL对应的目录下没有DirectoryIndex指定的首页文件,则显示该目录下的文件索引
  Order指令  
    控制默认访问状态以及allow和deny的次序。
    Orderallow,deny 先检查允许,再检查拒绝,有冲突时拒绝优先
    Orderdeny,allow  先检查拒绝,在检查允许,有冲突时允许优先
  Order  deny,allow
  Deny  from all 拒绝所有访问
     
  Order  deny,allow
  deny  172.18
  allow  172.18.11.6
  拒绝除172.18.11.6之外所有172.18网段的主机访问
  支持的网络形式:
      172.18
      172.18.0.0
      172.18.0.0/16
      172.18.0.0/255.255.0.0   
  AllowOverride指令
    设置与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName指定)文件中,覆盖之前的配置指令,该指令只能使用在容器中
  AllowOverride  All 所有指令都有效
  AllowOverride  None .htaccess文件无效
  AllowOverride  AuthConfig Indexes 除了AuthConfig Indexes的其他指令都无法覆盖。
  Directory容器
    这个指令也是一种容器类型,作用于特定的文件系统目录,子目录以及目录下的内容,语法格式:指令。路径支持使用正则表达式的写法指令。一般用于对某些目录及文件的访问控制。
  Files容器
    和类似,作用于文件,也可使用正则表达式,语法
  Lacation容器
    定义的指令仅对特定的URL有效,语法指令,支持正则表达式,使用~号。
  ErrorLog指令
  
    错误访问日志路径,默认为ServerRoot/logs/error_log
  LogLevel指令
    日志级别: debug,info, notice, warn, error, crit,alert, emerg
  LogFormat指令
    定义的日志格式,可以使用Apache预先设置的格式字符。语法:LogFormat日志格式 别名
    Apache常用的预定义的格式字符串:
  %h : 客户端IP地址
  %l : Remote loganme -表示为空
  %u :Remote user -表好为空
  %t :服务收到请求的时间
  %r :请求报文首行信息(请求方法,URL 协议版本)
  %>s :响应状态码         
  %b : 响应报文的大小,单位是字节,不报阔响应报文首部
  %{Referer}i: 请求报文当中"referer"首部的值,当前资源的访问入口,即从那个页面中的超链接跳转而来
  自己敲地址来的,是不会记录的,可查看从哪儿跳转过来的,可放置倒链(为他人做嫁衣)
  %{User-Agent}i:请求报文当中"User-Agent"首部的值;即发出请求用到的应用程序;浏览器类型
  

  CustomLog指令
    设置客户端的访问日志以及使用何种格式的日志来记录。默认路径为ServerRoot/logs/access_log ,语法:CustomLog 文件名。
  VirtualHost容器
  该容器的设置可以实现Apache的虚拟主机功能,虚拟主机就是在一台服务器上同时运行多个web业务。Apache支持基于ip,端口以及域名的主机类型。但是基于ip的虚拟主机类型需要有独立的ip地址,在这个ip地址稀缺的年代,该种方式无疑不会在互联网上大规模实现。基于端口的实现方式,由于其使用方法的不便利也不会在互联网使用。基于ip和端口方式的虚拟主机只在局域网中使用。基于域名的虚拟主机才真正的受大家所欢迎。服务器处理基于域名的虚拟主机请求时根据http的头部信息来实现网站的分离解析,用户可使用不同的域名访问位于同一ip地址的服务器资源。下面为基于域名的虚拟主机配置文件:
  [root@www conf.d]# vim /etc/httpd/conf.d/httpd-vhosts.conf
  NameVirtualHost *:80    #必须开启基于域名的虚拟主机
     web虚拟主机
  ServerName www.zachary.top
  DocumentRoot /var/www/html/web  #3台虚拟主机使用不同的资源主目录,便于管理
  ErrorLog "logs/www.zachary.top-error_log"  日志文件独立存放便于管理和分析
  CustomLog "logs/www.zachary.top-access_log" common
  
  

     #若使用基于ip的虚拟主机,可以把*改为指定ip,基于端口的实现,更改80为不同的端口
  ServerName bbs.zachary.top
  DocumentRoot /var/www/html/bbs
  ErrorLog "logs/bbs.zachary.top-error_log"
  CustomLog "logs/bbs.zachary.top-access_log" common
  
  

  
  ServerName blog.zachary.top
  DocumentRoot /var/www/html/blog
  ErrorLog "logs/blog.zachary.top-error_log"
  CustomLog "logs/blog.zachary.top-access_log" common
     
  基于域名的虚拟主机实现,在互联网需要dns解析的支持,若是本地测试可以使用修改host文件的方式或者搭建一个本地的DNS服务器来实现。基于ip和端口的虚拟主机实现,在VirtualHost后面的*修改为指定ip或者端口就可实现




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-636464-1-1.html 上篇帖子: LAMP环境搭建 二(centos7)mariadb安装和Apache安装 下篇帖子: centos7 搭建lamp(Apache PHP Mysql环境)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表