Apache的ProxyPass指令详解
Apache配置正向代理与反向代理

Apache配置正向代理与反向代理1. 正向代理配置正向代理很简单,此处我们配置vhost来实现代理, 只需要在浏览器的Proxy选项⾥加⼊你的Apache配置的vHost主机即可1.1 开启Apache代理模块并引⼊vhost配置⽂件早http.conf开启代理模块LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_ftp_module modules/mod_proxy_ftp.soLoadModule proxy_http_module modules/mod_proxy_http.so引⼊vhost⽂件Include conf/extra/httpd-vhosts.conf如果你想监听别的端⼝, 修改Listen参数Listen 80Listen 8087Listen 8088将想监听的端⼝全都写上,相应的, 在vhost⽂件⾥写上NameVirtualHost *:80NameVirtualHost *:8087NameVirtualHost *:8088NameVirtualHost表⽰vhost匹配的请求的ip和端⼝那些会取扫描vhost1.1 Apache配置 httpd-vhosts.conf(以Windows下为例)<VirtualHost *:80>ServerAdmin prograsliu@DocumentRoot "D:/www/test"ServerName ServerAlias ErrorLog "logs/-error.log"CustomLog "logs/-access.log" commonAlias /sublook "D:/www/test/look/sublook/"<Directory "D:/www/test">Options FollowSymLinksAllowOverride AllOrder allow,denyAllow from all</Directory>#正向代理设置ProxyRequests OnProxyVia On<Proxy *>Order deny,allowDeny from allAllow from 127.0.0.1</Proxy></VirtualHost>先看<VirtualHost *:80> VirtualHost 后⾯的参数表⽰的是该VHost的IP/域名/和端⼝, 你可以写 : (1) IP: port, 例如<VirtualHost 175.2.22.65:8088>, 访问的时候通过IP访问(2) Domain, 例如 <VirtualHost >, 访问的时候通过域名访问, 也可以指定⾥⾯的ServerName来指定域名(3) *, 表⽰匹配所有对Apache监听主机的请求, 只要是apache监听到的请求都可以匹配该虚拟主机此处表⽰的就是监听所有80端⼝的请求, 但是由于ServerName⾥写了, 所以这个vhost匹配的是:80, 现在看正向代理设置那⼀段ProxyRequests On:开启Apache正向代理ProxyVia On:控制位于代理服务器链中的代理请求的流向 引⽤Apache2.2官⽅⽂档中对ProxyVia的解释如下:a. 如果设置为默认值Off,将不会采取特殊的处理。
Apache ReWriteRule参数

RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
* 'qsappend|QSA' (追加请求串 query string append)
此标记强制重写引擎在已有的替换串中追加一个请求串,而不是简单的替换。 如果需要通过重写规则在请求串中增加信息,就可以使用这个标记。
* 'noescape|NE' (在输出中不对URI作转义 no URI escaping)
注意: 在使用这个标记时,必须确保该替换字段是一个有效的URL! 否则,它会指向一个无效的位置! 并且要记住,此标记本身只是对URL加上 http://thishost[:thisport]/的前缀,重写操作仍然会继续。 通常,你会希望停止重写操作而立即重定向,则还需要使用'L'标记.
可以使'/foo/zed'转向到一个安全的请求'/bar?arg=P1=zed'.
* 'passthrough|PT' (移交给下一个处理器 pass through)
此标记强制重写引擎将内部结构request_rec中的uri字段设置为 filename字段的值,它只是一个小修改,使之能对来自其他URI到文件名翻译器的 Alias,ScriptAlias, Redirect 等指令的输出进行后续处理。举一个能说明其含义的例子: 如果要通过mod_rewrite的重写引擎重写/abc为/def, 然后通过mod_alias使/def转变为/ghi,可以这样:
Apache的ProxyPass指令详解

描述:将远程服务器映射到本地服务器的URL空间语法:ProxyPass [路径] !|url [键=值键=值...]] [nocanon]上下文:server config, virtual host, directory状态:扩展模块:mod_proxy该指令可以将远程服务器映射到本地服务器的URL空间;本地的服务器并不是扮演传统意义上的代理服务器的角色,而是表现为远程服务器的一个镜像。
此本地服务器常被成为反向代理(reversed proxy)或者是网关(gateway)。
路径是指本地虚拟路径的名字;url指远程服务器的一个部分URL,不能包含查询字符串。
注意:在使用ProxyPass指令的时候,ProxyRequests指令通常都应该是关闭的。
假设本地服务器的地址是/ ,那么ProxyPass /mirror/foo/ /将会把对/mirror/foo/bar的本地请求内部转换成到/bar的代理请求。
其中,!指令当你不想对某个子目录进行反向代理的时候就有用了,例如:ProxyPass /mirror/foo/i !ProxyPass /mirror/foo 将会把所有的/mirror/foo请求重定向到除了对/mirror/foo/i的请求。
注意:顺序很重要:排除的指令必须在一般的ProxyPass指令之前。
和Apache 2.1一样,具备了使用到后端服务器的线程池的能力。
使用“键=值”的参数便可调节线程池的分配。
硬性最大值(Hard Maximum)的默认值为当前MPM中每个进程的线程数量。
在Prefork MPM中,该值总是为1,在Worker MPM中,该值受ThreadsPerChild控制。
设置min可以决定有多少到后端服务器的链接始终打开。
根据需要最多创建数量为柔性最大值(Soft Maximum),也就是smax的链接。
任何超出smax数量的链接都会指定一个生存时间也就是ttl。
Nginx服务器的反向代理proxy_pass配置方法讲解

Nginx服务器的反向代理proxy_pass配置⽅法讲解就普通的反向代理来讲Nginx的配置还是⽐较简单的,如:location ~ /*{proxy_pass http://127.0.0.1:8008;}或者可以location /{proxy_pass http://127.0.0.1:8008;}Apache2的反向代理的配置是:ProxyPass /ysz/ http://localhost:8080/然⽽,如果要配置⼀个相对复杂的反向代理Nginx相对Apache2就要⿇烦⼀些了⽐如,将url中以/wap/开头的请求转发到后台对应的某台server上可以再Nginx⾥设置⼀个变量,来临时保存/wap/后⾯的路径信息location ^~ /wap/{if ($request_uri ~ /wap/(\d+)/(.+)){set $bucketid $1;set $params $2;}proxy_pass http://mx$:6601/$params;}也可以⾸先rewrite⼀下,然后再代理:location ^~ /wap/{rewrite /wap/(\d+)/(.+) /$2?$args break;proxy_pass http://mx$:6601;}或者location ~* /wap/(\d+)/(.+){proxy_pass http://mx$:6601/$2?$args;}注意上⾯最后的?$args,表明把原始url最后的get参数也给代理到后台如果在proxy_pass中使⽤了变量(不管是主机名变量$1或后⾯的$2变量),则必须得加这段代码但如果pass_proxy后没⽤任何变量,则不需要加,它默认会把所有的url都给代理到后台,如:location ~* /wap/(\d+)/(.+){proxy_pass :6601;}⽽Apache2相对就简单多了:ProxyPassMatch ^/wap/(.*)$ http://192.168.132.147/$1if ($host ~* www.(.*)){set $host_without_www $1;rewrite (.*)$ http://$host_without_www/www$1;}location /proxy/ {proxy_pass http://127.0.0.1:81/;}location /proxy/ {proxy_pass http://127.0.0.1:81;}location /proxy/ {proxy_pass http://127.0.0.1:81/ftlynx/; }location /proxy/ {proxy_pass http://127.0.0.1:81/ftlynx; }。
nginxlocation、Rewrite、proxy_pass配置

nginxlocation、Rewrite、proxy_pass配置Nginx_Rewrite•一、介绍o执行server下的rewriteo执行location匹配o执行location下的rewrite1.Rewrite根据nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写和者重定向。
2.Rewrite和location类似,都可以实现跳转,区别是rewrite是在同一域名内更改url,而location是对同类型匹配路径做控制访问,或者proxy_pass代理到其他服务器。
3.Rewrite和location执行顺序:二、语法和参数说明rewrite <regex> <replacement> <flag>;关键字正则表达式代替的内容重写类型Rewrite:一般都是rewriteRegex:可以是字符串或者正则来表示想要匹配的目标URLReplacement:将正则匹配的内容替换成replacementFlag:flag标示,重写类型:- last:本条规则匹配完成后,继续向下匹配新的location URI规则;相当于Apache里德(L)标记,表示完成rewrite,浏览器地址栏URL地址不变;一般写在server和if中;- break:本条规则匹配完成后,终止匹配,不再匹配后面的规则,浏览器地址栏URL地址不变;一般使用在location中;- redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址;- permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址;server {# 访问 /last.html 的时候,页面内容重写到 /index.html 中,并继续后面的匹配,浏览器地址栏URL地址不变rewrite /last.html /index.html last;# 访问 /break.html 的时候,页面内容重写到 /index.html 中,并停止后续的匹配,浏览器地址栏URL地址不变;rewrite /break.html /index.html break;# 访问 /redirect.html 的时候,页面直接302定向到 /index.html中,浏览器地址URL跳为index.htmlrewrite /redirect.html /index.html redirect;# 访问 /permanent.html 的时候,页面直接301定向到 /index.html中,浏览器地址URL跳为index.htmlrewrite /permanent.html /index.html permanent;# 把 /html/*.html => /post/*.html ,301定向rewrite ^/html/(.+?).html$ /post/$1.html permanent;# 把 /search/key => /search.html?keyword=keyrewrite ^/search\/([^\/]+?)(\/|$) /search.html?keyword=$1 permanent;# 把当前域名的请求,跳转到新域名上,域名变化但路径不变rewrite ^/(.*) /$1 permanent;}if (表达式) {}#当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false直接比较变量和内容时,使用=或!=~正则表达式匹配,~*不区分大小写的匹配,!~区分大小写的不匹配$args :这个变量等于请求行中的参数,同$query_string$content_length :请求头中的Content-length字段。
apache load balance

随着访问量的不断提高,以及对响应速度的要求,进行负载均衡设置就显得非常必要了。
公司的系统在最初设计的时候就已经考虑到了负载均衡的规划,www静态服务器配置了两台,由于初期项目时间紧,并且访问量并不高,所以当时只用了一台,另一台在内网中,只是进行了同步,并为发挥出效用来。
此次就是对负载均衡的一个简单测试。
先介绍一下apache mod_proxy_balancer的几个配置规则:将Apache作为LoadBalance前置机分别有三种不同的部署方式,分别是:1 )轮询均衡策略的配置进入Apache的conf目录,打开httpd.conf文件,在文件的末尾加入:ProxyPass / balancer://proxy/ #注意这里以"/"结尾<Proxy balancer://proxy>BalancerMember http://192.168.6.37:6888/BalancerMember http://192.168.6.38:6888/</Proxy>我们来观察上述的参数“ProxyPass / balancer://proxy/”,其中,“ProxyPass”是配置虚拟服务器的命令,“/”代表发送Web请求的URL前缀,如:http://myserver/或者http://myserver/aaa,这些URL都将符合上述过滤条件;“balancer://proxy/”表示要配置负载均衡,proxy代表负载均衡名;BalancerMember 及其后面的URL表示要配置的后台服务器,其中URL为后台服务器请求时的URL。
以上面的配置为例,实现负载均衡的原理如下:假设Apache接收到http://localhost/aaa请求,由于该请求满足ProxyPass条件(其URL 前缀为“/”),该请求会被分发到后台某一个BalancerMember,譬如,该请求可能会转发到http://192.168.6.37:6888/aaa进行处理。
Windows下Apache配置反向代理说明书V1.0

Allow from all
</Proxy>
ProxyPass /yourgateway http://127.0.0.1:8080/yourWebName
ProxyPassReverse /yourgateway http://127.0.0.1:8080/yourWebName
Apache配置反向代理说明书
序号
Байду номын сангаас步骤
1
安装ApacheHTTP服务器
使用文件:httpd-2.2.25-win32-x86-no_ssl.msi
安装成功完成后,屏幕右下角状态栏应该出现 图标,表示Apache服务已经开始运行
2
测试安装是否成功
打开浏览器,输入地址http://localhost/
预期页面
在此文件最后添加如下内容
Alias /yourwebapp"E:/yourworkspace/app"
<Directory "E:/yourworkspace/app">
Options Indexes FollowSymlinks
AllowOverride None
Order allow,deny
Allow from all
4
修改Apache Software Foundation\Apache2.2\conf\httpd.conf文件
在此文件最后添加如下内容(其127.0.0.1也可用localhost代替)
<IfModule mod_proxy.c>
ProxyRequests off
<Proxy /gateway>
nginx配置文件说明

Apache服务器和nginx的优缺点:我们之前大量使用Apache来作为HTTPServer。
Apache具有很优秀的性能,而且通过模块可以提供各种丰富的功能。
1)首先Apache对客户端的响应是支持并发的,运行httpd这个daemon进程之后,它会同时产生多个孩子进程/线程,每个孩子进程/线程分别对客户端的请求进行响应;2)另外,Apache可以提供静态和动态的服务,例如对于PHP的解析不是通过性能较差的CGI实现的而是通过支持PHP的模块来实现的(通常为mod_php5,或者叫做apxs2)。
3)缺点:因此通常称为Apache的这种Server为process-based server ,也就是基于多进程的HTTPServer,因为它需要对每个用户请求创建一个孩子进程/线程进行响应;这样的缺点是,如果并发的请求非常多(这在大型门户网站是很常见的)就会需要非常多的线程,从而占用极多的系统资源CPU和内存。
因此对于并发处理不是Apache的强项。
4)解决方法:目前来说出现了另一种WebServer,在并发方面表现更加优越,叫做asynchronous servers异步服务器。
最有名的为Nginx和Lighttpd。
所谓的异步服务器是事件驱动程序模式的event-driven,除了用户的并发请求通常只需要一个单一的或者几个线程。
因此占用系统资源就非常少。
这几种又被称为lightweight web server。
举例,对于10,000的并发连接请求,nginx可能仅仅使用几M的内存;而Apache 可能需要使用几百M的内存资源。
2. 实际中单一的使用:1)关于单一使用Apache来作为HTTPServer的情况我们不用再多做介绍,非常常见的应用;上面我们介绍到Apache对于PHP等服务器端脚本的支持是通过自己的模块来实现的,而且性能优越。
2)我们同样可以单单使用nginx或者lighttpd来作为HTTPServer来使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
描述:将远程服务器映射到本地服务器的URL空间语法:ProxyPass [路径] !|url [键=值键=值...]] [nocanon]上下文:server config, virtual host, directory状态:扩展模块:mod_proxy该指令可以将远程服务器映射到本地服务器的URL空间;本地的服务器并不是扮演传统意义上的代理服务器的角色,而是表现为远程服务器的一个镜像。
此本地服务器常被成为反向代理(reversed proxy)或者是网关(gateway)。
路径是指本地虚拟路径的名字;url指远程服务器的一个部分URL,不能包含查询字符串。
注意:在使用ProxyPass指令的时候,ProxyRequests指令通常都应该是关闭的。
假设本地服务器的地址是/ ,那么ProxyPass /mirror/foo/ /将会把对/mirror/foo/bar的本地请求内部转换成到/bar的代理请求。
其中,!指令当你不想对某个子目录进行反向代理的时候就有用了,例如:ProxyPass /mirror/foo/i !ProxyPass /mirror/foo 将会把所有的/mirror/foo请求重定向到除了对/mirror/foo/i的请求。
注意:顺序很重要:排除的指令必须在一般的ProxyPass指令之前。
和Apache 2.1一样,具备了使用到后端服务器的线程池的能力。
使用“键=值”的参数便可调节线程池的分配。
硬性最大值(Hard Maximum)的默认值为当前MPM中每个进程的线程数量。
在Prefork MPM中,该值总是为1,在Worker MPM中,该值受ThreadsPerChild控制。
设置min可以决定有多少到后端服务器的链接始终打开。
根据需要最多创建数量为柔性最大值(Soft Maximum),也就是smax的链接。
任何超出smax数量的链接都会指定一个生存时间也就是ttl。
Apache不会同时创建超过硬性最大值(或max)数量的到后端服务器的链接。
ProxyPass /example smax=5 max=20 ttl=120 retry=300参数默认值描述min 0 到后端服务器的总是打开的链接最小数。
max 1…n 允许连接到后端服务器的硬性最大链接数。
硬性最大值的默认值为当前MPM 中每个进程的线程数量。
在Prefork MPM中,该值总是为1,在Worker MPM中,该值受ThreadsPerChild控制。
smax max 根据需要最多创建数量为柔性最大值(Soft Maximum),也就是smax的链接。
任何超出smax数量的链接都会指定一个生存时间也就是ttl。
acquire - 如果设置了该参数,它就会成为等待链接池中空闲链接的最大时间。
如果链接池中没有任何空闲链接,那么Apache将会给客户端返回SERVER_BUSY状态。
flushpackets off 决定代理模块是否要在接受到每段数据的时候自动冲掉输出缓冲。
‘off’表示只有当需要的时候才冲掉,‘on’表示每段数据后都冲,‘auto’表示轮询/等待一段长度为‘flushwait’毫秒的时间后如果没有输入便冲掉。
目前该参数仅对AJP有效。
flushwait 10 表示如果‘flushpackets’为‘auto’,在冲掉输出组前等待额外输入的时间,单位毫秒。
keepalive Off 该参数应该在你的Apache和后端服务器之间有防火墙的时候时候,因为防火墙有可能会丢弃不活动的链接。
该标志将会告诉操作系统在不活动的链接中发送KEEP_ALIVE 消息(时间间隔由全局的OS设置决定,一般为120ms),这样避免防火墙丢弃该链接。
要启用keepalive可以将该属性设置为On。
lbset 0对该工作单元所属的负载均衡集群进行设置。
负载均衡器会先尝试较小的lbset,然后尝试大的。
ping 0 Ping数据告诉Web服务器在对ajp13链接递交请求前发送一个CPING请求。
参数为等待CPONG响应的延迟,单位为秒。
添加该功能是为了避免挂起和忙碌的Tomcat的一些问题。
该功能需要ajp13 的ping/pong支持,已经在Tomcat 3.3.2+、4.1.28+、5.0.13+中实现。
它会增加普通操作中的网络流量,有可能是个问题,但是它在集群节点失效或者繁忙的时候减少网络流量。
目前该参数只对AJP有效。
loadfactor 1 工作单元负载系数。
用于BalancerMember。
它是一个1到100之间的数字,用于定义应用于该工作单元的正规化权重负载。
redirect - 工作单元的重定向路由(Redirection Route)。
该值通常被动态设置用于从集群中安全地移除某个节点。
如果被设置了,所有不包含会话ID的请求都会被重定向到有等值route参数的BalancerMember中。
retry 60 线程池工作单元重试的超时时间,以秒为单位。
如果到后端服务器的线程池工作单元状态是出错,Apache将不会递交任何请求到该服务器,直到超时结束。
这可以令后端服务器关闭进行维护,并稍后上线。
如果值为0则表示总是重试错误状态的工作单元不等待任何时间。
route - 工作单元的路由,用于负载均衡器中。
该路由是附加给会话ID的一个值。
status - 用一个字符定义该工作单元的初始状态:‘D’表示禁用,‘S’表示已停止,‘I’表示忽略错误,‘H’表示热备,‘E’表示出错。
状态可以通过前置‘+’表示设置或者‘-’表示清楚。
这样,‘S-E’表示设置该工作单元为已停止并清除出错标志。
timeout Timeout 链接超时时间,单位为秒。
如果未设置,那么Apache会一直等到有可用的链接位置。
该指令常和max参数一起使用来限制到后端服务器的链接。
ttl - 超出smax连接数的非活动链接的生存时间(Time To Live),单位为秒。
Apache会关闭在这段时间内没有被用过的所有链接。
如果代理的指令类型以balancer://开头那么会创建一个虚拟工作单元,并不直接和后端服务器通讯。
它负责对一些“真正”的工作单元进行管理。
这种情况下可以给虚拟工作单元添加一系列额外参数。
更多关于均衡器如何工作的信息请查看mod_proxy_balancer。
参数默认值描述lbmethod b yrequests 选择均衡器的负载均衡方式。
可以是byrequests,进行加权请求计数,或者是bytraffic,进行加权流量字节计数均衡。
默认按请求数。
maxattempts 1 在放弃之前的故障转移的最大尝试次数。
nofailover Off 如果设为‘On’,当工作单元被禁用或者出错时,会话则立即中断。
可以将该值设为On如果后端服务器不支持会话复制(Session replication)。
stickysession - 均衡器粘连会话名称。
该值常常会被设置为类似JSESSIONID或者PHPSESSIONID之类的值,他依赖于支持会话的后端应用服务器。
如果后端服务器使用不同的cookie名称或者URL编码的ID(像servlet容器),使用|来分开他们。
第一个部分针对cookie,第二个针对路径。
timeout 0 均衡器超时时间,单位为秒。
如果设置了,那么就是等待空闲工作单元的最大时间。
默认是不等。
均衡器设置范例ProxyPass /special-area / smax=5 max=10ProxyPass / balancer://mycluster stickysession=JSESSIONID|jsessionid nofailover=On<Proxy balancer://mycluster>BalancerMember http://1.2.3.4:8009BalancerMember http://1.2.3.5:8009 smax=10# 性能较弱的服务器,不要给他发送太多请求BalancerMember http://1.2.3.6:8009 smax=1 loadfactor=20</Proxy>设置一个热备份,也就是只有当没有其他成员可用的时候才使用:ProxyPass / balancer://hotcluster/<Proxy balancer://hotcluster>BalancerMember http://1.2.3.4:8009 loadfactor=1BalancerMember http://1.2.3.5:8009 loadfactor=2# 以下是热备份BalancerMember http://1.2.3.6:8009 status=+HProxySet lbmethod=bytraffic </Proxy>正常情况下,mod_proxy会标准化被ProxyPass的URL。
但它可能会和某些后端不兼容,尤其是那些利用了PATH_INFO的。
可选的nocanon关键词可以禁止它,并不动地直接将URL 路径传递给后端。
注意它可能会影响到后端的安全性,因为它跳过了由代理提供的对常见的基于URL的攻击的保护。
当用在<Location>节中的时候,第一个参数应被忽略,并且本地的路径将从<Location>取得。
如果你需要更加有弹性的反向代理配置,参见是用[P]标志的RewriteRule指令。