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

[经验分享] apache的主配置文件httpd.conf解析以及相关例题

[复制链接]

尚未签到

发表于 2018-11-25 11:42:14 | 显示全部楼层 |阅读模式
  Apache的主配置文件路径:/etc/httpd/conf/httpd.conf

下面基于Red Hat Enterprise Linux Server release 5.8版本中安装的apache2.2来讲解一下.



一、默认选项:

ServerRoot "/etc/httpd"  #安装apache 软件的根目录的位置,很多文件的相对路径,(不要随意改动)。

PidFile run/httpd.pid    #每个进程都有一个pid号,这是第一个httpd进程的进程号文件存放位置

Timeout 120              #用户通过三次握手建立连接后为发送和接收所限定的超时时间

KeepAlive Off|On         #长连接,即当客户端连接到服务器,接收完数据后仍然保持连接状态

MaxKeepAliveRequests 100   #一个连接服务的最多请求次数。

KeepAliveTimeout 15        #持续连接多长时间,该连接没有再请求数据,则断开该连接。



二、 MPM(Multi path module:多道处理模型



有以下几种:

mpm_winnt :Windows 专用

prefork   :事先生成进程(一个请求用一个进程响应)稳定性好,大并发下消耗资源较多

worker    :基于线程(一个请求用一个线程响应,启动多个进程,每个进程生成多个线程,每个请求用一个线程响应)

event     :事件(一个进程处理多个请求)

(在apache2.2中不支持event模型的,在红帽httpd2.2中默认使用的是prefork的模型,比较稳定,我们这里针对红帽版本进行讲解)



用httpd -l命令可以查看当前服务器支持哪种核心模型




  • [root@www ~]# httpd -l
  • Compiled in modules:
  •   core.c
  •   prefork.c
  •   http_core.c
  •   mod_so.c

如果更换模型,可以将/etc/sysconfig/httpd文件中默认的模型选项启动,选择你想用的模型就可以了。

#HTTPD=/usr/sbin/httpd.worker如果更换模型,可以将/etc/sysconfig/httpd文件中默认的模型选项启动,选择你想用的模型就可以了。

#HTTPD=/usr/sbin/httpd.worker



这里定义了prefork和worker各自不同模型配置的属性






  • prefork:
  •     #如果启用prefork模块
  • StartServers       8    #服务器开启时启动多少个进程  
  • MinSpareServers    5    #最少空闲进程数
  • MaxSpareServers   20    #最大空闲进程数
  • ServerLimit      256    #服务器限制请求数(为MaxClient指定最大上限)
  • MaxClients       256    #最多允许多少个请求同时连进来
  • MaxRequestsPerChild  4000   #一个进程最多响应多少次的请求

  • 这些值都可以根据实际情况进行调整的




  •      #如果启用worker模型
  • StartServers         2  #开启时启动的进程数
  • MaxClients         150  #最多客户端请求数
  • MinSpareThreads     25  #最少空闲的线程数
  • MaxSpareThreads     75  #最多空闲的线程数
  • ThreadsPerChild     25  #每个进程生成多少个线程数
  • MaxRequestsPerChild  0  #每个进程响应多少个请求,(这个是由线程决定的,0表示不作限定)




三、可以变更的选项、

Listen 80#服务器监听的端口号(也可以指定地址)



#指定apache在启动的时候装载的模块

模块模块名称模块路径(如果不想要的话,注释掉即可)

LoadModule auth_basic_module modules/mod_auth_basic.so

LoadModule auth_digest_module modules/mod_auth_digest.so

LoadModule authn_file_module modules/mod_authn_file.so

LoadModule authn_alias_module modules/mod_authn_alias.so

LoadModule authn_anon_module modules/mod_authn_anon.so

LoadModule authn_dbm_module modules/mod_authn_dbm.so

LoadModule authn_default_module modules/mod_authn_default.so

LoadModule authz_host_module modules/mod_authz_host.so

……………………………………………………………………

……………………………………………………………………





Include conf.d/*.conf #这是主配置文件的从配置文件,隶属于主配置文件的一部分

User apache#apache 的worker模型默认是普通用户登录的(这里指定了普通用户)

Group apache    #指定默认组



ServerAdmin root@localhost#管理员的邮件地址

#ServerName www.example.com:80

#服务器名称,不启用的话开启服务器时它回去反向解析当前的ip地址到某个主机名,解析成功就把那个主机名当做服务器名字,所以最好给本地主机一个主机名。

(虚拟主机上这个是必须的)

DocumentRoot "/var/www/html"#网页文档所在的路径(可以更改)





四、网页访问控制的设置选项:

#可以解释为容器,在这里可以定义网页的访问属性

    Options FollowSymLinks

    AllowOverride None



在这个配置中,主要有下面几个选项:



Options:用来定义区块的内容

主要选项:

ExecCGI: 在该目录下允许执行CGI脚本。

FollowSymLinks: 在该目录下允许文件系统使用符号连接。

Indexes: 当用户访问该目录时,如果用户找不到DirectoryIndex指定的主页文件(例如index.html),则返回该目录下的文件列表给用户。

SymLinksIfOwnerMatch: 当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问。

Muliyiview:多视图,可以根据你的客户端的语言来源提供相匹配的网页给你。

Includes:允许执行服务器端包含。

None:不支持任何选项

All:支持所有选项



AllowOverride 指的是允许覆盖,覆盖之后的内容,之后的内容是定义服务器的访问控制列表的,指允许谁能够访问和不能够访问。



Order: 用于定义访问顺序,后可以跟ip、网络地址或者主机

Allow: 允许客户端访问

Deny:拒绝客户端访问

AuthConfig:定义用户提供账号密码来进行访问该网页(下面会有例子的哦)



#默认网页的路径,在这里定义该网页的访问控制机制

    Options Indexes FollowSymLinks #有索引,可以使用符号链接

    AllowOverride None #指不允许覆盖,以目录自己的权限为主。

    Order allow,deny  #定义允许和拒绝的次序

    Allow from 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 "%{Referer}i -> %U" referer

LogFormat "%{User-agent}i" agent



%h: 客户端地址

%l:远端主机上的登陆名称

%u:登陆网站的时候用户的名称

%t:日志事件产生的时间

%r:请求报文的第一行

\:表示转义

%>s:最近一次请求的状态码

%b:响应报文的大小

%{Referer}i:当前页面来源于哪个页面

%{User-Agent}i:浏览器的来源

(具体可以参考下帮助文档哦)



#CustomLog logs/access_log common  #通用访问日志

CustomLog logs/access_log combined#混合访问日志



定义别名:

Alias /icons/ "/var/www/icons/" #即访问/icons 页面时会自动访问到/var/www/icons中的页面



    Options Indexes MultiViews

    AllowOverride None

    Order allow,deny

    Allow from all  #这里定义了访问控制







六、定义虚拟主机:



#NameVirtualHost *:80     #指定虚拟主机名或地址和端口(和下面定义虚拟主机的名称或地址保持一致)

eg:NameVirtualHost 172.16.62.1:80



虚拟主机的格式:

定义虚拟主机:



DocumentRoot "/path"            #主页文件在哪

ServerName                #服务器名称

#在此定义文件访问控制





ErrorLog  logs/site1.err_log#定义日志路径

CustomLog logs/site1.access_log combined





虚拟主机有三种

基于IP的虚拟主机:使用不同的ip提供不同的站点(主机由多个ip地址)

基于port的虚拟主机:使用不同的port提供不同的站点

基于主机名(域名)的虚拟主机:使用不同的主机名提供不同的站点

ServerName 不同,在主配置文件中要将NameVirtualHost 启用,和下面定义的虚拟主机的地址端口务必要保持一致。







下面以一个例子来讲解下基于ssl的用户认证和虚拟主机的配置。。



例如:建立httpd服务器,分别为www.magedu.com, www.test.net, www.example.org各提供一个虚拟主机,位置分别为:/vhosts/magedu, /vhosts/test, /vhosts/example;要求:

1)每个虚拟主机的要使用各自的错误日志和访问日志,日志文件名称以虚拟主机名称打头;三个虚拟主机的日志文件都位于/vhosts/logs目录中;

2)www.magedu.com虚拟主机仅允许来自172.16.0.0/16(除了172.16.100.0/24)的主机访问,且支持基于SSL的访问;

3)www.test.org虚拟主机仅允许提供了帐号和密码的请求者访问







解析过程:



定义虚拟主机,首先要把中心主机注释掉

#DocumentRoot "/var/www/html"

可以在主配置文件中末尾添加如下内容:(我的主机ip为172.16.62.1)





  •     ServerName www.magedu.com
  •     DocumentRoot "/vhosts/magedu"


  •     ServerName www.test.net
  •     DocumentRoot "/vhosts/test"


  •     ServerName www.example.org
  •     DocumentRoot "/vhosts/example"




在各相应目录下新建一个html文档,里面写下相应内容,

修改/etc/hosts文件添加如下三行:






  • vim /etc/hosts
  • 172.16.62.1 www.magedu.com
  • 172.16.62.1 www.test.net
  • 172.16.62.1 www.example.org

启动httpd服务(启动之前确保selinux是关闭状态)

然后通过不同主机就可以进行访问了。

三个虚拟主机配置完成。。





1),在各个虚拟机中定义日志:添加如下内容




  • ErrorLog /vhosts/logs/magedu.error_log
  • CustomLog /vhosts/logs/magedu.access_log  common
  • 下面两个虚拟机日志文件将magedu替换成为test和example即可。

2)、在magedu虚拟机中添加:





  •     Order deny,allow
  •     Deny from 172.16.100.0/24
  •     Allow from 172.16.0.0/16


基于ssl访问,服务器端通过给客户端进行颁发私有证书来实现。

(私有证书的创建及颁发前面文章有详细介绍,这里只给出相关步骤)





颁发证书方:




  • # vim /etc/pki/tls/openssl.cnf
  • # dir=/etc/pki/CA
  • 在这里还可以修改一些默认选项

  • # cd /etc/pki/CA
  • # make certs newcerts crl
  • # touch index.txt  
  • # touch serial
  • # echo 01 > serial

  • 生成自签署证书:
  • # (umask 077; openssl genrsa -out private/cakey.pem 2048)
  • # openssl req -x509 -new -key private/cakey.pem -out cacert.pem -days 3650

申请方:




  • # cd /etc/httpd/
  • # mkdir ssl
  • # cd ssl
  • # (umask 077; openssl genrsa 1024 > httpd.key)
  • # openssl req -new -key httpd.key -out httpd.csr

签署证书:






  • # openssl ca -in httpd.csr -out httpd.crt -days N

然后将证书导入访问的浏览器,即可通过https 进行访问了。。
DSC0000.jpg


找到该证书所在位置,导入该证书即可。
DSC0001.jpg


浏览时该内容就会被加上安全设置了。


DSC0002.jpg


3),在虚拟机www.test.net中添加;





  •     AllowOverride Authconfig
  •     AuthType Basic
  •     AuthName "Limit..."
  •     AuthUserFile "/web/users"  #这个文件里定义了用户以及用户密码
  •     Require valid-user  #定义了文件/web/users的用户具有访问权限


添加可以访问的用户:

这里引入一个命令:htpasswd

用到的选项:

-c:第一次创建的时候用到的,为了创建文件所用(文件存在后就不用了)

-m:指定文件以md5方式进行加密






  • [root@www ~]# htpasswd -c -m /web/users tom
  • New password:  
  • Re-type new password:  
  • Adding password for user tom
  • [root@www ~]# htpasswd -m /web/users jerry
  • New password:  
  • Re-type new password:  
  • Adding password for user jerry

这样就添加了用户及其密码到文件/web/users 中了。



再次访问www.test.net站点的时候就会出现如图所示的内容了。。
DSC0003.jpg


输入你所设置的用户名和密码就可以进行访问了.......










运维网声明 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-639363-1-1.html 上篇帖子: org.apache.jasper.compiler.TldLocationsCache tldScanJar No TLD files were fou 下篇帖子: LAMP:apache+mysql+php的编译安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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