Linux网站架构系列之Apache----进阶篇
本篇博文为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的调优介绍了。希望能帮助到大家。
相关文章:

仅用10天设计的JavaScript,凭什么成为程序员最受欢迎的编程语言?
导语:在这个世纪之交诞生的 JavaScript,没人想到会发展为当今世界上最流行的语言之一。它不够成熟,不够严肃,甚至连名字都是模仿的 Java。那么,JavaScript 的成功是依靠运气和完美时机的侥幸吗?其实不然——…

C++11中= delete;的使用
C11中,对于deleted函数,编译器会对其禁用,从而避免某些非法的函数调用或者类型转换,从而提高代码的安全性。 对于 C 的类,如果程序员没有为其定义特殊成员函数,那么在需要用到某个特殊成员函数的时候&…

vue 使用scss
使用vue-cli模板创建的项目中,使用scss步骤 1. cmd命令: cnpm install sass-loader --save-devcnpm install node-sass --sava-dev2.查看package.json文件中是否已自动添加以下信息 3. 转载于:https://www.cnblogs.com/duanzhenzhen/p/10453495.html

EBS form日历可选范围设置(calendar.setup )介绍
Calendar是Template提供给我们的standard object.可以使我们方便的为日期型字段提供日期的选择列表.form中设置日历方法:1. 为日期型字段指定LOV(ENABLE_LIST_LAMP)2. 在字段的KEY–LISTVAL事件中编写代码:Calendar.showCalendar Package包含如下几个Procedure:1. Calendar.sho…

人工智能对地球环境科学的推进
一项德国耶拿[1]和汉堡[2]科学家在《自然》杂志发起的研究表明,人工智能可以有效地推进我们对于地球气候系统的理解。特别是在当前深度学习的潜力还未被完全开发的情况下。在人工智能的帮助下一些复杂的动态环境,如飓风,森林火灾,…

从概念到应用,终于有人把数据挖掘讲明白了
作者:陈封能(Pang-Ning Tan)、迈克尔斯坦巴赫(Michael Steinbach)等来源 | 大数据(ID: hzdashuju)【导语】数据采集和存储技术的迅速发展,加之数据生成与传播的便捷性&am…

C++11中default的使用
在C11中,对于defaulted函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代码执行效率,也可免除程序员手动定义该函数的工作量。 C的类有四类特殊成员函数,它们分别是:默认构造函数、析构函数、拷…

Android开发:setAlpha()方法和常用RGB颜色表----颜色, r g b分量数值(int), 16进制表示 一一对应...
杂家前文Android颜色对照表只有颜色和十六进制,有时候需要设置r g b分量的int值,如paint.setARGB(255, 127, 255, 212);就需要自己计算下分量的各个值。这里提供一个带有r g b分量的int型的颜色表。注意paint.setAlpha()及paint.setARGB(&…

【redis】c/c++操作redis(对于hiredis的封装)
前言 最近一直在学习redis,通过c/cpp来执行redis命令,使用的是hiredis客户端来实现的。 先简单贴一下代码 头文件 #include <vector> #include <string> #include <hiredis/hiredis.h> typedef enum en_redisResultType {redis_reply_…
OpenCV代码提取:transpose函数的实现
OpenCV中的transpose函数实现图像转置,公式为:目前fbc_cv库中也实现了transpose函数,支持多通道,uchar和float两种数据类型,经测试,与OpenCV3.1结果完全一致。实现代码transpose.hpp:// fbc_cv …

只给测试集不给训练集,要怎么做自己的物体检测器?
9 月5 日,下周四,大家期待已久的由《动手学深度学习》作者,亚马逊首席科学家亲自带领的「深度学习实训营」就要在北京开营了。今天,李沐已经把这次深度学习实训营白天的教学内容和代码上传到 Gituhub 和 D2L.ai 网站了,…

MYSQL忘记登录密码
1、关闭Mysql: 如果 MySQL 正在运行,首先杀之 killall -TERM mysqld 2、另外的方法启动 MySQL :bin/safe_mysqld --skip-grant-tables 3、可以不需要密码就进入 MySQL 了。 然后就是 >use mysql>update user set passwordpassword(&qu…
OpenCV代码提取:flip函数的实现
OpenCV中实现图像翻转的函数flip,公式为:目前fbc_cv库中也实现了flip函数,支持多通道,uchar和float两种数据类型,经测试,与OpenCV3.1结果完全一致。实现代码flip.hpp:// fbc_cv is free softwar…

NLP这两年:15个预训练模型对比分析与剖析
作者 | JayLou来源 | 知乎前言在之前写过的《NLP的游戏规则从此改写?从word2vec, ELMo到BERT》一文中,介绍了从word2vec到ELMo再到BERT的发展路径。而在BERT出现之后的这大半年的时间里,模型预训练的方法又被Google、Facebook、微软、百度、O…

大三下学期第一周总结
本周以是开学第一周了,在生活方面,生活琐事确实变多了起来。每天上课,看着老师熟悉的面庞,如履春风。感觉学习没有那么多的陌生恐惧。学习是一方面,身体锻炼不能落下。一周至少保证三小时及其以上的运动。身体是革命的…

AD rodc扩展报错
AD rodc扩展报错AD RODC抢夺FSMO五大角色后,架构扩展报错,解决办法参考链接:http://support.microsoft.com/kb/949257/en-us

Dropout、梯度消失/爆炸、Adam优化算法,神经网络优化算法看这一篇就够了
作者 | mantch来源 | 知乎1. 训练误差和泛化误差对于机器学习模型在训练数据集和测试数据集上的表现。如果你改变过实验中的模型结构或者超参数,你也许发现了:当模型在训练数据集上更准确时,它在测试数据集上却不⼀定更准确。这是为什么呢&am…

入行AI,你需要一本Python机器学习入门
目前机器学习红遍全球。男女老少都在学机器学习模型,分类器,神经网络和吴恩达。你也想成为一份子,但你该如何开始?今天小编推荐这本《Python机器学习》教你快速入门。01什么是机器学习?从出生的那天起,…
通过transpose和flip实现图像旋转90/180/270度
在fbc_cv库中,提供了对图像进行任意角度旋转的函数rotate,其实内部也是调用了仿射变换函数warpAffine。如果图像仅是进行90度倍数的旋转,是没有必要用warpAffine函数的。这里通过transpose和flip函数实现对图像进行顺时针90度、180度、270度的…

DIY强大的虚拟化环境-技术可行性部分
【技术可行性部分】大体的cpu支不支持呀,实际效果使用呀,截图效果截图嵌套虚拟化[esxi,xenserver,Hyper-V]嵌套虚拟化:经过各种查资料,和测试验证[只测过intel的,amd的有类似的文章请去下面的资…

C++11中rvalue references的使用
Rvalue references are a feature of C that was added with the C11 standard. The syntax of an rvalue reference is to add && after a type.为了支持移动操作,C11引入了一种新的引用类型----右值引用(rvalue reference)。所谓右值引用就是必须绑定到右…
AIの幕后人:探秘“硬核英雄”的超级武器
作者 | 云计算的阿晶 出品 | AI科技大本营(ID:rgznai100) 掐指一算八年之前,那时正是国内互联网卯足劲头起飞的一年,各行各业表现都很突出,尤其是与人们生活密切相关的手机,正大踏步地从功能机向智能手机转…

PAT乙级1003
1003 我要通过! (20 point(s))“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。 得到“答案…

史上最简洁的UITableView Sections 展示包含NSDicionary 的NSArray
这个最典型的就是电话本,然后根据A-Z分组, 当然很多例子,不过现在发现一个很简洁易懂的: 1. 准备数据,定义一个dictionary来显示所有的内容,这个dictionary对应的value全是数组 也就是: A &…

微软麻将AI Suphx或引入“凤凰房”,与其他AI对打
作者 | 夕颜出品 | AI科技大本营(ID:rgznai100)【导读】在刚刚结束的上海2019世界人工智能大会上,微软宣布了其在人工智能领域的最新研究突破——由微软亚洲研究院研发的麻将 AI 系统 Suphx 在国际知名的专业麻将平台“天凤”上荣升十段&…

C++11中std::function的使用
类模版std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,这些目标实体包括普通函数、Lambda表达式、函数指针、以及其它函数对象等。 通过std::function对C中各种可调用实体(普通函数、Lambd…

django模板的导入
模板导入 前提:多个页面有一个相同的页面版块(多个有样式标签的集合体) 如何运用:可以将多个样式标签的集合进行封装对外提供版块的名字(接口),在有该版块的页面中直接导入即可 语法:{% include 版块页面的路径 %} 四inclusion_tag自定义标签 -- 模板导入 前提:多个页面有一个相…

[UML]UML系列——包图Package
系列文章 [UML]UML系列——用例图Use Case [UML]UML系列——用例图中的各种关系(include、extend) [UML]UML系列——类图Class [UML]UML系列——类图class的关联关系(聚合、组合) [UML]UML系列——类图class的依赖关系 [UML]UML系…

2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)
A Drawing Borders 很多构造方法,下图可能是最简单的了 代码: #include<bits/stdc.h> using namespace std; const int maxn1e610; struct Point{ int x,y; }; Point a[maxn]; int numa0; Point b[maxn]; int numb0; vector<pair<double,d…

C++11中std::bind的使用
std::bind函数是用来绑定函数调用的某些参数的。std::bind它可以预先把指定可调用实体的某些参数绑定到已有的变量,产生一个新的可调用实体。它绑定的参数的个数不受限制,绑定的具体哪些参数也不受限制,由用户指定。 std::bind:(…