Linux web服务与HTTP协议基础概念

    今天我们来说一下Web服务器当中的apache,在早些时候基本算是Web服务器市场占有率最高的一款开源Web服务器产品,其功能众多、稳定且开源,使得apache非常流行。下面我们来讲一下Web相关的知识及httpd的部分应用


一、Web相关知识

1、URI与URL

URI: Uniform Resource Indentifier,统一资源标示符。全局范围内,可以唯一引用某一个独立资源的命名方式被称为统一资源标示符;统一是指路径格式上的统一。

URL:Uniform Resource Locator,统一资源定位符,用于描述在互联网上,互联网资源的统一表示格式,是URI的子集。表示格式为protocol://HOST:port/path/to/file


2、Web资源(对象)

能通过URL唯一标记,并且能被客户端访问的资源被称为Web资源,也可称为Web对象,如http://www.baidu.com/logo.gif;多个资源很可能被整合为一个html文档


3、HTTP Method

  • HEAD

  • GET

  • PUT

  • POST

  • DELETE

  • TRACE

  • OPTIONS

  • CONNECTION


4、MIME

Multipurpose Internet Mail Extension, 多用途互联网邮件扩展,即将非文本数据在传输前重新编码为文本格式,接收方能够用相反的方式将其重新还原为原来的格式,还能够调用相应的程序来打开此文件


5、MVC

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。


6、请求报文与相应报文

(1)、请求报文语法

<method> <request-URL> <version>
<headers>

<entity-body> 

例如:

GET / HTTP/1.1
Accept:text/css,*/*;q=0.1
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8
Host:httpd.apache.org

(2)、响应报文语法

<version> <status> <reason-phrase>
<headers>

<entity-body>

例如:

HTTP/1.1 200 OK
Accept-Ranges:bytes
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:1106
Content-Type:text/css
Date:Wed, 16 Dec 2015 11:11:13 GMT
ETag:"e20-4d6aa6c1982c8-gzip"
Keep-Alive:timeout=30, max=96
Last-Modified:Wed, 27 Feb 2013 01:09:13 GMT
Server:Apache/2.4.7 (Ubuntu)
Vary:Accept-Encoding

上面两个报文的第一行通常称作报文“起始行(start line)”;
后面的标签格式的内容称作首部域(Header field),每个首部域都由名称(name)和值(value)组成,中间用逗号分隔。
另外,响应报文通常还有一个称作Body的信息主体,即响应给客户端的内容。

7、HTTP状态码

    ①1xx: 纯信息类

    ②2xx: “成功”类的信息 (200, 201, 202)

    ③3xx:重定向类的信息 (301, 302, 304)

    ④4xx: 客户端错误类的信息 (404)

    ⑤5xx:服务器端错误类的信息


8、Web服务器的主要操作

    ①建立连接――接受或拒绝客户端连接请求

    ②接收请求――通过网络读取HTTP请求报文

    ③处理请求――解析请求报文并做出相应的动作

    ④访问资源――访问请求报文中相关的资源

    ⑤构建响应――使用正确的首部生成HTTP响应报文

    ⑥发送响应――向客户端发送生成的响应报文

    ⑦记录日志――当已经完成的HTTP事务记录进日志文件

    

9、http/1.1

增强了缓存的功能

长连接:keep-alive


10、MPM:Multi-Processing Modules

①mpm_winnt:windowsNT专用


②prefork (一个请求用一个进程响应,启动多个进程)

<IfModule prefork.c>
StartServers       8                 # 服务启动时所启动的httpd进程个数
MinSpareServers    5                  # 服务运行过程当中最小保持的空闲进程数
MaxSpareServers   20                   # 服务运行过程当中最大保持的空闲进程数
ServerLimit      256                 # 指定MaxClients上限
MaxClients       256                 # 服务运行过程中最多允许的用户同时请求连接数
MaxRequestsPerChild  4000              # 服务运行过程中每个进程最多允许处理的用户请求数
</IfModule>

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

<IfModule worker.c>
StartServers         4     # 服务启动时所启动的httpd进程个数
MaxClients         300     # 服务运行过程中最多允许的用户同时请求连接数
MinSpareThreads     25       # 服务运行过程中最小保持的空闲线程数
MaxSpareThreads     75       # 服务运行过程中最大保持的空闲线程数
ThreadsPerChild     25       # 每个进程生成的线程个数
MaxRequestsPerChild  0        # 每个进程最多允许处理的用户请求数(为0,因为是线程处理用户请求,并不是进程)
</IfModule>

④event   (一个进程处理多个请求)


11、httpd

-V:查看httpd服务版本以及编译的参数

-l:显示编译进httpd的模块列表,但是不会显示使用LoadModules加载的动态模块

-M:显示加载的静态和动态模块

-t:检查配置文件是否有语法错误



12、基于用户或组访问控制

(1)、允许用户访问

AllowOverride AuthConfig

AuthType Basic
AuthName "Personal area..."
AuthUserFile "/etc/httpd/conf/.htpasswd"
Require valid-user

touch /etc/httpd/conf/.htpasswd
htpasswd -c -m /etc/httpd/conf/.htpasswd tom
htpasswd -m /etc/httpd/conf/.htpasswd hadoop

(2)、允许用户组访问

AllowOverride AuthConfig

AuthType Basic
AuthName "Personal area..."
AuthUserFile "/etc/httpd/conf/.htpasswd"
AuthGroupFile "/etc/httpd/conf/.htgroup"
Require group groupname

touch /etc/httpd/conf/.htpasswd
touch /etc/httpd/conf/.htgroup
htpasswd -c -m /etc/httpd/conf/.htpasswd tom
htpasswd -m /etc/httpd/conf/.htpasswd hadoop

/etc/httpd/conf/.htgroup格式:groupname:user1 user2 ...

13、基于ip的访问控制

AllowOverride none
Order Deny,Allow
Deny from 172.16.1.100

地址表示方法
IP:172.16.1.110

network/netmask:172.16.1.110/16

Host:www.soysauce.com
 
domain name:soysauce.com

Partial IP:172.16(172.16.0.0/16)

14、用户个人家目录站点

注释 UserDir disabled
启用 UserDir public_html

useradd hadoop
su - hadoop
mkdir public_html
echo "hadoop's personal site" >> public_html/index.html
chmod o+x /home/hadoop
exit

service httpd restart

15、PV与UV

PV(Page View):每天的页面访问量

UV(User View):每天的独立IP访问量


16、路径别名

Alias /URL "local_path"

例如:Alias /images/  "/tmp/test"

http://172.16.1.102/images/ 就等于是访问tmp/test目录下的文档

17、虚拟主机配置 

(1)、基于IP的虚拟主机配置

<VirtualHost 172.16.1.110:80>
    ServerName www.a.com
    DocumentRoot "/data/www/a.com"
    CustomLog "/var/log/httpd/a.com/access_log"
    ErrorLog "/var/log/httpd/a.com/error_log"
    <Directory "/data/www/a.com">
        Options none
        AllowOverride none
        Order Deny,Allow
        Allow From all
    </Directory>
</VirtualHost>

<VirtualHost 172.16.1.111:80>
    ServerName www.b.net
    DocumentRoot "/data/www/b.net"
    CustomLog "/var/log/httpd/b.net/access_log"
    ErrorLog "/var/log/httpd/b.net/error_log"
    <Directory "/data/www/b.net">
        Options none
        AllowOverride none
        Order Deny,Allow
        Allow From all
    </Directory>
</VirtualHost>

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

<VirtualHost 172.16.1.110:80>
    ServerName www.a.com
    DocumentRoot "/data/www/a.com"
    CustomLog "/var/log/httpd/a.com/access_log"
    ErrorLog "/var/log/httpd/a.com/error_log"
    <Directory "/data/www/a.com">
        Options none
        AllowOverride none
        Order Deny,Allow
        Allow From all
    </Directory>
</VirtualHost>

<VirtualHost 172.16.1.110:8080>
    ServerName www.c.edu
    DocumentRoot "/data/www/c.edu"
    CustomLog "/var/log/httpd/c.edu/access_log"
    ErrorLog "/var/log/httpd/c.edu/error_log"
    <Directory "/data/www/c.edu">
        Options none
        AllowOverride none
        Order Deny,Allow
        Allow From all
    </Directory>
</VirtualHost>

(3)、基于主机名的虚拟主机配置

DNS解析能正确的解析两个主机名到自己的IP地址上
/etc/hosts
172.16.1.103    www.b.net
172.16.1.103    www.d.org
 
NameVirtualHost 172.16.1.111:80

<VirtualHost 172.16.1.111:80>
    ServerName www.b.net
    DocumentRoot "/data/www/b.net"
    CustomLog "/var/log/httpd/b.net/access_log"
    ErrorLog "/var/log/httpd/b.net/error_log"
    <Directory "/data/www/b.net">
        Options none
        AllowOverride none
        Order Deny,Allow
        Allow From all
    </Directory>
</VirtualHost>

<VirtualHost 172.16.1.111:80>
    ServerName www.d.org
    DocumentRoot "/data/www/d.org"
    CustomLog "/var/log/httpd/d.org/access_log"
    ErrorLog "/var/log/httpd/d.org/error_log"
    <Directory "/data/www/d.org">
        Options none
        AllowOverride none
        Order Deny,Allow
        Allow From all
    </Directory>
</VirtualHost>

18、默认虚拟主机配置

<VirtualHost _default_:80>
DocumentRoot /www/default80
# ...
</VirtualHost>

<VirtualHost _default_:*>
DocumentRoot /www/default
# ...
</VirtualHost>

19、server-status配置

<Loacation /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 172.16.1.102
</Location>

<Location> 指令用于定义url

<Directory> 指令用于本地文件系统路径

20、CGI脚本

修改主配置文件httpd.conf
启用 LoadModule cgi_module modules/mod_cgi.so
  ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
  
在/var/www/cgi-bin目录下创建一个脚本test
#!/bin/bash
cat << EOF
Content-Type:text/html
<pre>
<h1>$(/bin/date)</h1>
</pre>
EOF

然后增加执行权限 chmod +x test

21、apache与php结合的方式

    ①CGI

    ②Module

    ③FastCGI




你可能感兴趣的:(linux,httpd)