码迷,mamicode.com
首页 > Web开发 > 详细

++++++++++HTTP基本特性及配置

时间:2017-09-25 11:52:35      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:博客   linux   运维   

ASF, 协议实现的软件程序, HTTPD特性

HTTP基本应用,客户端工具使用(telnet, elinks, curl)


ASF: Apache Software Foundation  Apache 软件基金会

FSF: Free Software Foundaton    自由软件基金会


ASF赖以起家的是: httpd<命名:apache>


http协议实现

技术分享


Http特性

模块化设计:DSO(Dynamic Share Object)

MPM机制(Multipurpose Process Modules) 多路处理模块

技术分享


HTTP安装

技术分享

httpd.i686       //The Apache HTTP Server is a powerful, efficient, and extensible
                //强大、高效、可扩展
/etc/httpd                           //家目录                  
/etc/httpd/conf.d                    //配置片段目录
/etc/httpd/conf/httpd.conf           //主配置
/etc/httpd/logs                      //日志目录
/etc/httpd/modules                   //模块目录
/etc/httpd/run                       //运行中的进程的数据
/etc/rc.d/init.d/httpd               //服务脚本
/etc/sysconfig/httpd                 //服务脚本配置

/usr/lib/httpd/modules
/usr/lib/httpd/modules/mod_actions.so     //DSO机制,动态共享对象
/usr/sbin/apachectl               //apachectl程序
/usr/sbin/httpd                   //MPM为IO,串行响应的进程
/usr/sbin/httpd.event             //MPM为复用I/O模型,并行响应的进程 <2.2的httpd,event不成熟>
/usr/sbin/httpd.worker            //MPM.............................
    //ps axu | fgrep httpd可查看
    
/usr/share/doc/httpd-2.2.15         //<DOCUMENTATION>
/usr/share/doc/httpd-2.2.15/ABOUT_APACHE
/usr/share/doc/httpd-2.2.15/CHANGES
/usr/share/doc/httpd-2.2.15/LICENSE
/usr/share/doc/httpd-2.2.15/NOTICE
/usr/share/doc/httpd-2.2.15/README
/usr/share/doc/httpd-2.2.15/VERSIONING

/usr/share/man/man8/apachectl.8.gz      //<MAN Document>
/usr/share/man/man8/htcacheclean.8.gz
/usr/share/man/man8/httpd.8.gz
/usr/share/man/man8/rotatelogs.8.gz
/usr/share/man/man8/suexec.8.gz

/var/cache/mod_proxy                   //<缓存目录>
/var/lib/dav                           //<程序运行中的数据>
/var/log/httpd                         //《日志目录》
/var/run/httpd                         //《运行中的httpd进程的数据》

/var/www/error/                //错误页面html网页存放目录
/var/www/html                  //DocuRoot目录,资源路径的根映射的位置


httpd配置文件

/etc/httpd/conf/httpd.conf 

//首次配置需要备份文件:
# cp -v /etc/httpd/conf/httpd.conf{,.bak}

配置文件格式

# fgrep ‘Section‘ /etc/httpd/conf/httpd.conf  
### Section 1: Global Environment   //全局环境:定义httpd通用功能特性
### Section 2: ‘Main‘ server configuration //主配置段:一个服务器提供单个站点
### Section 3: Virtual Hosts               //虚拟主机:一个服务器提供多个站点

配置指令格式

Directive(指令)    Value(值)
指令:不区分大小写
值:可能区分大小写


1、port

技术分享

使用示例

1、备份文件
# cp -v /etc/httpd/conf/httpd.conf{,.bak}

监听在不同端口
Listen 80
Listen 8080

2、重启
# service httpd restart
# ss -tnl 
State       Recv-Q Send-Q                                                               Local Address:Port                                                                 Peer Address:Port 
LISTEN      0      128                                                                             :::8080                                                                           :::*     
LISTEN      0      128                                                                             :::80                                                                             :::*


2、持久和非持久连接

技术分享//并发访问量过大场景,时间或数量限制过大时,可能会导致后续的请求被[拒绝服务],可以关闭或调整时间或数量限制


不同版本对应的特性

技术分享


httpd-2.0配置持久连接

KeepAlive Off         //持久连接功能

MaxKeepAliveRequests 100 // persistent connetion 内所允许的最大请求数量,<调高数字获取较大性能>

KeepAliveTimeout 15    //在TCP连接上等待请求的最大秒数


telnet协议客户端命令

技术分享

技术分享

使用示例

技术分享

连接即刻断开

技术分享

连接不会立即断开

技术分享


3、MPM 并发响应模型Multipath Process Module

10多种[适用在多种平台之上]
Linux: prefork, worker, event
编译时,一次只能编译单个模块


1)查看当前使用的模块

技术分享

2)查看装载的模块

技术分享

3)更换MPM

技术分享

复用IO,线程

启动瞬间:5个,1个僵尸
root      2494  1.0  1.4  11688  3560 ?        Ss   19:07   0:00 /usr/sbin/httpd.worker
apache    2496  0.0  0.0      0     0 ?        Z    19:07   0:00 [httpd.worker] <defunct>
apache    2497  0.0  1.1 289420  2964 ?        Sl   19:07   0:00 /usr/sbin/httpd.worker
apache    2498  0.0  1.1 289420  2960 ?        Sl   19:07   0:00 /usr/sbin/httpd.worker
apache    2499  0.0  1.1 289420  2960 ?        Sl   19:07   0:00 /usr/sbin/httpd.worker
apache    2528  0.0  1.1 289420  2960 ?        Sl   19:07   0:00 /usr/sbin/httpd.worker

过了几秒后,4个线程
root      2224  0.0  1.4  11688  3568 ?        Ss   19:06   0:00 /usr/sbin/httpd.worker
apache    2228  0.0  1.1 289420  2972 ?        Sl   19:06   0:00 /usr/sbin/httpd.worker
apache    2229  0.0  1.1 289420  2972 ?        Sl   19:06   0:00 /usr/sbin/httpd.worker
apache    2230  0.0  1.1 289420  2964 ?        Sl   19:06   0:00 /usr/sbin/httpd.worker

复用IO,线程
root      2644  0.2  1.4  11676  3548 ?        Ss   19:08   0:00 /usr/sbin/httpd.event
apache    2647  0.0  1.1 289408  2848 ?        Sl   19:08   0:00 /usr/sbin/httpd.event
apache    2648  0.0  1.1 289408  2852 ?        Sl   19:08   0:00 /usr/sbin/httpd.event
apache    2649  0.0  1.1 289408  2852 ?        Sl   19:08   0:00 /usr/sbin/httpd.event


4)MPM配置详解 /etc/httpd/conf/httpd.conf <网站的承载能力有一定影响>

# prefork MPM
# StartServers: 启动服务器后,预留的进程数
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: 服务器的生命周期内为MaxClients准备的最大值
# MaxClients:  最大并发数
# MaxRequestsPerChild: 每个进程最大响应请求数
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

# worker MPM
# StartServers:  启动服务预留进程数
# MaxClients:    最大并发数
# MinSpareThreads: 最小并发数
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: 每个进程内的线程数
# MaxRequestsPerChild: 每个线程最多响应请求数
<IfModule worker.c>
StartServers         4
MaxClients         300
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25 
MaxRequestsPerChild  0 //0表示没有上限
</IfModule>

配置:影响网站的承载能力

PV承载量= \(每秒请求资源数 * 86400 \)/每个页面的资源数 //满载工作

考虑:全天满负荷运行?带宽使用大小?

带宽:每个PV消耗多少KB * PV承载量

技术分享

技术分享

使用示例

查看此模块已经被装载
# httpd -M | fgrep deflate_module
deflate_module (shared)

禁用 #LoadModule deflate_module modules/mod_deflate.so

重载 # service httpd reload

查看 
# httpd -M | fgrep deflate_module
Syntax OK


4、URL资源路径映射之一:DocRoot <资源路径的根映射为文件系统的哪个目录>

技术分享

使用示例:

默认配置

在配置文件中,定义DocumentRoot指令

DocumentRoot "/var/www/html"

给出默认主页

# cat > /var/www/html/index.html << EOF
<html>
  <head>
  <title>MageEdu</title>
  </head>
  <body>
    <h1>Hello</h1>
	<p> <a href="https://s5.51cto.com/wyfs02/M00/07/31/wKiom1nEuS7Tii_KAAA2TqP_0qY316.png">haha</p>
  </body>
</html>
EOF

重载配置文件

# httpd -t //先测试语法
# service httpd reload   //重载配置文件

在浏览器中访问时: 

技术分享


非默认配置


在配置文件中,定义DocumentRoot指令

DocumentRoot "/www/htdocs"

准备根映射路径

# install -d /www/htdocs
# echo ‘Test Page‘ > /www/htdocs/index.html

重载配置文件

# httpd -t
# service httpd reload

二次测试

技术分享


5、站点访问控制

技术分享



6、默认主页面

DirectoryIndex index.html index.html.var

自左向右,依次匹配给出目录下的文件,存在时,显示


7、文件系统路径访问控制

7、1基于来源地址

技术分享技术分享

技术分享


使用示例


Indexes<下载站使用>

1、允许索引
DocumentRoot "/www/htdocs"
<Directory "/var/www/html">
Options Indexes FollowSymLinks

# mv /etc/httpd/conf.d/welcome.conf{,.bak}
# mv /var/www/html/index.html{,.bak}

2、重载
# httpd -t
# service httpd reload

技术分享

2、允许索引
DocumentRoot "/www/htdocs"
<Directory "/www/htdocs">
Options Indexes FollowSymLinks

# httpd -t
# service httpd reload

技术分享

FollowSymlinks

1、允许跟踪
DocumentRoot "/www/htdocs"
<Directory "/www/htdocs">
Options Indexes FollowSymLinks

# ln -s / /www/htdocs/hello

技术分享

技术分享

2、不允许跟踪
DocumentRoot "/www/htdocs"
<Directory "/www/htdocs">
Options Indexes -FollowSymLinks

# httpd -t
# service httpd reload

技术分享


来源地址访问控制

配置
Order deny,allow
deny from 192.168.1.100

技术分享


7、2用户访问控制

安全域:认证后方能访问的目录,应该用名称标识

定义在/etc/httpd/conf/httpd.conf文件中

技术分享

技术分享

技术分享


1)基于用户认证

技术分享

2)基于组认证 

技术分享


使用示例

1、创建目录,使之能访问

# install -d /www/htdocs/admin
# echo "hello" > /www/htdocs/admin/index.html

2、添加配置

<Directory "/www/htdocs/admin">
    Options None
    AllowOverride None
    AuthType Basic
    AuthName "Administrator private"
    AuthUserFile "/etc/httpd/conf.d/.htpasswd"
    Require valid-user
</Directory>
# httpd -t
# service httpd reload
# htpasswd -c -m /etc/httpd/conf.d/.htpasswd tom
# htpasswd  -m /etc/httpd/conf.d/.htpasswd obama
# htpasswd  -m /etc/httpd/conf.d/.htpasswd obama

技术分享


3、添加组配置

<Directory "/www/htdocs/admin">
    Options None
    AllowOverride None
    AuthType Basic
    AuthName "Administrator private"
    AuthUserFile "/etc/httpd/conf.d/.htpasswd"
    AuthGroupFile "/etc/httpd/conf.d/.htgroup"
    Require group weblogic
</Directory>

# httpd -t
# service httpd reload


8、日志设定

错误日志

技术分享

1、日志为链接路径

技术分享


访问日志

技术分享

官方:httpd.apache.org http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#logformat
Documetation --> 2.2 --> 日志文件
192.168.206.1 - tom [18/Sep/2017:02:59:24 +0800] "GET /admin/ HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
%h 宏,替换为请求者IP 
%h remote host, 客户端IP
%l remote logname,登陆的用户名, mod_ident模块 为空时,用 " - " 表示 
%u remote user, 用户访问控制的basic, digst认证的用户名 为空时,用 " - " 表示 
%t Time the request was received (standard english format) 请求被服务器接收的时间
%r First line of request 请求报文的首行: telnet> GET / HTTP/1.1
%>s Status 响应状态码
%b  Size of response in bytes excluding[排除] HTTP headers

%{Referer}i  请求报文当中referer变量值,到达当前页面的入口
    " - " 网站有名
    "不为空时,网站的广告有效"
${User-Agent}i 请求报文中,usergent变量值:
    用户代理:发起请求的用到的进程< elink, ab, telnet, 浏览器, curl > 搜索引擎是爬虫爬出来的>


9、路径别名

技术分享


使用示例

DocumentRoot "/www/htdocs"
Alias /bbs "/forum/htdocs"
# mkdir -pv /forum/htdocs
# cat /forum/htdocs/index.html 
<html>
   <head> 
   <title>Test</title>
   </head> 
   <body>
     <h1></h1>
     <p> <a href="https://s5.51cto.com/wyfs02/M01/A5/E2/wKioL1nEuHezY3RsAABFaz2unFQ496.png">hello</a>
   </body>
</html>

访问: http://192.168.206.128/bbs/


10、字符集设定

技术分享


11、虚拟主机

虚拟主机的类型

技术分享

基于名称完成不同虚拟主机的识别

封装时: HTTP首部、TCP首部、IP首部、帧首部..

    Host: 浏览器键入的主机名 //"应用层首部"中附加,非通信子网

技术分享

配置前提

技术分享


虚拟主机配置格式

技术分享


1、基于IP,配置虚拟主机(不易记,IP需要购买)

#DocumentRoot "/www/htdocs"
<VirtualHost 192.168.206.128:80>
  ServerName web1.magedu.com
  DocumentRoot "/www/web1/htdocs"
</VirtualHost>
<VirtualHost 192.168.206.129:80>
  ServerName web2.magedu.com
  DocumentRoot "/www/web2/htdocs"
</VirtualHost>
# mkdir -pv /www/{web1,web2,web3,web4,web5,web6}/htdocs
# echo "web1.magedu.com" > /www/web1/htdocs/index.html
# echo "web2.magedu.com" > /www/web2/htdocs/index.html

# ip addr add 192.168.206.139/24 dev eth0

测试

# httpd -t
Syntax OK
# service httpd reload

登陆

技术分享

技术分享


2、基于端口,配置虚拟主机(用的少)

Listen 8080
Listen 8888
<VirtualHost 192.168.206.139:8080>
  ServerName web3.magedu.com
  DocumentRoot "/www/web3/htdocs"
</VirtualHost>
<VirtualHost 192.168.206.139:8888>
  ServerName web4.magedu.com
  DocumentRoot "/www/web4/htdocs"
</VirtualHost>

# echo "web3.magedu.com" > /www/web3/htdocs/index.html
# echo "web4.magedu.com" > /www/web4/htdocs/index.html

测试

# httpd -t 
# service httpd restart

登陆

技术分享


技术分享


3、基于Host,配置虚拟主机(在应用层封装Host首部即可)

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName web5.magedu.com
  DocumentRoot "/www/web5/htdocs"
</VirtualHost>
<VirtualHost *:80>
  ServerName web6.magedu.com
  DocumentRoot "/www/web6/htdocs"
</VirtualHost>

# echo "web5.magedu.com" > /www/web5/htdocs/index.html
# echo "web6.magedu.com" > /www/web6/htdocs/index.html

测试

# httpd -t
# service httpd reload

登陆

1、启动一个新的客户机
完成主机名到ip的映射
192.168.206.128 web1.magedu.com web2.magedu.com web3.magedu.com web5.magedu.com
2、测试
# yum -y install curl

# curl web5.magedu.com
web5.magedu.com
# curl web6.magedu.com
web6.magedu.com









本文出自 “Reading” 博客,请务必保留此出处http://sonlich.blog.51cto.com/12825953/1968229

++++++++++HTTP基本特性及配置

标签:博客   linux   运维   

原文地址:http://sonlich.blog.51cto.com/12825953/1968229

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!