HTTPHyper Text Transfer Protocol超文本传输协议

HTMLHyper Text Mark-up Language超文本标记语言

URIUniform Resource Identifier统一资源提示符

URLUniform Resource Locator统一资源定位符

http协议的版本:

http0.9只能传输html文档,1991年

http1.0支持多媒体数据的处理,保持连接。有缓存功能

http1.1支持更多的请求方法,更加精细的缓存控制,持久连接

MIME:Multipurpose Internet Mail Extensions多用途互联网邮件扩展

base64:将二进制数据编码成文本发送,并能够让接受方还原回原来的格式

MIME:多媒体类型

major/minor

HTMLtext/html

ASCIItext/plagin

JPEGimage/jpeg

GIFimage/gif

QuickTime(流媒体)video/quicktime

HTTP事务:一次请求以与其对应的响应

HTTP方法:GET、PUT、HEAD、POST、DELETE

HTTP请求:request

HTTP请求报文

报文格式:

<method><request-url><version>

<headers>

<entity-body>

HTTP响应:response

HTTP响应报文

报文格式:

<version><status><reason-phrase>

<headers>

<entity-body>

<method>请求方法,希望服务器端执行的动作,如GET、HEAD、POST等

<request-url>请求的资源,可以是相对路径,也可以是完整的URL

<version>协议版本,格式HTTP/<major>.<minor>,如http/1.0

<headers>HTTP首部

<status>状态码

<reason-phrase>原因短语,数字状态码易读信息

<entity-body>主体部分

http协议:是一种stateless(无状态)协议一次HTTP事务结束后,链接自行断开

加速方式:并行请求、持久连接

HTTP的请求方法:GET、HEAD、POST、PUT、DELETE、OPTIONS、TRACE

扩展方法:LOCK、MKCOL、COPY、MOVE

GET请求获取一个资源,需要服务器发送

HEAD跟GET相似,但其不需要服务发送资源而仅传回响应首部

POST支持HTML表单提交,表单中有用户填入的数据,这些数据会发送到服务器端,由服务器存储至某位置(例如发送处理程序)

PUT与GET相反,向服务写入文档,如发布系统

DELETE请求删除URL指向的资源

OPTIONS探测服务器端对某资源所支持的请求方法

TRACE追踪请求资源要经过的防火墙、代理或网关等

响应报文代码

1XX:信息性状态码

2XX:成功状态码

200:OK

201:(已创建)请求成功并且服务器创建了新的资源

3XX:重定向状态码

301:Moved Permanebtly 永久重定向,在响应报文中使用首部“Location:URL”指定资源现在所在的位置

302:Found 临时重定向,在响应报文中使用首部“Location:URL”指定临时资源位置

304:Not Modified,条件式请求中使用

4XX:客户端的错误

403:Forbidden,请求被服务器拒绝

404:Not Found,服务器无法找到请求的URL

405:Method Not Allowed,不允许使用此方法请求响应的URL

5XX:服务器类的错误

500:Internal Server Error,服务器内部错误

502:Bad Gateway:代理服务器从上游收到一条伪响应

503:Service Unavailable,服务器此时无法提供服务,但将来可能可用

HTTP首部

通用首部:请求和响应都可以使用的

请求首部:请求报文使用

响应首部:响应报文使用

实体首部:用于指定实体属性

扩展首部:非标准首部,可能是由程序开发者创建的,例如X-Forward-For

通用首部:

Connection定义C/S之间关于请求/响应的有关选项,对于http/1.0,Connection为keep-alive

Via显示了报文经过的中间节点

Cache-Control缓存指示,通过指定首部字段Cache-Control,就能操作缓存的工作机制

Pragma只用在客户端发送的请求中,所有的中间服务器不返回缓存的资源

请求首部:

Cilent-IP         请求端I地址

Host请求的主机名和端口号,虚拟主机环境下用于不同的虚拟主机

Referer指明了请求当前资源的原始资源的URL

User-Agent用户代理,使用什么工具发出的请求

Accept首部:用户标明客户自己更倾向于支持使用的能力

Accept指明服务器能发送的媒体类型

Accept-Charset支持使用的字符集

Accept-Encoding支持使用的编码方式

Accept-Language支持使用的语言

条件请求首部:

Expect客户端使用首部字段Except来告知服务器,期望出现的某种指定行为

If-Modified-Since是否在指定的时间以来修改过此资源

If-None-Match该字段值得实体标记值与请求资源的ETag不一致时,它就告知服务器处理该请求

跟安全相关的请求首部:

Authorication客户端提交给服务端的认证数据,如账号和密码

Cookie客户端发送给服务器端身份标识

Cookie2客户端发送给服务器端身份标识

响应首部:

Age响应持续的时间

Server向客户端标明服务器程序名称和版本

协商首部:

Accept-Ranges对当前资源来讲,服务器所能够接受的范围类型

Vary首部列表,服务器会根据列表中的内容挑选出最适合的版本发送给客户端

跟安全相关的响应首部

Set-Cookie服务器端在某客户端第一次请求时发给的令牌

Set-Cookie2服务器端在某客户端第一次请求时发给的令牌

WWW-Authenication质询,即要求客户端提供账号和密码

实体首部:

Location资源的新位置

Allow允许对此资源使用的请求方法

内容首部:

Content-Encoding告知客户端服务器对实体的主体部分选用的内容编码方式

Content-Language告知客户端,实体主体使用的自然语言

Content-Length表明了实体主体部分的大小

Content-type说明了实体主体内对象的媒体类型,该字段用type/subtype形式赋值

Content-Range针对范围请求,返回响应时使用的首部字段,能告知客户端作为相应返回的实体的哪个部分符合范围请求

Content-Location给出与报文主体返回资源对应的URI

缓存首部:

ETag实体标签

Expires过期标签

Last-Modified上一次的修改时间

一个Web请求的基本过程

建立连接

接收请求

处理请求

访问资源

构建响应

发送响应

记录日志

Web服务器的输入输出结构

单线程I/O结构

多线程I/O结构

复用的I/O结构(一个进程响应多个请求)

复用多线程I/O结构:多个线程,每个线程响应多个请求

httpd:高度模块化

core+modules

DSO:Dynamic Shared Object 动态模块对象

MPM:Multipath Processing Module,多道处理模块,非一个模块,而是对一种特性的称谓

prefork一个进程一个请求(预先创建好),

worker一个进程多个线程,一个线程一个请求

event一个进程响应多个请求,不生成线程

event-driven事件驱动,主要目的在于实现单线程响应多个请求

http版本

http-1.3

http-2.0

http-2.2,不支持event

http-2.4

httpd的功能特性:

路径别名:alias

用户认证:authentication

虚拟主机:virtual host

反向代理:

负载均衡:

用户站点:

CGI:Common Gateway Interface

安装httpd

yum -y install  httpd

服务脚本/etc/rc.d/init.d/httpd

脚本配置文件/etc/sysconfig/httpd

运行目录/etc/httpd

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

扩展配置/etc/httpd/conf.d/*.conf

文档根目录/var/www/html

CGI/var/www/cgi-bin/

Docroot:文档根目录

配置文件:

/etc/httpd/conf/httpd.conf

配置参数 值

配置指令不区分字符大小写

值有可能区分大小写

有些指令可以重复出现多次

配置文件格式

全局配置

主机配置用于仅提供一个站点时

虚拟主机配置用于提供多个站点时

配置文件语法测试

service httpd configtest

httpd -t

绝大多数配置修改后,可以用过service httpd reload 来生效,如果修改了监听的地址或端口,必须重启服务才能生效

1.监听套接字

Listen [IP:]port

此指令可以出现多次,用于指定监听多个不同的套接字

Listen 80

Listen 172.16.100.7:8080

2.配置使用Keepalive

KeepAlive {On|Off}

KeepAliveTimeout 2超时时间

MaxKeepAliveRequests 50 最大连接

未设置keepalive时,一次HTTP事务结束后,链接自行断开。设置keepalive后,超时时间和最大连接只要任一个达到最大值,链接自行断开

设置keepalive前(访问完立即自行断开)

[root@localhost ~]# telnet 192.168.130.121 80

Trying 192.168.130.121...

Connected to 192.168.130.121.

Escape character is '^]'.

GET /index.html HTTP/1.0

HOST:192.168.130.121

HTTP/1.1 200 OK

Date: Wed, 20 Sep 2017 02:04:32 GMT

Server: Apache/2.2.15 (CentOS)

Last-Modified: Wed, 20 Sep 2017 02:04:10 GMT

ETag: "a09cd-72-55995643f9126"

Accept-Ranges: bytes

Content-Length: 114

Connection: close

Content-Type: text/html; charset=UTF-8

<html>

<head>

<title>httpd学习</title>

</head>

<body>

<h1>kaiyuandiantang.blog.51cto.com</h1>

</body>

</html>

Connection closed by foreign host.

设置keepalive后(超时时间和最大连接只要任一个达到最大值,链接自行断开)

[root@localhost html]# telnet 192.168.130.121 80

Trying 192.168.130.121...

Connected to 192.168.130.121.

Escape character is '^]'.

GET /index.html HTTP/1.1

HOST:192.168.130.121

HTTP/1.1 200 OK

Date: Wed, 20 Sep 2017 02:07:31 GMT

Server: Apache/2.2.15 (CentOS)

Last-Modified: Wed, 20 Sep 2017 02:04:10 GMT

ETag: "a09cd-72-55995643f9126"

Accept-Ranges: bytes

Content-Length: 114

Content-Type: text/html; charset=UTF-8

<html>

<head>

<title>httpd学习</title>

</head>

<body>

<h1>kaiyuandiantang.blog.51cto.com</h1>

</body>

</html>

Connection closed by foreign host.

3.MPM(多道处理模块)

httpd -l 查看编译进内核的模块

想使用不同的机制,修改配置文件即可 /etc/syconfig/httpd文件

 <IfModule preforck.c> 判断模块是否存在

StartServers            8 默认启动的工作进程数

MinSpareServers    5 最少空闲进程数

MaxSpareServers   20 最大空闲进程数

ServerLimit      256         最大活动进程数

MaxClients       256最大并发连接数,最多允许发起的连接请求的个数

MaxRequestsPerChild     4000每个子进程在生命周期内最大允许服务的最多请求个数

</IfModule>

<IfModule worker.c>

StartServers         4启动的子进程的个数

MaxClients         300最大并发连接数,最多允许发起的连接请求的个数

MinSpareThreads     25最少空闲线程数

MaxSpareThreads     75最大空闲线程数

ThreadsPerChild     25每个子进程生成的线程数

MaxRequestsPerChild  0 每个子进程在声明周期内最大允许服务的最多请求个数

</IfModule>

preforck工作机制

[root@localhost html]# ps -elfH | grep httpd

0 S root      25835  25683  0  80   0 - 25817 pipe_w 10:16 pts/2    00:00:00         grep httpd

1 S root      25809      1  0  80   0 - 43848 poll_s 10:06 ?        00:00:00   /usr/sbin/httpd

5 S apache    25811  25809  0  80   0 - 43881 inet_c 10:06 ?        00:00:00     /usr/sbin/httpd

5 S apache    25812  25809  0  80   0 - 43881 inet_c 10:06 ?        00:00:00     /usr/sbin/httpd

5 S apache    25813  25809  0  80   0 - 43848 inet_c 10:06 ?        00:00:00     /usr/sbin/httpd

5 S apache    25814  25809  0  80   0 - 43848 inet_c 10:06 ?        00:00:00     /usr/sbin/httpd

5 S apache    25815  25809  0  80   0 - 43848 inet_c 10:06 ?        00:00:00     /usr/sbin/httpd

5 S apache    25816  25809  0  80   0 - 43848 inet_c 10:06 ?        00:00:00     /usr/sbin/httpd

5 S apache    25817  25809  0  80   0 - 43848 inet_c 10:06 ?        00:00:00     /usr/sbin/httpd

5 S apache    25818  25809  0  80   0 - 43848 inet_c 10:06 ?        00:00:00     /usr/sbin/httpd

[root@localhost html]#

worker工作机制

[root@localhost html]# ps -elfH | grep httpd

0 S root      26106  25683  0  80   0 - 25817 pipe_w 10:18 pts/2    00:00:00         grep httpd

1 S root      25991      1  0  80   0 - 43900 poll_s 10:18 ?        00:00:00   /usr/sbin/httpd.worker

5 S apache    25993  25991  0  80   0 - 129965 pipe_w 10:18 ?       00:00:00     /usr/sbin/httpd.worker

5 S apache    25994  25991  0  80   0 - 146349 pipe_w 10:18 ?       00:00:00     /usr/sbin/httpd.worker

5 S apache    25997  25991  0  80   0 - 146349 pipe_w 10:18 ?       00:00:00     /usr/sbin/httpd.worker

[root@localhost html]#

4、DSO模块的加载方式

LoadModule module_name /path/to/module

如果使用相对路径,则对于ServerRoot所定义的位置而言

LoadMoudule php5_module /usr/lib64/httpd/modules/php.so

让服务重载配置文件方能生效

httpd -m 列出与加载到所有DSO模块与非DOS模块

取消 注释掉即可

5、配置站点根目录

DocumentRoot /path/to/somewhere

6、页面访问属性

<Direcotry "/path/to/somewhere">

Options 选项

Indexes缺少指定的默认页面时,允许将目录中的所有文件以列表形式返回给用户:危险:慎用

FollowsymLinks允许跟随符号链接所指向的原始文件

None所有都不启用

All所有的都启用

ExecCGI允许使用mod_cgi模块执行CGI脚本

Includes允许使用mod_include模块实现服务器端包含(SSI)

IncludesNOEXEC允许包含但不允许执行脚本

MultiViews允许使用mod_negotiation实现内容协商

SymLinksIfOwnerMatch在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号连接所指向的原始文件

AllowOverride

</Direcotry>

可以使用正则表达式,使用~

7.基于主机的访问控制

<Direcotry "/path/to/somewhere">

Options

AllowOverrideNone 不禁用下面

orderallow,deny没有允许的都拒绝

orderdeny,allow没有拒绝的都允许

Allow from允许来至指定主机访问

Deny from拒绝来至指定主机访问

</Direcotry>

如果都匹配或都不匹配时以默认为准

否则则以匹配到的为准

Allow from

Deny from

IP,Network Address

172.16

172.16.0.0

172.16.0.0/16

172.16.0.0/255.255.0.0

8.定义默认主页面

DirectoryIndex 依次查找

9.用户目录

如果期望让每个用户都可以创建个人站点:http://Server_IP/~Username/

userdir disablied禁止用户目录

userdir public_html启用用户目录

public_html是用户家目录下的目录名称,所有位于此目录中的文件均可通过前述的访问路径进行访问

用户的家目录得赋予进行httpd进程的用户拥有执行权限

setfacl -m u:apache:x /home/Username

修改配置文件

userdir public_html

service httpd restart

创建用户及目录

useradd test

mkdir /home/test/public_html

修改权限

setfacl -m u:apache:x /home/test

测试

http://192.168.130.121/~test

10、配置日志功能

/var/log/http/

access.log访问日志,其需要记录的内容需要自定义

error.log错误日志

访问日志:

CustomLog "/path/to/log_file" LogFormat

LogFormat定义日志格式

"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""

%h客户端地址

%l远程的登录名,通常为-

%u认证时的远程用户名,通常为-

%t接收到的请求时的时间,为标准英文格式时间+时区

\"转义,显示""

%r请求报文的起始行

%>s响应状态码

%b以字节响应报文的长度,不包含http报文

%{Header_Name}i记录指定请求报文首部的内容(value)

%u请求的URL

详情请参考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

11、路径别名

Alias /alias/ "/path/to/somewhere"

意味着访问http://Server_IP/alias时,其页面文件来自于/path/to/somewhere中

12、指定默认的字符集

AddDefaultCharset

13.脚本路径别名(CGI接口)

URL-->FileSystem Directory

CGI:Common Gateway Interface(通用网关接口)使WEB可以跟一个应用程序进行通信,从通信环境中获得结果。

CGI是不安全的,在第一行写入"echo “Content-Type:text/html"

mod_alias,mod_cgi

ScriptAlias /URL/ "/path/to/somewhere" somewhere下的文件可以被执行,也可以在目录中实现

[root@localhost ~]# cat /var/www/cgi-bin/test

#!/bin/bash

cat << EOF

Content-Type:text/html

<pre>

<h1> The hostname is : `hostname`.</h1>

The time is : `date`.

</pre>

EOF

[root@localhost ~]#

[root@localhost ~]# cd /var/www/cgi-bin/

[root@localhost cgi-bin]# chmod +x test

http://192.168.130.121/cgi-bin/test

14.基于用户的访问控制

虚拟用户:不是系统用户,只是为了获取某种资源类型的一种虚拟的用户

文件/etc/httpd/conf/.htpasswd

SQL数据库

dbm

ldap轻量级目录访问协议

认证类型(auth):

basic基本认证,账号和密码明文发送

digest摘要认证,hash编码之后发送

认证提供者(authentication provider):账号和密码的存放位置

授权机制(authorization)根据什么进行授权

案例:基于文件,做基本认证根据用户和组进行授权

1、编辑配置文件,为需要认证的目录配置认证机制

<Directory "/www/htdocs/fin">A

options None

AllowOverride AuthConfig     使用认证配置

AuthType Basic                        使用基本认证

AuthName "Private Area"     质询时标题

AuthUserFile /etc/http/conf/.htpasswd 密码的存放位置

Require vaild-user                    可访问的用户

</Directory>

2、使用htpsswd命令生成认证库

htpasswd

-c 创建密码,创建第一个用户时使用

htpasswd -c -m /etc/http/conf/.htpasswd tom

-m MD5格式存放

-b 批量模式

-D 删除用户

3、基于组认证

<Directory "/www/htdocs/fin">

options None

AllowOverride AuthConfig使用认证配置

AuthType Basic 使用基本认证

AuthName "Private Area"                 质询时标题

AuthgroupFile /etc/http/conf/.htpasswd  密码的存放位置

Require group GroupName         可访问的用户

</Directory>

先创建用户,在创建组

组文件:

组名:用户1 用户2 用户3

15.虚拟主机

一个物理服务器提供多个站点;使用虚拟主机得先取消中心主机

基于不同的IP实现不同的虚拟主机

变化IP

基于不同的port实现不同的虚拟主机

变化port

基于不同主机名实现不同的虚拟主机

变化ServerName的值

通过请求报文中的HOST来实现不同的虚拟主机访问

<VirtualHost IP:port>

SeverName

DocumentRoot ""

<Directory "">

</Directory>

ServerAlias

ServerAdmin

</VirtualHost>

将全局中的DocumentRoot""注释掉

基于IP实现虚拟主机

<VirtualHost 192.168.130.121:80>

ServerName www.a.com

DocumentRoot "/var/www/html/a.com"

</VirtualHost>

<VirtualHost 192.168.130.122:80>

ServerName www.b.com

DocumentRoot "/var/www/html/b.com"

</VirtualHost>

基于端口实现虚拟主机

Listen 80

Listen 8080

<VirtualHost 192.168.130.121:80>

ServerName www.a.com

DocumentRoot "/var/www/html/a.com"

</VirtualHost>

<VirtualHost 192.168.130.121:8080>

ServerName www.b.com

DocumentRoot "/var/www/html/b.com"

</VirtualHost>

基于主机名实现虚拟主机

NameVirtualHost *:80

<VirtualHost *:80>

ServerName www.a.com

DocumentRoot "/var/www/html/a.com"

</VirtualHost>

<VirtualHost *:80>

ServerName www.b.com

DocumentRoot "/var/www/html/b.com"

</VirtualHost>

<VirtualHost *:80>

ServerName www.c.com

DocumentRoot "/var/www/html/c.com"

</VirtualHost>

16.https协议

x509.3证书格式

证书格式的版本号

证书序列号

证书签名算法

证书颁发者

有效期

持有者的名称

持有者的公钥

CA的ID

持有者的ID

其他扩展信息

基本约束

证书策略

密钥的使用限制

CA签名

ssl握手要完成的工作

交换协议版本号

选择一个双方都支持的加密方式

对两端实现身份验证

密钥交换

http文本协议 80/tcp

https二进制格式的协议 443/tcp

SSL会话基于IP地址进行:不支持在基于主机名的虚拟主机上实现

客户端验证服务器端证书时:

日期检查:证书是否在有效期内

证书颁发者的可信度

证书的签名检测

持有者的身份检测

可以在/etc/pki/tls/certs

openssl s_client

-connet:验证的地址:端口

-CAfile:CA证书的路径

httpd:基于mod_ssl模块实现对ssl的支持

1)、安装httpd

yum -y install httpd

2)、准备好服务器的私钥和证书

用openssl实现私有CA:

生成密钥对儿:

cd /etc/pki/CA

(umask 077; openssl genrsa -out private/cakey.pem 2048)

如果想查看公钥:

openssl rsa -in private/cakey.pem -pubout -text

生成自签证书:

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655

创建需要的文件:

touch index.txt serial crlnumber

用openssl实现证书申请:

在主机上生成密钥,保存至应用此证书的服务的配置文件目录下, 例如:

mkdir /etc/httpd/ssl

cd /etc/httpd/ssl

(umask 077; openssl genrsa -out httpd.key 1024)

生成证书签署请求:

openssl req -new -key httpd.key -out httpd.csr

将请求文件发往CA;

CA签署证书:

签署:

openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days DAYS

将证书传回请求者

吊销证书:

openssl ca -revoke /path/to/somefile.crt

3)、安装mod_ssl模块

yum -y install mod_ssl

4)、配置/etc/httpd/conf.d/ssl.conf

配置实用ssl的虚拟主机

ServerName

DocunmentRoot

配置证书和私钥

SSLCertificatFile 证书文件

SSLCertificatKeyFile 密钥文件

DocumentRoot "/var/www/html"

ServerName www.kaiyuandiantang.com:443

SSLCertificateFile /etc/httpd/ssl/httpd.crt

SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

5)、重启httpd服务

httpd -t

service httpd restart

6)、测试

openssl s_client -connet验证的地址:端口  -CAfile CA证书的路径

openssl s_client -connect 192.168.130.121:443 -CAfile /etc/pki/CA/cacert.pem

https://www.kaiyuandiantang.com

17、使用mod_deflate模块压缩页面优化传输速度,可以写为一行,也可以写多行,默认为gzip

SetOutputFilter DEFLATE

# mod_deflate configuration

<IfModule mod_deflate.c>

# Restrict compression to these MIME types

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/html

AddOutputFilterByType DEFLATE application/xhtml+xml

AddOutputFilterByType DEFLATE text/xml

AddOutputFilterByType DEFLATE application/xml

AddOutputFilterByType DEFLATE application/x-javascript

AddOutputFilterByType DEFLATE text/javascript

AddOutputFilterByType DEFLATE text/css

# Level of compression (Highest 9 - Lowest 1)默认为6

DeflateCompressionLevel 9

# Netscape 4.x has some problems.

BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems

BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine

BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

</IfModule>

18、资源限定

软限制:可以超出的限制,但仅能超出一定时长

硬限制:绝对不能超出的限制

ulimit:只能修改软限制

-n [N]:显示或限制能打开的最大的文件句柄数,

-u [N]:所能够打开的最大进程数

如果修改硬限制

/etc/security/limits.conf,扩展配置etc/security/limits.d/*.conf

对谁进行限定    类型  要限定的选项 值

apache hard nofile65535

apache hard nproc30000

19、ab工具的初步使用

-c 模拟的并发数

-n 模拟的总请求数

一般并发数应该小于等于请求数

http_load webbench seige(只做参考)

tcp_copy

20、httpd-2.4 编译安装

依赖于更高版本的apr和apr-util。apr全称为apache portable runtime

(1) 解决依赖关系

# yum -y install pcre-devel expat-devel openssh-devel

# yum -y groupinstall "Development tools" "Server Platform Development"

(2) 编译安装apr-1.5.2

# tar xf apr-1.5.2.tar.bz2

# cd apr-1.5.2

# ./configure --prefix=/usr/local/apr

# make && make install

(3) 编译安装apr-util-1.5.4

# tar xf apr-util-1.5.4.tar.bz2

# cd apr-util-1.5.4

# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/

# make && make install

httpd-2.4新特性:

1) MPM支持在运行时装载;

--enable-mpms-shared=all --with-mpm=event

2) 支持event

3) 异步读写

4) 在每模块及每目录上指定日志级别

5) 每请求配置;<If>, <Elseif>

6) 增强版的表达式分析器

7) 毫秒级的keepalive timeout

8) 基于FQDN的虚拟主机不再需要NameVirtualHost指令

9) 支持使用自定义变量

新增了一些模块:mod_proxy_fcgi, mod_ratelimit, mod_request, mod_remoteip

对于基于IP的访问控制做了修改,不再支持使用order, allow, deny这些机制;而是统一使用require进行

(4) httpd编译安装

# tar xf httpd-2.4.27.tar.bz2

# cd httpd-2.4.27

# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=event

# make && make install

(5)测试

# cd /usr/local/apache/bin

# ./apachectl start

(6)服务启动脚本

[root@localhost ~]# cat /etc/init.d/httpd

#!/bin/bash

#

# httpd        Startup script for the Apache HTTP Server

#

# chkconfig: - 85 15

# description: Apache is a World Wide Web server.  It is used to serve \

#        HTML files and CGI.

# processname: httpd

# config: /etc/httpd/conf/httpd.conf

# config: /etc/sysconfig/httpd

# pidfile: /var/run/httpd.pid

# Source function library.

. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/httpd ]; then

. /etc/sysconfig/httpd

fi

# Start httpd in the C locale by default.

HTTPD_LANG=${HTTPD_LANG-"C"}

# This will prevent initlog from swallowing up a pass-phrase prompt if

# mod_ssl needs a pass-phrase from the user.

INITLOG_ARGS=""

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server

# with the thread-based "worker" MPM; BE WARNED that some modules may not

# work correctly with a thread-based MPM; notably PHP will refuse to start.

# Path to the apachectl script, server binary, and short-form for messages.

apachectl=/usr/local/apache/bin/apachectl

httpd=${HTTPD-/usr/local/apache/bin/httpd}

prog=httpd

pidfile=${PIDFILE-/var/run/httpd.pid}

lockfile=${LOCKFILE-/var/lock/subsys/httpd}

RETVAL=0

start() {

echo -n $"Starting $prog: "

LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS

RETVAL=$?

echo

[ $RETVAL = 0 ] && touch ${lockfile}

return $RETVAL

}

stop() {

echo -n $"Stopping $prog: "

killproc -p ${pidfile} -d 10 $httpd

RETVAL=$?

echo

[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}

}

reload() {

echo -n $"Reloading $prog: "

if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then

RETVAL=$?

echo $"not reloading due to configuration syntax error"

failure $"not reloading $httpd due to configuration syntax error"

else

killproc -p ${pidfile} $httpd -HUP

RETVAL=$?

fi

echo

}

# See how we were called.

case "$1" in

start)

start

;;

stop)

stop

;;

status)

status -p ${pidfile} $httpd

RETVAL=$?

;;

restart)

stop

start

;;

condrestart)

if [ -f ${pidfile} ] ; then

stop

start

fi

;;

reload)

reload

;;

graceful|help|configtest|fullstatus)

$apachectl $@

RETVAL=$?

;;

*)

echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"

exit 1

esac

exit $RETVAL

[root@localhost ~]#

[root@localhost ~]# cat /etc/httpd24/httpd.conf | grep ^PidFile

PidFile "/var/run/httpd.pid"

[root@localhost ~]# chkconfig --add httpd

[root@localhost ~]# chkconfig httpd on

[root@localhost ~]# chkconfig --list httpd

后续的配置:

1) 导出头文件

# ln -sv /usr/local/apache/include  /usr/include/httpd

2) 导出库文件

# ldconfig

# ldconfig -p

3) 导出man手册

vim /etc/man_db.conf

MANDATORY_MANPATH /usr/local/apache2/man

4) 输出二进制程序

# vim /etc/profile.d/httpd.sh

export PATH=/usr/local/apache/bin:$PATH

练习:配置CGI、虚拟主机、https、mod_deflate、mod_status;

基于IP访问控制:

允许所有主机访问:Require all granted

拒绝所有主机访问:Require all deny

控制某主机的访问:

Require ip IPADDR

Require not ip IPADDR

IPADDR:

单个IP地址, 例如172.16.100.7

Network/Netmask, 例如172.16.0.0/255.255.0.0

Network/Length, 例如172.16.0.0/16

Net: 172.16

Require ip 172.16.0.0/16

Require host HOSTNAME

Require not host HOSTNAME

HOSTNAME:

FQDN:具体的主机

DOMAIN: 域名, 例如.kaiyuandiantang.com

转载于:https://blog.51cto.com/kaiyuandiantang/1974154

18、HTTP基本操作及源码编译安装 学习笔记相关推荐

  1. puppet最新源码包安装学习笔记

    最近去面试了2家大的电商网站的运维工作,公司对系统的自动化管理,虚拟化,mysql集群,系统性能的优化和shell及python编程的要求都比较高,虽然没有面试成功,但也明白了2013年自己学习的目标 ...

  2. opencv4.0在linux下编译,Ubuntu 18.04源码编译安装OpenCV 4.0步骤

    Ubuntu 18.04下标准常规安装方法安装的OpenCV版本比较低,想尝鲜使用4.0版本,只好源码安装. 安装环境 OS:Ubuntu 18.04 64 bit 显卡:NVidia GTX 108 ...

  3. opencore0.6.3_Ubuntu 18.04 源码编译安装 PHP 7.3

    记录在Ubuntu 18.04下源码编译安装 PHP 7.3的过程步骤. 0.下载PHP源代码 首先需要从PHP官网下载PHP7.3.1的源代码,保存为php-7.3.1.tar.xz. http:/ ...

  4. CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境

    什么是LNMP? LNMP(别名LEMP)是指由Linux, Nginx, MySQL/MariaDB, PHP/Perl/Python组合成的动态Web应用程序和服务器,它是一组Web应用程序的基础 ...

  5. linux下源码安装vim,ubuntu 源码编译安装最新的vim 8.0

    为什么要源码编译安装VIM? 因为我要安装ycm,但是ubuntu14.04仓库vim版本低 教程步骤: 1, 核对系统版本 2, 删除系统自带的vim 3, 编译安装vim 4, 检验vim的安装 ...

  6. LNMP架构环境搭建之mysql源码编译安装

    Mysql MySQL是一个开源的数据库,在互联网行业应用的很广泛,下面来记录一下从源码编译安装的步骤,当然,MySQL也有其他安装方式,比如,使用yum下载安装rpm包,或者二进制方式安装,如果机器 ...

  7. Linux 下源码编译安装 vim 8.1

    前言 目前 linux 的各个发行版基本上都是带了一个 vi 编辑器的,而本文要说的 vim 编辑器对 vi 做了一些优化升级,更好用.当我们需要远程操作一台 linux 服务器的时候,只能使用命令行 ...

  8. ambari 2.5.0源码编译安装

    参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/index.html Ambari 是什么 Ambar ...

  9. TVM:源码编译安装

    TVM:Linux源码编译安装 笔者环境: OS:Ubuntu 18.04 CMake:3.10.2 gcc:7.5.0 cuda:11.1 编译安装过程总览 本文将简介 tvm 的编译安装过程,包含 ...

最新文章

  1. 抖音发布特效数据报告:每五个投稿有一个使用特效
  2. linux/centos/集群安装ntp时间同步,自身实验成功
  3. awk中$NF和NF的含义
  4. MySQL函数大全 及用法示例
  5. All About Lily Chou-Chou
  6. 长辈退休金很高是什么体验?
  7. 《版式设计——日本平面设计师参考手册》—第1章段落样式和字符样式的基础知识...
  8. 用windows通过xrdp远程连接到ubuntu16后 Tab键无法使用
  9. 机器学习—LightGBM的原理、优化以及优缺点
  10. 多线程-Thread.join()的运用
  11. 用友U8 13.0运维及操作手册全版
  12. 海思3559开发环境搭建:从这里开始
  13. 你真的了解串口 (Serial)吗?
  14. cmd查看自己的CPU参数
  15. 一个电商网站设计方案
  16. 微信小程序添加插屏广告并设置显示频率(一天一次)
  17. 便签文档储存位置在哪?便签保存在哪个文件夹,怎么在文件管理找到
  18. 高性能v100 gpu服务器,TESLA V100 GPU 加速性能指南
  19. MySQL——SQLyog如何导出、导入数据库
  20. *4-2 CCF 2014-12-2 Z字形扫描

热门文章

  1. python判断dict有没有某个key用的方法是_python的dict判断key是否存在的方法
  2. 从零搭建基于 Java 的服务器生产环境
  3. mysql总是出乱码怎么办_mysql数据库出现乱码怎么办
  4. Crowding Counter 之 修改ShanghaiTech数据集
  5. 遗传算法(确定性排挤)
  6. 一次数据库冷备份还原过程
  7. 计算机主板的海关编码,请问线路板上已经含有电子元件的海关编码是多少?急啊!!...
  8. 常用计算机制图软件,常用的电脑画图软件有什么?
  9. 操作系统到底是个什么鬼?(一)
  10. Google Code注册方法详解 Google Code网盘申请方法 1