本篇博文为Linux网站架构系列之apache的第二篇,我将带大家一起学习apache的编译参数,目录结构和配置文件等方面的知识,实现对apache服务的进一步掌握,并使之能更好的应用到生产实战中去。

一、编译参数

在上篇的apache部署中,我们用了大量的编译参数,其实apache的编译参数并不止这些,这些只是我们生产环境中常用的。我们在apache的源码包目录下,用以下命令可以将他们都输出出来

[root@c64-web httpd-2.4.6]# ./configure --help

此命令的输出这里就不贴出来了,一大堆呢,估计你也不看,有些参数一百年也用不到一次。如果想了解这些参数,你可以百度一下。

这里我将详细为大家说明一下我们常用的编译参数的作用

--prefix=/usr/local/apache-2.4.6 \    #表示指定apache安装路径为/application/apache2.2.25。如果不指定安装路径,则默认路径为/usr/local/apache2
--with-apr=/usr/local/apr \           #指定apr安装路径,不然会报错
--with-apr-util=/usr/local/apr-util \ #指定apr-util安装路径,不然会报错
--with-pcre \                         #支持perl的正则表达式,不然会报错
--enable-so \                         #激活apache服务的DSO(全称Dynamic Shared Object,动态共享对象)支持,即在以后可以以DSO的方式编译安装共享模块,这个模块本身不能以DSO方式编译。
--enable-ssl \                        #基于ssl加密传输
--enable-cgi \                        #开启CGI脚本
--enable-rewrite \                    # 提供基于URL规则的重写功能。即根据已知URL地址,转换其它想要的URL地址。如前文讲解的伪静态功能就是这个模块实现的。这是apache生产环境中必用的一个重要功能。
--with-zlib \                         #支持压缩
--enable-deflate \                    # 提供对内容的压缩传输编码支持,一般html,js,css等内容的站点,使用此参数功能会大大提高传输速度,提升访问者访问体验。在生产环境中,这是apache调优的一个重要选项之一。
--enable-expires \                    # 激活允许通过配置文件控制HTTP的“Expires:”和“Cache-Control:”头内容,即对网站图片、js、css等内容,提供在客户端游览器缓存的设置。这是apache调优的一个重要选项之一。
--enable-headers \                    #提供允许对HTTP请求头的控制
--enable-modules=most \               #支持大多数模块
--enable-mpms-shared=all \            #mpm模块的动态切换
--with-mpm=worker                     #选择apache mpm的模式为worker模式。因worker模式原理是更多的使用线程来处理请求,所以可以处理更多的并发请求,而系统资源的开销小于基于进程的MPM prefork。如果不指定此参数,默认的模式是prefork进程模式。这两者的关系,在调优篇里面我会详细为大家讲解。

二、apache目录结构介绍

熟悉apache的目录结构,对我们对apache知识点的理解和掌握尤为重要,下面我将带大家一起来对apache的目录结构进行了解。

[root@c64-web /]# tree -L 3 /usr/local/apache/    #以下我对输出做了精简,仅保留常用的
./
├── bin         #存放apache命令的目录,如apache启动命令apachectl├── ab        #apache http服务器性能测试工具,简单、易用。同类软件还有jmeter、loadrunner、webbench等├── apachectl  #apache的启动程序,需重点掌握,apachectl是一个脚本├── apxs       #apxs是一个为apache HTTP服务器编译和安装扩展模块的工具,在进行DSO方式模块编译时会用到。后面在编译php软件时就用到了这个命令,如:--with-apxs2=/application/apache/bin/apxs├── htcacheclean #这是清理磁盘缓冲区的命令,需要在编译时指定相关参数才可使用,一般用的很少。├── htpasswd   #建立和更新基本认证文件,如:配置nagios等监控服务时会用到。├── httpd      #httpd为apache的控制命令程序,apachectl执行时会调用httpd└── rotatelogs #apache自带的日志轮询工具,也还可以用,但在老师工作场景中习惯由cronolog替代之
├── build
├── cgi-bin
├── conf   #这是apache的所有的配置文件的目录,极其重要├── extra #这是额外的apache配置文件目录,这个目录里的文件我们会经常访问修改├── httpd-dav.conf   #dav支持配置├── httpd-default.conf    #这个文件里配置的是apache的相关服务参数:超时时间,保持连接时间等。├── httpd-languages.conf  #语言支持配置├── httpd-mpm.conf   #服务器池管理,也就是优化apache的一个配置文件,如:选择apache的模式及配置连接数等,常用的模式有worker模式和profork模式,默认情况是profork模式。├── httpd-ssl.conf   #这是apache SSL支持配置文件└── httpd-vhosts.conf  #这是虚拟主机的配置文件└── httpd.conf  #apache的主配置文件,这个文件我们会经常访问修改,其每一行的参数作用都应弄清楚明白
├── htdocs   #这是编译安装时apache的默认站点目录,前面已说明。└── index.html #默认的首页文件,在实际环境中,大家习惯用index.html、index.php、index.jsp来做首页文件,首页文件名字是在httpd.conf中事先定义好的。具体参数:Directoryindex index.html
├── logs  #存放apache默认的日志路径,包括错误日志及访日志问├── access_log  #这是apache的默认访问日志文件。├── error_log   #这是apache的错误日志文件,如果apache出现启动故障等问题,一定要看看这个错误日志。└── httpd.pid    #httpd的pid文件,httpd进程启动后,会把所有进程的ID号写到此文件。
└── modules  #apache的模块目录,比如php.memcache等模块编译后都在这里。

以上就是apache的目录结构说明了,大家了解一下知道做什么用就可以了。

三、apache主配置文件详解

下面我将为大家详细介绍apache的主配置文件,我们通过下面的命令将apache默认开启的行筛选出来

[root@c64-web /]# egrep -v "^$|#" /usr/local/apache/conf/httpd.conf|cat -n1  ServerRoot "/usr/local/apache-2.4.6"   #apache的根目录,应只能root访问,一般不需要更改此配置2  Listen 80  #apache监听的端口,默认为80端口,如果同时监听81可以增加一行,如 Listen 813  LoadModule authn_file_module modules/mod_authn_file.so4  LoadModule authn_core_module modules/mod_authn_core.so5  LoadModule authz_host_module modules/mod_authz_host.so6  LoadModule authz_groupfile_module modules/mod_authz_groupfile.so7  LoadModule authz_user_module modules/mod_authz_user.so8  LoadModule authz_core_module modules/mod_authz_core.so9  LoadModule access_compat_module modules/mod_access_compat.so10  LoadModule auth_basic_module modules/mod_auth_basic.so11  LoadModule reqtimeout_module modules/mod_reqtimeout.so12  LoadModule filter_module modules/mod_filter.so13  LoadModule mime_module modules/mod_mime.so14  LoadModule log_config_module modules/mod_log_config.so15  LoadModule env_module modules/mod_env.so16  LoadModule headers_module modules/mod_headers.so17  LoadModule setenvif_module modules/mod_setenvif.so18  LoadModule version_module modules/mod_version.so19  LoadModule mpm_worker_module modules/mod_mpm_worker.so20  LoadModule unixd_module modules/mod_unixd.so21  LoadModule status_module modules/mod_status.so22  LoadModule autoindex_module modules/mod_autoindex.so23  LoadModule dir_module modules/mod_dir.so24  LoadModule alias_module modules/mod_alias.so25  <IfModule unixd_module>26  User daemon   #apache的用户,默认为daemon,建议修改为特定普通用户,如sunsky27  Group daemon  #apache的用户组,默认为daemon,建议修改为特定普通用户,如sunsky28  </IfModule>29  ServerAdmin you@example.com   #系统管理员的邮箱30  <Directory />   #这将禁止访问文件系统所在的目录,并添加你希望允许访问的目录块31      AllowOverride none  #表示禁止用户对目录配置文件(.htaccess进行修改)重载,普通站点目录此项建议不开32      Require all denied   #拒绝所有请求33  </Directory>34  DocumentRoot "/usr/local/apache-2.4.6/htdocs"35  <Directory "/usr/local/apache-2.4.6/htdocs">36      Options Indexes FollowSymLinks   #允许目录游览和符号链接,生产环境默认这里为None一项也不打开37      AllowOverride None  #表示禁止用户对目录配置文件(.htaccess进行修改)重载,普通站点目录此项建议不开38      Require all granted   #授权所有请求39  </Directory>40  <IfModule dir_module>41      DirectoryIndex index.html  #配置默认的apache首页文件,如虚拟主机没有此配置,默认应用这里的配置。首页文件可以有多个,每个文件用空格分开,调用时,前面优先匹配。42  </IfModule>43  <Files ".ht*">     #防止.htaccess和.htpasswd等重要隐藏文件被web用户查看44      Require all denied45  </Files>46  ErrorLog "logs/error_log"  #错误日志路径,logs为apache安装目录的相对路径,遇到apache错误要记得查看此文件47  LogLevel warn48  <IfModule log_config_module>49      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined   #访问日志格式50      LogFormat "%h %l %u %t \"%r\" %>s %b" common #普通访问日志格式51      <IfModule logio_module>52        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio53      </IfModule>54      CustomLog "logs/access_log" common   #默认站点访问日志配置55  </IfModule>56  <IfModule alias_module>57      ScriptAlias /cgi-bin/ "/usr/local/apache-2.4.6/cgi-bin/"    #配置cgi别名,ScriptAlias 方法可以学习。58  </IfModule>59  <IfModule cgid_module>60  </IfModule>61  <Directory "/usr/local/apache-2.4.6/cgi-bin">   #允许cgi-bin路径访问62      AllowOverride None63      Options None64      Require all granted65  </Directory>66  <IfModule mime_module>67      TypesConfig conf/mime.types68      AddType application/x-compress .Z    #AddEncoding允许你在信息传送中使用(Mosaic/X 2.1+)解压缩信息。不是所有游览器的支持这个选项。69      AddType application/x-gzip .gz .tgz70  </IfModule>71  <IfModule proxy_html_module>72  Include conf/extra/proxy-html.conf73  </IfModule>74  <IfModule ssl_module>75  SSLRandomSeed startup builtin76  SSLRandomSeed connect builtin77  </IfModule>

以上是我们编译安装完成apache后,apache的默认主配置文件。其中有个别行暂时没有解开注释的,我会在用的时候给大家提到。

四、虚拟主机配置文件

生产环境中,我们通常都要用到apache的扩展文件中的虚拟主机配置文件,它位于apache安装目录下的conf/extra/httpd-vhost.conf。注意,如果要让该配置文件的内容起作用,我们需要解锁apache主配置文件httpd.conf中扩展虚拟主机的配置行

[root@c64-web /]# grep httpd-vhost /usr/local/apache/conf/httpd.conf
#Include conf/extra/httpd-vhosts.conf   #将此行解锁即可

此处我们可以用一键解锁命令

[root@web apache]# sed -i 's#\#Include conf/extra/httpd-vhosts.conf#Include conf/extra/httpd-vhosts.conf#g' /usr/local/apache/conf/httpd.conf #使用sed命令一键替换
[root@web apache]# grep httpd-vhost /usr/local/apache/conf/httpd.conf  #查看替换结果
Include conf/extra/httpd-vhosts.conf

现在开始为大家讲解httpd-vhost.conf这个文件,我们依旧只显示解开注释的行

[root@c64-web apache]# egrep -v "^$|#" /usr/local/apache/conf/extra/httpd-vhosts.conf|cat -n1 <VirtualHost *:80>  #定义一个虚拟主机,监听本机所有IP地址80端口上提供的http服务请求2     ServerAdmin webmaster@dummy-host.example.com   #这里可以配置管理员的邮箱3     DocumentRoot "/usr/local/apache-2.4.6/docs/dummy-host.example.com"  #提供服务的程序目录,也称站点目录4     ServerName dummy-host.example.com #这是配置提供服务的域名,如www.baidu.com,如果是生产环境需要把www.baidu.com解析到服务器上配置的外网VIP或IP上。如果仅为测试,可以直接在本机上做测试。5     ServerAlias www.dummy-host.example.com  #这是配置虚拟主机的别名,也就是可以配置多个域名访问同一站点,如此处配置baidu.com后,当输入baidu.com可以得到和www.baidu.com同样的结果。此功能需要apache mod_alias模块支持。6     ErrorLog "logs/dummy-host.example.com-error_log"  #这里可以配置apache错误日志的路径。错误日志是调试apache的一个非常重要的日志。有什么错误信息这里一般都会有记录。7     CustomLog "logs/dummy-host.example.com-access_log" common #访问日志配置。在生产环境中,我们一般用combined格式替代common格式,以获取更多的日志格式输出。8 </VirtualHost>    #这是一个虚拟主机的结尾,如果需要添加新的虚拟主机,则可以增加<VirtualHost></VirtualHost>即可910     ServerAdmin webmaster@dummy-host2.example.com11     DocumentRoot "/usr/local/apache-2.4.6/docs/dummy-host2.example.com"12     ServerName dummy-host2.example.com13     ErrorLog "logs/dummy-host2.example.com-error_log"14     CustomLog "logs/dummy-host2.example.com-access_log" common15 </VirtualHost>

默认配置文件会准备出来两个虚拟主机模板,此处我们仅拿一个做讲解,两者内容是相通的。

到这里本篇博文就结束了,相信对于编译参数,apache目录结构,主配置文件和虚拟主机配置文件的内容,大家已经了然于心了。下一篇将是非常重要的针对生产环境的apache的调优介绍了。希望能帮助到大家。

Linux网站架构系列之Apache----进阶篇相关推荐

  1. Linux网站架构系列之Mysql----部署篇

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言.由于其体积小.速度快.总体拥有成本低,尤 ...

  2. 大型网站架构系列:负载均衡详解(4)

    原文:大型网站架构系列:负载均衡详解(4) 本文是负载均衡详解的第四篇,主要介绍了LVS的三种请求转发模式和八种负载均衡算法,以及Haproxy的特点和负载均衡算法.具体参考文章,详见最后的链接. 三 ...

  3. 大型网站架构系列:电商网站架构案例(1)

    大型网站架构系列:电商网站架构案例(1) 大型网站架构是一个系列文档,欢迎大家关注.本次分享主题:电商网站架构案例.从电商网站的需求,到单机架构,逐步演变为常用的,可供参考的分布式架构的原型.除具备功 ...

  4. 大型网站架构系列:电商网站架构案例(3)

    本文章是电商网站架构案例的第三篇,主要介绍数据库集群,读写分离,分库分表,服务化,消息队列的使用,以及本电商案例的架构总结. 6.5数据库集群(读写分离,分库分表) 大型网站需要存储海量的数据,为达到 ...

  5. 大型网站架构系列:20本技术书籍推荐

    大型网站架构系列:20本技术书籍推荐 一.大型网站架构系列 第一本:<大型网站技术架构:核心原理与案例分析> 这是本算是国内大型网站架构的经典之作,由阿里人李智慧创作,听名字就知道本书很有 ...

  6. 大型网站架构系列:缓存在分布式系统中的应用(二)

    缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题.提供高性能的数据快速访问. 本文是缓存在分布式应用第二篇文章,介绍分布式缓存,Memcache,Redis,本地缓存 ...

  7. 大型网站架构系列:电商网站架构案例(2)

    电网网站架构案例系列的第二篇文章.主要讲解网站架构分析,网站架构优化,业务拆分,应用集群架构,多级缓存,分布式Session. 五.网站架构分析 根据以上预估,有几个问题: 需要部署大量的服务器,高峰 ...

  8. 关于大型网站架构系列:电商网站架构案例(目前最有深意喜欢的文章)

    算法与数据结构C++精解 ThinkPHP5.0+小程序商城构建全栈应用 AngularJS仿拉勾网WebApp开发移动端单页应用 Thinkphp 5.0实战 仿百度糯米开发多商家电商平台 原文出处 ...

  9. 《 Elasticsearch顶尖高手系列:高手进阶篇(最新第二版)》面前最新

    课程大纲 第1节结构化搜索_IT技术论坛案例背景介绍   9分钟   |  第2节结构化搜索_在案例中实战使用term filter来搜索数据   20分钟   |  第3节结构化搜索_filter执 ...

最新文章

  1. ajax 阻止默认提交,jQuery验证插件:在对ajax调用servlet时,submitHandler不会阻止默认提交-返回false无效...
  2. mysql php 封装类_市面上几款常见的微信开发框架对比(PHP和JAVA)
  3. review what i studied `date` - 2017-4-11
  4. Spring 依赖注入(二、注入参数)
  5. 01 ORA系列:ORA-00904 标识符无效 invalid identifier
  6. python中print又可将数据写入文件_Python第五课-将写入文件的列表格式化
  7. 计算机机房使用多大的光纤引入,弱电施工如何确定光纤使用的芯数
  8. 关于键盘事件对象code值
  9. java私塾(java私塾初级模拟银源代码)
  10. 软件工程--可行性研究过程详解
  11. 全新小说安装教程小程序源码
  12. 《rework》读书摘要
  13. 编译原理 LL1文法的判断和句子识别
  14. IDEA的插件,IDEA强大的插件库
  15. js实现页面定时跳转
  16. 2021年高级维修电工证考试题库,职业技能鉴定职业资格
  17. 图片字节数组的获取,字节数组图片的保存
  18. 多线程与高并发day04
  19. 《看聊天记录都学不会C语言?太菜了吧》(1)我在大佬群里问基础问题没人理?
  20. ACrush 楼天成的回忆录

热门文章

  1. 描述C#多线程中 lock关键字
  2. Overview of ISA and TMG Networking and ISA Networking Case Study (Part 1)
  3. OC指示符assign、atomic、nonatomic、copy、retain、strong、week的解释
  4. 如何在 Vue 项目中使用 echarts
  5. phpstudy+phpstorm+debug
  6. 亚马逊ses如何发qq_使用Amazon SES发送电子邮件
  7. 宅男抖音某猫协议分析及应用破解
  8. linux 565显示格式,RGB565转BMP格式 C语言程序
  9. eclipse提示在***类中找不到main方法
  10. PAT(甲级)2018年冬季考试 7-3 Vertex Coloring