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

[经验分享] httpd配置

[复制链接]

尚未签到

发表于 2018-4-20 10:57:34 | 显示全部楼层 |阅读模式
  CentOS6上的httpd程序包为httpd-2.2版本,可以直接使用rpm包安装或者源码编译安装,rpm包的安装方式不再赘述:
# yum install httpd  CentOS6上httpd程序安装完成后的主要文件分布

  主配置文件:/etc/httpd/conf/httpd.conf

  辅助配置文件:/etc/httpd/conf.d/*.conf 其作用是为httpd.conf提供片段
  服务脚本:/etc/rc.d/init.d/httpd
  服务脚本配置文件:/etc/sysconfig/httpd
  主程序文件:
  prefork模型程序文件:/usr/sbin/httpd
  worker模型程序文件:/usr/sbin/httpd.worker
  event模型程序文件:/usr/sbin/httpd.event
  访问日志文件目录:/var/log/httpd/access_log
  错误日志文件目录:/var/log/httpd/error_log
  站点文档目录:/var/www/html(可以理解为网页文件存放目录)
  模块文件路径:/usr/lib64/httpd/modules/
  CentOS6上httpd服务常用配置(以下配置均在httpd.conf中)
   配置文件的组成:
   分为三部分组成
   第一部分
   ### Section 1:Global Environment
    配置全局环境,程序工作特性
   ### Section 2:'Main' server configuration
    主服务器配置
   ### Section 3:Virtual Hosts
    虚拟主机配置
  

  ### Section 1 Global Environment
  1、修改监听的IP和端口
    Listen [IP:]PORT
    例:Listen 172.16.20.242:8080
    省略IP表示监听本机所有IP地址;且Listen可重复多次;
    例:
     
    则表示即监听本机所有IP地址的80端口,也监听IP172.16.20.246的8080端口。
  2、持久连接,Persistent Connection
  连接建立,每个资源获取完成后不会立即断开连接,而是继续等待其它的请求完成;
    
  KeepAlive On|Off
  是否开启KeepAlive
  MaxKeepAliveRequests #
  持久连接允许的发起的的最大请求次数,默认为100,
  KeepAliveTimeout #
  超时时长,即连接建立之后,第一次请求和第二次请求之间的最大时间,默认为15秒,超过这个时间,连接就会断开,再次请求就必须重新建立连接
  测试KeepAlive配置效果

  使用telnet HOST PORT指令
  输入GET /URL HTTP/1.1(HTTP/1.1为协议版本)
  Host: HOSTNAME or IP
  敲两次回车
  如果开启了KeepAlive,那么连接不会断开,等待用户继续发起请求,知道超过超时时间
  如果未开启KeepAlive,那么连接会立即断开
  3、MPM配置
  MPM即Multipath Process Module是;多道处理模块,模型分别为prefork,worker,event,httpd-2.2不支持同时编译多个模块,所以只能在编译安装时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现不同MPM机制的支持;
  prefork:多进程模型,每个进程响应一个请求;
  一个主进程,负责生成n个子进程,子进程也成为工作进程,每个子进程处理一个用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过2014个;
  prefork配置如下

  StartServers:服务启动时启动的服务器进程数。
  MinSpareServers:最小空闲进程数,当httpd启动时,会先启动StartServers个子进程,然后再启动MinSpareServers个子进程。
  MaxSpareServers:最大空闲进程数,如果空闲子进程数大于MaxSpareServers个,那么httpd会自动kill掉超出的子进程。
  MaxClients:并发请求的最大数,即可以同时处理的请求数。
  ServerLimit:最大活动进程数,为MaxClient所准备的在其服务生命周期内所允许的最大值,在线的服务器进程数量最大值。最大值为200000,当MaxClients不够用时,可以增大ServerLimit,然后增大MaxClients,一般这两个值相等。
  MaxRequestPerChild:每个子进程在生命周期内所能够响应的最大请求数;一旦某进程超过了这个数量则会自动释放所有内存后自杀。这个值可以设置为0,0即永不结束,但这样做的弊端是进程占用内存过大而且容易内存溢出。不过对于KeepAlive链接,只有第一个请求会被算作一个请求,KeepAlive有效期内的其它请求不算。
  worker:多线程模型,每个线程响应一个请求;
  一个主进程,生成多个子进程,每个子进程生成固定个数的线程,每个线程独立响应一个请求。
  worker配置如下

  StartServers:当httpd程序启动时,伴随启动StartServers个子进程。
  MaxClients:并发请求的最大数,即所有子进程中的线程总数限制。
  MinSpareThreads:最小空闲线程数。
  MaxSpareThreads:最大空闲线程数。
  ThreadsPerChild:每个子进程可以生成的线程数。
  MaxRequestsPerChild:每个线程在生命周期内可以相应的最大请求数,0表示不限制。
  event模型
  事件驱动模型
  一个主进程,生产多个子进程,每个子进程直接响应n个请求。
  在httpd-2.2中,event为测试使用
  在httpd-2.4中,event可在生产使用
确认当前使用的模块的方法:
   # ps aux | grep httpd
   
这里可以查看到运行的是httpd.worker程序,其默认为/usr/sbin/httpd,即prefork
查看当前使用的静态编译的模块:
  
更换使用的httpd程序:
  通过修改/etc/sysconfig/httpd实现,这是服务脚本/etc/rcd/init.d/httpd的配制文件
  
   如果需要切换为其它程序文件,直接将HTTPD=/usr/sbin/httpd.worker中的httpd.worker更改为httpd(prefork模型)或httpd.event(event模型)。需要注意的是,修改配置后,需要重新启动httpd服务才能使配置生效。


  4、DSO

  Dynamic Shared Object,动态共享对象,即动态装卸载模块
  查看所有模块包括静态编译和动态加载的
# httpd -M  使用配置指令实现模块加载

  LoadModule <mod_name> <mod_path>
  模块路径mod_path可使用相对路径,即相对于ServerROOT(/etc/httpd)指向的路径而言,而在/etc/httpd/modules是一个指向/usr/lib64/httpd/modules/的软链接。因为真实的模块存放路径是/usr/lib64/httpd/modules/
# ll /etc/httpd/modules

# ls /usr/lib64/httpd/modules/

  启用和禁用模块:
  直接在/etc/httpd/conf/httpd.conf中修改
# vim /etc/httpd/conf/httpd.conf

  如上图所示,如果需要禁用某模块,直接在该模块指令前加上&quot;#&quot;号,使该指令注释掉即可,如果需要启用模块,删掉指令前的&quot;#&quot;号和空白字符。注意:修改后需要重启服务才能生效。
  ### Section 2:'Main' server configuration
  5、定义'Main' Server的文档页面路径,即DocmentRoot,也就是网页文件存放目录

  默认路径为/var/www/html/,直接修改路径即可,且路径要真实存在。
  DocumentRoot指向的路径为URL路径的起始位置:
  DocumentRoot &quot;/var/www/html&quot;
  如果在/var/www/html/test/index.html,那么访问该网页时,应该输入路径:http://x.x.x.x/test/index.html
  6、站点访问控制
  即可基于两种类型的路径指明对哪些资源进行访问控制
  基于文件系统路径:
  <Directory &quot;&quot;></Directory>
  <File &quot;&quot;></File> 针对单个文件做访问控制
  <FileMatch &quot;&quot;></FileMatch>基于匹配机制进行文件访问控制
  基于URL路径:
  <Location &quot;&quot;></Location>
  ...
  访问控制机制:
  基于来源地址(IP)
  基于用户账号密码
  7、Directory中基于来源地址实现访问控制

<Directory &quot;/www/htdocs&quot;>
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all
</Directroy>  如果所示,当需要对资源文件进行访问控制的时候,需要修改Directory指令所指定的路径,并且在其中修改访问控制指令,访问控制指令如下:
  (1)Options
  定义用户对此目录下资源进行访问时所支持的访问选项
  所有可用特性:Indexes Includes FollowSysmLinks SymLinksifOwnerMatch ExecCGI MultiViews None All
  在指定的选项前加&quot;-&quot;号,意为使此选项失效
  例:Options -Indexes Inclues
  Indexes:索引
  当没有定义主页面时,如果允许Indexes,那么会列出指定的文档根路径下的所有目录及文件,具有非常大的安全风险,CentOS默认设置有默认页面,会在没有定义主页面,而又允许Indexes时,用户就会访问到默认设置的页面,这个网页文件定义在/etc/htpd/conf.d/welcome.conf中

  Includes:允许使用mod_include提供的服务器端包含
           FollowSymLinks:允许跟踪符号链接文件;如果在资源目录中有符号链接,那么访问符号链接时,会自动追溯访问符号链接指向的文件。
           SymLinksifOwnerMatch:只有当前源文件和符号链接文件属主相同,才允许跟踪符号链接文件。
           ExecCGI:是否允许执行CGI脚本。
           MultiViews:是否允许多视图
           AllowOverride:是否允许在此处配置的目录访问控制覆盖每个目录自身的目录访问控制(每目录访问控制)。
      (2)基于来源地址的访问控制机制
        Order:
             Order allow,deny   只有allow的才allow,其他的都为deny,白名单
             Order deny,allow   只有deny的才deny,其他的都为allow,黑名单
             Allow from ...
             Deny from ...
             来源地址:
              IP

              NetAddr:支持多种格式,如下

                            172.16 == 172.16.0.0 == 172.16.0.0/16 == 172.16.0.0/255/255.0.0
              例:
    Order allow,deny
    Allow from 172.16.20.242  意为只放行172.16.20.242,其他的全部都拒绝。
    Order deny,allow
    Allow from 172.16.20.242  意为只拒绝172.16.20.242,其他的全部允许。
  8、定义默认主页面
DirectoryIndex index.html index.html.var    可以同时定义多个。

  9、日志设定
    当客户端访问http资源时会产生日志,日志有两类,错误日志和访问日志。
      错误日志:
        ErrorLog logs/error_log

          此路径是相对应/etc/httpd/而言,而不是根路径,即/etc/httpd/logs/error_log
  
        LogLevel warn 日志级别
        级别从高到低一次排列顺序为:
        emerg,alert,crit,error,warn,notice,info,debug
        emerg:紧急情况,系统无法使用
        alert:必须立即采取措施
        crit:致命情况
        error:错误情况
        warn:警告情况
        notice:一般重要情况
        info:普通信息
        debug:出错级别信息
        如果定义错误日志记录级别为某一级时,则表示会记录比这个级别更高的的错误日志,包括这个级别
        例:LogLevel warn定义记录级别为warn,那么按照排序,warn以上级别的日志都会记录,包括emerg,alert,crit,error,包括warn。
  访问日志:
  CustomLog logs/access_log combined
  日志存储位置  日志格式

  LogFormat &quot;%h %l %u %t \&quot;%r\&quot; %>s %b \&quot;%{Referer}i\&quot; \&quot;%{User-Agent}i\&quot;&quot; combined
  % 表示在记录日志时,根据用户请求将这些宏替换成对应的相关信息。如下:
  %h:客户端IP地址;
  %l:Remote logname(form identd,if supplied);-表示为空;并非表单登录名,而是使用mod_ident登陆
  %u:Remote user,(from auth;may be bogus if return status (%s)is 401);即基于httpbasic或digist登陆认证的用户名;
  %t:Time the request was received(standard english format),服务器收到请求的时间;
  %r:First line of request,请求报文的首行信息(method url version);
  %>s:响应状态码;响应状态中最后一段数值格式的响应状态码信息,而不包括原因短语;
  %b:响应报文的大小,单位是字节,不包含响应报文首部;
  %{Referer}i:请求报文当中“referer”首部的值;当前资源的访问入口,即从哪个页面中的超链接跳转而来;
  %{User-Agent}i:请求报文当中&quot;User-Agent&quot;首部的值;即发出请求用到的程序;
  详情:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
  10、路径别名
  Alias /URL/ &quot;/PATH/TO/SOMEDIR/&quot;
  示例:
  Alias /bbs/ &quot;/forum/htdocs&quot;
  http://www.xxx.com/bbs/index.html
  默认index.html存放在/www/htdocs/bbs/
  通过别名机制使得路径变成了/forum/htdocs/bbs/
  这时候如果访问http://www.xxx.com/bbs/index.html,就不是访问的/www/htdocs/bbs/index.html,而是/forum/htdocs/bbs/index.html
  11、设定默认字符集
  AddDefaultCharset XXX

  常见的中文字符集:GBK,GB2312,GB18030
  12、基于用户的访问控制
  即使用用户名密码的机制对资源的访问进行控制。
  认证质询:
  WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户提供账号和密码;
  认证:
  Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过,则服务器端发送响应的资源;

  认证方法:
  basic:明文
  digest:消息摘要,即经过md5加密,很多老版本的浏览器不支持digest认证;不过可以放置在https中使用,现在大多数都是通过表单认证(使用编写的认证程序进行认证,与http程序无关),很少通过这种认证。
  安全域:需要用户认证后方能访问的路径(多为敏感资源或路径);应该通过名称对其进行标识,并用于告知用户认证的原因;
  用户的账号和密码,一般使用虚拟账号;避免使用系统账号,产生安全隐患,仅用于访问某服务器时用到的认证标识;
  存储:
  文本文件
  SQL数据库
  ldap 轻量目录访问协议
  nis ???
  basic认证:
  (1)定义安全域
<Directory &quot;&quot;>
        Options None
        AllowOverride None
        AuthType Basic    //认证类型为明文认证
        AuthName &quot;STRING&quot;   //认证名为为STRING
        AuthUserFile &quot;/PATH/TO/HTTPD_USER_PASSWD_FILE&quot;    //认证所用的用户文件存储位置
        Require user username1 usename2 ...   //可用的用户,即那些用户可以通过认证,取自用户文件
</Directory>  例:

  首先在httpd.conf中做好相应配置,然后创建存储用户名和密码的用户文件
  (2)提供账号和密码存储(文本文件)
  用户文件需要使用htpasswd命令进行创建和管理等
  htpasswd [options] PASSWORD_FILE USERNMAE
  -c:自动创建password_file,因此,仅应该在添加第一个用户时使用;
  -m:md5加密用户密码
  -s:sha1加密用户名密码
  -D:删除指定用户
  例:

  可以通过cat命令查看密码文件,可以看出用户的密码都是加密存放的。
  (3)实现基于组进行认证
<Directory &quot;&quot;>
    Options None
    AllowOverride None
    AuthType Basic
    AuthName &quot;STRING&quot;
    AuthUserFile &quot;/PATH/TO/HTTPD_USER_PASSWD_FILE&quot;
    AuthGroupFile &quot;/PATH/TO/HTTPD_GROUP_FILE&quot;
    Require group GROUP1 GROUP2 ...
</Directory>  要提供用户文件和组文件

  组文件中每一行定义一个组;与用户不就不同的是需要手动创建
  GRP_NAME:user1 user2 user3 ...
[root@localhost htdocs]# vim /etc/httpd/conf.d/.htpgroup
MyGroup1: tom jerry
[root@localhost htdocs]#  示例:

  13、虚拟主机,即可以在一个物理服务器上提供多个网页站点服务
  有三种实现方案:
  基于IP:为每个虚拟主机准备至少一个IP地址
  基于PORT:为每个虚拟主机准备至少一个专用port;实践中很少使用
  基于hostname:为每个虚拟主机准备至少一个专用hostname;实践中很多使用
  可混合使用上述三种方式中任意方式:
  注意:一般虚拟主机不能与中心主机混用,所以,要使用虚拟主机,线禁用中心主机;禁用中心主机需要注释DocumentRoot
  每个虚拟主机都有自己的专用配置:
  <VirtualHost &quot;IP:PORT&quot;>
  ServerName &quot;&quot;
  DocumentRoot &quot;&quot;
  ServerAlias
  ErrorLog
  CustomLog
  </VirtualHost>
  例1:基于ip

  需要有多个IP地址,httpd.conf中配置好后,还需要创建好网页文件,否则会报错。日志文件制定好路径和文件名后,系统会自动生成的。

  例2:基于port

  需要用到除80以外的端口时,需要额外修改Listen指令

  例3:基于hostname

  首先需要将NameVirtualHost *:80启用,2.2需要,2.4不需要启用,并且将*号改为监听的IP地址

  配置如下

  14、内置的status页面
  可以通过此页面查看关于服务器的相关信息

  在Order指令中,可以配置允许那些IP用户访问此页面,这是非常有必要的
  配置完毕后,需要重载配置文件才能生效,访问地址为: http://x.x.x.x/server-status
  如果需要查看更详细的信息,需要启用ExtendedStatus On

  实现:基于账号实现访问控制,在location中实现
  写的比较潦草,如有遗漏错误和争议之处,欢迎大家的批评指正和讨论,谢谢。

运维网声明 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-449558-1-1.html 上篇帖子: CentOS6上编译安装httpd2.4 下篇帖子: centos用yum安装lnmp
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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