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

http协议理论及实验

时间:2017-10-30 21:52:42      阅读:397      评论:0      收藏:0      [点我收藏+]

标签:http协议理论及实验

http:超文本传输协议

html:超文本标记语言,编程语言

cookie携带本机自己信息

 

URI:统一资源标识,分为URLURN

p2p:我为人人,人人为我。共享资源,下载的同时也在上传,从哪个机器上有就从哪下载

 

串行连接

并行连接

持久连接

管道连接

 

http协议是应用层协议

 

1客户端请求建立连接

http协议是应用层协议,在传输期间会被加上TCP报头,ip报头,数据链路报头。

2服务器端接收请求

3根据报文首部来实现处理请求

4访问资源 httpd在用户空间运行,系统调用发送到内核,再由内核发送到磁盘,回到内核的缓存区,最后发到http缓充区

5响应报文(数据封装响应报文的首部,http响应报头,TCP报头,ip报头,数据链路报头)

6发送响应,

7记录事物处理过程,日志

 

 

http从网络上读数据,基于打开socket文件 inputreadoutput

技术分享 

 

 

单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应(一个一个来)

 

多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求(多个多个来)

 

复用I/O结构:启动一个进程,同时响应N个连接请求实现方法:多线程模型和事件驱动

(启动一个进程,生成N个线程来响应连接请求,请求先在连接池,确定访问资源了再分配线程。弊端,一个线程故障,会影响其他线程)

 

多线程模型:一个进程生成N个线程,每线程响应一个连接请求(处理线程1024

事件驱动:一个进程处理N个请求

复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个(启动多个进程,每个进程启动多个线程。)

 

http服务器程序:

httpd apachenginx(只支持静态页面,不支持动态页面)

应用程序服务器:(处理动态页面)

IIS.asp文件

tomcat .jsp文件

 

nginx tomcat 相互配合静态,动态

lamp()

 

php模块:打包进httpd模块

php服务(php server):<-php-->httpdphp client<---client index.php

 

MPM工作模式:多路处理模块:确认方法:ps aux | grep httpd默认为/usr/sbin/httpd, prefork

 

prefork:多进程I/O模型,每个进程响应一个请求,默认模型一个主进程:生成和回收n个子进程,创建套接字,不响应请求多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024

 

worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n

 

event:事件驱动模型(worker模型的变种)一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响

应请求:m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力 httpd-2.2: event 测试版,centos6默认

httpd-2.4event 稳定版,centos7默认

 

httpd功能特性

虚拟主机(在同一主机上各个资源分别放在不同的域名下,实现了增加并发连接下载连接数,加快了下载速度,可以以IP地址,端口号,域名进行区分 类似于域名分片

IPPortFQDN

技术分享 

v CGICommon Gateway Interface,通用网关接口(支持不同协议间的转化,如http处理不了Php,利用CGI转化为php协议)

v 反向代理(正向代理,代理服务器,具有缓冲功能,节约网路带宽,也可以做一些策略)

v 负载均衡

v 路径别名

v 丰富的用户认证机制

basic

digest

v 支持第三方模块

 

Http安装:

CentOS 6: 2.2

CentOS 7: 2.4

安装方式:

rpmcentos发行版,稳定,建议使用

编译:定制或特殊需求

v CentOS 6程序环境:httpd-2.2

配置文件:

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

/etc/httpd/conf.*.conf

检查配置语法:httpd -t  

查看静态编译的模块:httpd -l

查看静态编译及动态装载的模块:httpd M

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

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

服务控制和启动:

chkconfig httpd on|off

service {start|stop|restart|status|configtest|reload} httpd

模块文件路径:

/etc/httpd/modules

/usr/lib64/httpd/modules 动态模块路径


CentOS 6 httpd程序环境:

 

主程序文件:

/usr/sbin/httpd

/usr/sbin/httpd.worker

/usr/sbin/httpd.event v

主进程文件:

/etc/httpd/run/httpd.pid v

日志文件目录:

/var/log/httpd

access_log: 访问日志

error_log:错误日志

 帮助文档包:

httpd -manual(需要手动安装)

 

httpd配置文件的组成:

# grep "Section" /etc/httpd/conf/httpd.conf

### Section 1: Global Environment

### Section 2: ‘Main‘ server configuration

### Section 3: Virtual Hosts

v 配置格式:directive value

directive: 不区分字符大小写

value: 为路径时,是否区分大小写,取决于文件系统

 

显示服务器版本信息,建议使用:ServerTokens Prod

修改监听的IPPortListen 192.168.1.100:8080 Listen [IP:]PORT

持久连接:KeepAlive On|Off

 

测试:  telnet WEB_SERVER_IP PORT

GET /URL HTTP/1.1

Host: WEB_SERVER_IP

 

更换使用的httpd程序:/etc/sysconfig/httpd

HTTPD=/usr/sbin/httpd.worker

重启服务生效

pstree -p|grep httpd 查看进程和线程

Httpd 2.4 与之不同

以动态模块方式提供

配置文件:/etc/httpd/conf.modules.d/00-mpm.conf

httpd M |grep mpm

重启服务生效

pstree -p|grep httpd 查看进程和线程

 

prefork的默认配置:

<IfModule prefork.c>

StartServers 8

MinSpareServers 5

MaxSpareServers 20

ServerLimit 256 最多进程数,最大20000

MaxClients 256 最大并发

MaxRequestsPerChild 4000 子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(0时永远不释放)

</IfModule>

 

worker的默认配置:

<IfModule worker.c>

StartServers 4

MaxClients 300

MinSpareThreads 25

MaxSpareThreads 75

ThreadsPerChild 25

MaxRequestsPerChild 0 无限制

</IfModule>

 

DSODynamic Shared Object

v 加载动态模块配置

/etc/httpd/conf/httpd.conf

配置指定实现模块加载格式:LoadModule <mod_name> <mod_path>

模块文件路径可使用相对路径:相对于ServerRoot(默认/etc/httpd

示例:

LoadModule auth_basic_module

modules/mod_auth_basic.so

 

主站点:DocumentRoot "/app/data"

主页面:DirectoryIndex index.html index.html.var

注意:SELinuxiptables的状态

 

站点访问控制常见机制:

访问控制机制有两种:客户端来源地址,用户账号

文件系统路径:

<Directory /path">

...

</Directory>【目录】

<File /path/file>

...

</File>【文件路径,支持通配符】

<FileMatch "PATTERN">

...

</FileMatch>【支持正则模糊匹配】

 

 URL路径:

<Location "">

...

</Location>

<LocationMatch "">

...

</LocationMatch>

v 示例:

<FilesMatch "\.(gif|jpe?g|png)$">

<Files ?at.*> 通配符

<Location /status>

<LocationMatch "/(extra|special)/data">

 

<Directory>中“基于源地址”实现访问控制

ü (1) Options:后跟1个或多个以空白字符分隔的选项列表在选项前的+- 表示增加或删除指定选项

常见选项:

Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户控制是否可以显示列表

FollowSymLinks:允许访问符号链接文件所指向的源文件

None:全部禁用

All: 全部允许

示例:在子配置文件中

<Directory /web/docs>

Options Indexes FollowSymLinks

</Directory>

<Directory /web/docs/spec>

Options +Includes

-Indexes

</Directory>

 

技术分享 

 

 AllowOverride

与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName指定)文件中,覆盖之前的

配置指令

只对<directory>语句有效

AllowOverride All: 所有指令都有效

AllowOverride None.htaccess 文件无效

AllowOverride AuthConfig Indexes 除了AuthConfig Indexes的其它指令都无法覆盖

 

 

orderallowdeny

放在directory, .htaccess

order:定义生效次序;写在后面的表示默认法则

Order allow,deny

Order deny,allow

Allow from, Deny from

示例:

<files "*.txt">

order deny,allow

deny from 172.16. 100.100

allow from 172.16

</files>

技术分享 

 

日志类型:

访问日志

错误日志

错误日志:

ErrorLog logs/error_log

LogLevel warn

loglevel 可选值: debug, info, notice, warn,errorcrit, alert, emerg

访问日志:

定义日志格式:LogFormat format strings

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

使用日志格式:CustomLog logs/access_log combined

%h 客户端IP地址

%l 远程用户,启用mod_ident才有效,通常为减号“-

%u 验证(basicdigest)远程用户,非登录访问时,为一个减号“-

%t 服务器收到请求时的时间

%r First line of request,即表示请求报文的首行;记录了

此次请求的“方法”,“URL”以及协议版本

%>s 响应状态码

%b 响应报文的大小,单位是字节;不包括响应报文http首部

%{Referer}i 请求报文中首部“referer”的值;即从哪个页

面中的超链接跳转至当前页面的

%{User-Agent}i 请求报文中首部“User-Agent”的值;即

发出请求的应用程序

 

设置默认字符集

 

定义路径别名:

在子配置文件中:/etc/httpd/conf.d/test.conf编辑

Alias  /bbs(对于/var/www/html)“/app/bbsdir

基于用户的访问控制:响应码为401

认证的两种方式:

basic:明文

digest:消息摘要认证,兼容性差

用户的账号和密码(可用命令生成账户密码)

虚拟账号:仅用于访问某服务时用到的认证标识

存储:文本文件,SQL数据库,ldap目录存储,nis

 

Basic认证配置示例:

在子配置文件中:/etc/httpd/conf.d/test.conf编辑

<Directory /var/www/html/secret">

Options None(在这里可有可无)

AllowOverride None(在这里可有可无)

AuthType Basic

AuthName "String

AuthUserFile "/etc/httpd/conf.d/.httpusers"

Require user http1http2

</Directory>

在指定目录下/etc/httpd/conf.d/.httpusers生成账户密码

Htpasswd  -c  /etc/httpd/conf.d/.httpusers  http1

使用专用命令完成此类文件的创建及用户管理

htpasswd [options] /PATH/HTTPD_PASSWD_FILE username

-c:自动创建文件,仅应该在文件不存在时使用

-mmd5格式加密,默认方式

-s: sha格式加密

-D:删除指定用户

方法二:

/var/www/html/secret下创建.htaccess文件

AuthType Basic

AuthName "String

AuthUserFile "/etc/httpd/conf.d/.httpusers"

Require user http1http2

子配置文件test.conf增加:AllowOverride authconfig

 

基于组账号进行认证:

在子配置文件中:/etc/httpd/conf.d/test.conf编辑

<Directory /var/www/html/secret">

Options None(在这里可有可无)

AllowOverride None(在这里可有可无)

AuthType Basic

AuthName "String

AuthUserFile "/etc/httpd/conf.d/.httpusers"

AuthUserfile  /etc/httpd/conf.d/.httpgroups

Require httpgroup2

Require user http1http2

</Directory>

/etc/httpd/conf.d/.httpgroups配置

Vim /etc/httpd/conf.d/.httpgroups

Httpgroup1 http1 http2

Httpgroup2 http1 http3

 

虚拟主机:一个站点相当于一个主机

根据IP地址区分:

准备站点:

vim  /app/site1/index.html

vim  /app/site2/index.html

vim  /app/site3/index.html

 

/etc/httpd/conf.d/test.conf编辑

 

<VirtualHost 192.168.109.10:80>

DocumentRoot /app/site1"

</VirtualHost>

 

<VirtualHost 192.168.109.20:80>

DocumentRoot /app/site2"

</VirtualHost>

 

<VirtualHost 192.168.109.30:80>

DocumentRoot /app/site3"

</VirtualHost>

 

修改/etc/hosts文件

192.168.109.10  www.a.com

192.168.109.20  www.b.com

192.168.109.30  www.c.com

Curl www.a.com

Curl www.b.com

Curl www.c.com

 

根据端口号区分:

 /etc/httpd/conf.d/test.conf编辑

Listen 8001

Listen 8002

Listen 8003

<VirtualHost *:8001>

DocumentRoot /app/site1"

</VirtualHost>

 

<VirtualHost *:8002>

DocumentRoot /app/site2"

</VirtualHost>

 

<VirtualHost *:8003>

DocumentRoot /app/site3"

</VirtualHost>

 

基于名称FQDN的虚拟主机:

技术分享 

修改/etc/hosts文件

192.168.37.106  www.a.com www.b.com www.c.com 

/etc/httpd/conf.d/test.conf编辑

技术分享 

谁排第一谁就是默认站点

 

http协议:

理论上http协议属于无状态的协议,stateless 无状态

解决http协议无状态方法:

Cookie 客户端存放

Session 服务器存放

技术分享 

 

cookie:所有信息都存到cookie,不合理,浪费带宽

cookie:只存用户的UID 和服务器上存放的session表结合使用

技术分享 

Http请求报文结构:

技术分享 

由客户端决定:

request报文

<method> <request-URL> <version>

<headers>

<entity-body>

method: 请求方法,标明客户端希望服务器对资源执行的动作GETHEADPOST

 

GET:从服务器获取一个资源

HEAD:只从服务器获取文档的响应首部

POST:向服务器输入数据,通常会再由网关程序继续处理

PUT:将请求的主体部分存储在服务器中,如上传文件

DELETE:请求删除服务器上指定的文档

TRACE:追踪请求到达服务器中间经过的代理服务器

OPTIONS:请求服务器返回对指定资源支持使用的请求方法

 

version: HTTP/<major>.<minor>  HTTP/

Http响应报文:

技术分享 

由服务器决定格式

response报文

<version> <status> <reason-phrase>

<headers>

<entity-body>

status:三位数字,如200301, 302, 404, 502; 标记请求处理过程中发生的情况

reason-phrase:状态码所标记的状态的简要描述

headers:每个请求或响应报文可包含任意个首部;每个首部都有首部名称,后面跟一个冒号,而后跟一个可选空格,接着是一个值 HOST:2.2.2.2|www.a.com

status(状态码)

v 1xx100-101 信息提示

v 2xx200-206 成功

v 3xx300-305 重定向

v 4xx400-415 错误类信息,客户端错误

v 5xx500-505 错误类信息,服务器端错误

200: 成功,请求数据通过响应报文的entity-body部分发送;OK

v 301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently

v 302: 响应报文Location指明资源临时新位置 Moved Temporarily

v 304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified

v 401: 需要输入账号和密码认证方能访问资源;Unauthorized

v 403: 请求被禁止;Forbidden

v 404: 服务器无法找到客户端请求的资源;Not Found

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

v 502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway

v 503 – 服务不可用,临时服务器维护或过载,服务器无法处理请求

v 504 – 网关超时

http协议首部:

通用首部

ü 请求首部

ü 响应首部

ü 实体首部

ü 扩展首部

通用首部:

Date: 报文的创建时间

Connection:连接状态,如keep-alive, close

Via:显示报文经过的中间节点(代理,网关)

Cache-Control:控制缓存,如缓存时长

MIME-Version:发送端使用的MIME版本

请求首部:

Accept:通知服务器自己可接受的媒体类型

Accept-Charset: 客户端可接受的字符集

Accept-Encoding:客户端可接受编码格式,如gzip

Accept-Language:客户端可接受的语言

Client-IP: 请求的客户端IP

Host: 请求的服务器名称和端口号

Referer:跳转至当前URI的前一个URL

User-Agent:客户端代理,浏览器版本

响应首部:

信息性:

Age:从最初创建开始,响应持续时长

Server:服务器程序软件名称和版本

协商首部:某资源有多种表示方法时使用

Accept-Ranges:服务器可接受的请求范围类型

Vary:服务器查看的其它首部列表

安全响应首部:

Set-Cookie:向客户端设置cookie

Set-Cookie2: 以上面相似

WWW-Authenticate:来自服务器对客户端的质询列表

实体首部:

Allow: 列出对此资源实体可使用的请求方法

Location:告诉客户端真正的实体位于何处

Content-Encoding:对主体执行的编码

Content-Language:理解主体时最适合的语言

Content-Length: 主体的长度

Content-Location: 实体真正所处位置

Content-Type:主体的对象类型,如text

缓存相关:

ETag:实体的扩展标签

Expires:实体的过期时间

Last-Modified:最后一次修改的时间

 

Curl工具:

curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILELDAP等协议。curl支持HTTPS认证,并且支持HTTPPOSTPUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证, 下载文件断点续传,上载文件断点续传, http代理服务器管道( proxy =tunneling),还支持IPv6socks5代理服务器,通过http代理服务器上传文件到FTP服务器等,功能十分强大。

语法:curl [options] [URL...]

-A/--user-agent <string> 设置用户代理发送给服务器

-e/--referer <URL> 来源网址

--cacert <file> CA证书 (SSL)

-k/--insecure 允许忽略证书进行 SSL 连接

--compressed 要求返回是压缩的格式

-H/--header <line>自定义首部信息传递给服务器

-i 显示页面内容,包括报文首部信息

-I/--head 只显示响应报文首部信息

-D/--dump-header <file>urlheader信息存放在指定文件中

--limit-rate <rate> 设置传输速度

--basic 使用HTTP基本认证

-u/--user <user[:password]>设置服务器的用户和密码

-L 如果有3xx响应码,重新发请求到新位置

-o <file> 将网络文件保存为指定的文件中

-O 使用URL中默认的文件名保存文件到本地

-0/--http1.0 使用HTTP 1.0

-L 选项进行强制重定向

-C - 选项可对文件使用断点续传功能

-c/--cookie-jar <file name> urlcookie存放在指定文件中

-x/--proxy <proxyhost[:port]> 指定代理服务器地址

-X/--request <command> 向服务器发送指定请求方法

-U/--proxy-user <user:password> 代理服务器用户和密码

-T 选项可将指定的本地文件上传到FTP服务器上

--data/-d 方式指定使用POST方式传递

 

mod_deflate模块

使用mod_deflate模块压缩页面优化传输速度

适用场景:

(1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持

(2) 压缩适于压缩的资源,例如文本文件

启用压缩

SetOutputFilter DEFLATE

DeflateCompressionLevel 9(压缩级别)

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/html

 


实验:在centos6.9编译httpd2.4.28

Httpd2.4版本要依赖apr1.4版本以上才行,所以先编译安装apr

Yum remove httpd

Rz

Apr-1.6.2.tar.gz

Apr-util-1.6.0.tar.gz

httpd-2.4.25.tar.gz

Tar xvf apr-1.6.2

Tar xvf Apr-util-1.6.0.tar.gz

Yum insatall Development tools

相关包:pcre-developenssl-devel   expat-devel

 

安装apr-1.4+

cd apr-1.6.2

./configure --prefix=/app/apr

make && make install

v 安装apr-util-1.4+

cd ../apr-util-1.6.0

./configure --prefix=/app/apr-util --withapr=/app/apr/

make -j 2 && make install

 

 

编译安装httpd-2.4

cd ../httpd-2.4.27

./configure --prefix=/app/httpd24 --enable-so --

enable-ssl --enable-cgi --enable-rewrite --with-zlib

--with-pcre --with-apr=/app/apr/ --with-aprutil=/app/apr-util/ --enable-modules=most --enablempms-shared=all --with-mpm=prefork

make -j 4 && make install

 

centos6 编译安装httpd-2.4方法二

 

cp -av apr-util-1.6.0 httpd-2.4.27/srclib/apr-util

v cp -av apr-1.6.2 httpd-2.4.27/srclib/apr

v cd httpd-2.4.27/

./configure --prefix=/usr/local/httpd24 /

--enable-so /

--enable-ssl /

--enable-cgi /

--enable-rewrite /

--with-zlib /

--with-pcre /

--with-included-apr /

--enable-modules=most --enable-mpms-shared=all /

--with-mpm=prefork

make && make install

 

修改进程名:daemon------apache

查看是否有apache用户

修改 vim /app/httpd24/conf/httpd.conf

User deamon---apache

添加服务:

cd /etc/init.d    cp httpd http24

修改Vim httpd24 修改为自己编译的http的路径

技术分享 

Chkconfig  --add httpd24

 

 

Httpd2.4修改工作模式

Vim /etc/httpd/conf.modules.d/00-mpm.conf

测试性能命令:

Ab -c 100  -n 2000 http://192.168.109.166/m.txt

修改主站点:与httpd2.2不同,转换的主站点要有权限

技术分享 

不允许特定主机: httpd2.4默认是不允许

技术分享 

Httpd2.4基于FQDN实现访问,注意权限。其他一样

技术分享 

 

Httpd2.4实现跳转https 简单方法

Cd  /etc/pki/tls/crets

Make httpd.pem

证书文件和私钥文件放在一起了,要分开!

Httpd.crthttpd.key

修改 vim /etc/httpd/conf.d/ssl.conf 证书路径和私钥路径

Make httpd.crt 证书文件和私钥文件已分开

 

Sendfile功能 简单的说就是 数据可以直接从内核到协议栈了,不用再转发到用户包装包装发到内核再发给协议栈了

 

一般网络应用通过读硬盘数据,写数据到 socket 来完成网络传输,底层执行过程:

v 1 系统调用 read() 产生一个上下文切换:从 user mode 切换到 kernel mode

然后 DMA 执行拷贝,把文件数据从硬盘读到一个 kernel buffer 里。

v 2 数据从 kernel buffer 拷贝到 user buffer,然后系统调用 read() 返回,这时

又产生一个上下文切换:从kernel mode 切换到 user mode

v 3 系统调用 write() 产生一个上下文切换:从 user mode 切换到 kernel mode

然后把步骤2读到 user buffer 的数据拷贝到 kernel buffer(数据第2次拷贝到

kernel buffer),不过这次是个不同的 kernel buffer,这个 buffersocket

相关联。

v 4 系统调用 write() 返回,产生一个上下文切换:从 kernel mode 切换到 user

mode(4次切换),然后DMAkernel buffer 拷贝数据到协议栈(第4次拷贝)

v 上面4个步骤有4次上下文切换,有4次拷贝,如果能减少切换次数和拷贝次数将会

有效提升性能

 

kernel 2.0+ 版本中,系统调用 sendfile() 就是用来简化上面步骤提升性能的。sendfile() 不但能减少切换次数而且还能减少拷贝次数

不用 sendfile 的传统网络传输过程:

硬盘 >> kernel buffer >> user buffer >> kernel socket buffer >> 协议栈

sendfile() 来进行网络传输的过程:

硬盘 >> kernel buffer (快速拷贝到kernel socket buffer) >> 协议栈

 

系统调用 sendfile() 通过 DMA 把硬盘数据拷贝到 kernel buffer,然后数据被 kernel 直接拷贝到另外一个与 socket 相关的 kernel buffer。这里没有 user mode kernel mode 之间的切换,在 kernel 中直接完成了从一个 buffer 到另一个 buffer 的拷贝。

2 DMA 把数据从 kernel buffer 直接拷贝给协议栈,没有切换,也不需要数据从 user mode 拷贝到 kernel mode,因为数据就在kernel

 

Httpd2.4反向代理

在代理机上编辑htppd的一个子配置文件就OK

ProxyPass  "/" "192.168.109.166"

ProxyPassReverse  "/" "192.168.109.166"

 

特定URL反向代理

修改子配置文件:

技术分享 


http协议理论及实验

标签:http协议理论及实验

原文地址:http://13287454.blog.51cto.com/13277454/1977595

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