`
wsmajunfeng
  • 浏览: 498192 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

apache rewrite,正向代理、反向代理

 
阅读更多

原文见:http://www.itlearner.com/article/3747

 

[导读 ]modrewite 将URL定向到另一个目录或文件,而地址栏URL不变,网页内容为新地址内容。 http://www.test.com/a/b 显示 http://www.test.com/test/的内容,URL地址还保持为 www.test.com/a/b根据下面操作自己可以更加灵活...

modrewite 将URL定向到另一个目录或文件,而地址栏URL不变,网页内容为新地址内容。http://www.test.com/a/b    显示 http://www.test.com/test/ 的内容,URL地址还保持为www.test.com/a/b
根据下面操作自己可以更加灵活变动
参考连接:Apache 重写规则的常见应用

一、实现原理:
      (主要看第2点)
      只有当用户的WEB请求最终被导向到某台WEB服务器的Apache后台,则这台WEB服务器接受
      进来的请求,根据配置文件该请求是主配置还是虚拟主机,再根据用户在浏览器中请求的
      URI来配对重写规则并且根据实际的请求路径配对.htaccess中的重写规则。最后把请求
      的内容传回给用户,该响应可能有两种: 
      1) 对浏览器请求内容的外部重定向(Redirect)到另一个URL。 
      让浏览器再次以新的URI发出请求(R=301或者R=302,临时的或是永久的重定向) 
      如:一个网站有正规的URL和别名URL,对别名URL进行重定向到正规URL,或者网站改换
      成了新的域名 
      则把旧的域名重定向到新的域名(Redirect) 
      2) 也可能是由Apache内部子请求代理产生新的内容送回给客户[P,L] 
      这是Apache内部根据重写后的URI内部通过代理模块请求内容并送回内容给客户,而客户
      端浏览器并 
      不知道,浏览器中的URI不会被重写。但实际内容被Apache根据重写规则后的URI得到。 
      如:在公司防火墙上运行的Apache启动这种代理重写规则,代理对内部网段上的WEB服务
      器的请求。 
 
说明:为了不让地址URL被重写,而内容重定向,使用apache mod_proxy代理模块的反向代理功能实现。
二、正向代理、反向代理(mod_proxy)
Apache可以被配置为正向(forward)和反向(reverse)代理。
正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率。
使用ProxyRequests指令即可激活正向代理。因为正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的名字空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。
反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。另外,还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。
可以使用ProxyPass指令激活反向代理(在RewriteRule指令中使用[P]标记也可以)。配置反向代理并不需要打开ProxyRequests指令。
简单示例:
正向代理
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Deny from all
Allow from internal.example.com
</Proxy>
反向代理
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar

三、mod_rewrite的具体使用方法,我在这里就不多说了,请看这个链接:
http://bbs.chinaunix.net/viewthread.php?tid=66521&extra=page%3D2
四、开始安装!!!!!!
仔细看上面理论说明,具体操作没有几步的,越来越觉得理论基础非常重要!!!
1、安装apache2.0
cd apache2.0
./configure --enable-MODULE=shared --enable-so --with-mpm=worker  --enable-
rewrite=shared  --enable-proxy=shared
说明:
--enable-proxy=shared  加入mod_proxy模块
--enable-rewrite=shared  加入mod_rewrite模块
对于编译mod_rewrite模块,我多说几句:
按照上面的方法,rewrite模块已经正常编译进了./apache2/module/目录里了,而且配置文件LoadModule也添加相关路径了,可是我使用时rewrite却不能重写,所以我又手动添加了一次,这个方法同样也适合不想重新安装apache,采用手动添加的方法。

cd 源代码目录
find ./ -name mod_rewrite.c
  cd PATH/to/mod_rewrite.c
/usr/local/apache2/bin/apxs -c mod_rewrite.c
/usr/local/apache2/bin/apxs -i -a -n mod_rewrite mod_rewrite.la
 
如果出现这个错误
Syntax error on line 329 of /usr/local/apache2/conf/httpd.conf:
Can`t loacte API module staructure `mod_rewrite_module` in file
/usr/local/apache2/modules/mod_rewrite.so:/usr/local/apache2/lib/libapr-
0.so.0:undefined symbol:mod_rewrite_module
修改http.conf
原来:httpd.conf里面写的mod_rewrite_module
改成 rewrite_module
 
如果重启apache出现这个错误module rewrite_module is built-in and can`t be loaded
表示模块是内建的,不用再调入
结束。
2、修改配置文件
vi conf/httpd.conf
添加下面内容:
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
启用mod_proxy反向代理
NameVirtualHost 192.168.0.203:80
<VirtualHost 192.168.0.203:80>
    ServerAdmin test@test.com
    DocumentRoot /test
    ServerName www.test.com
    ErrorLog logs/ip-error_log
RewriteEngine on
RewriteCond %{REQUEST_URI} /[^&]+/b/
RewriteCond %{REQUEST_URI} !/test/
RewriteCond %{HTTP_HOST} ^www.test.com [NC]
RewriteRule ^/(.*) http://www.test.com/test/ [P,L]
</VirtualHost>
这几个条件和规则的意思是:如果输入www.test.com   ([^&]+表示任意字符)并且后面的URI为a/b/形式,则跳到www.test.com/test/ 如果输入的是www.test.com/test/ 则不跳转。[P]这个参数很重要,使用反向代理方式应该用户请求。
经过上面这几步,就是可以实现前面的需求。
分享到:
评论

相关推荐

    Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    正向代理与反向代理概念** **正向代理**: - 位于客户端和原始服务器之间。 - 客户端向代理服务器发送请求。 - 代理服务器转交请求并返回结果给客户端。 - 主要用于帮助客户端访问受限的资源。 **反向代理**: - 对...

    实战Nginx.取代Apache的高性能Web服务器

    6.3 Nginx负载均衡与反向代理的配置实例 6.4 Nginx负载均衡的HTTP Upstream 模块 6.5 Nginx负载均衡服务器的双机高可用 第7章 Nginx的Rewrite规则编写实例 7.1 什么是Nginx的Rewrite规则 7.2 Nginx Rewrite规则...

    Nginx 面试题让你全面掌握核心技术.rar

    什么是反向代理? 反向代理服务器的优点是什么?Nginx目录结构有哪些? 牛nginx..conf有哪些属性模块? cookie和session区别? 为什么Nginx不使用多线程?nainx和apache的区别 什么是动态资源、静态资源分离?为什么要做动...

    2022最新版运维最全面面试题!

    9. **反向代理与正向代理**:反向代理隐藏了后端服务器,用户直接与Nginx交互,Nginx再将请求转发给内部服务器;正向代理则是用户通过代理服务器访问目标网站,代理服务器作为用户和目标服务器之间的中介。 10. **...

    Nginx教程从入门到精通--文字版.pdf

    17. Nginx正向代理和反向代理配置:正向代理与反向代理是Nginx重要的代理模式,用于不同的网络环境与需求。 18. Nginx+keepalived+proxy_cache配置高可用nginx群集和高速缓存:介绍如何通过组合Nginx、keepalived和...

    Apache和Nginx的优缺点详解_动力节点Java学院整理

    此外,两者都支持正向和反向代理,虚拟主机,URL 重写,以及 SSL 加密传输等功能。 在优缺点对比上,Nginx 相对于 Apache 来说,具有以下优势: 1. **轻量级**:Nginx 占用的系统资源较少,启动快速,适合处理大量...

    Ngnix从入门到精通

    15. Nginx正向代理和反向代理:正向代理是指代理服务器代替客户端访问外部资源,反向代理则是代理服务器接收来自互联网的连接请求,转发给内部网络上的服务器。 16. Nginx+Keepalived+proxy_cache配置高可用nginx...

    2019年BATJ最新面试414道题(含答案解析)Nginx篇.pdf

    2. 正向代理和反向代理的能力。 3. 出色的负载均衡和故障转移。 4. 具有IMAP/POP3/SMTP等邮件协议的代理能力。 5. 使用非常少的内存,轻量级。 6. 通过使用基于事件的非阻塞I/O模型和多路复用技术,可以很容易地扩展...

    Apache中使非伪静态url跳转到伪静态url的方法

    - **解答**:可以使用Apache自带的`httpd-rewrite`工具或者在线的.htaccess测试工具进行模拟测试。 #### 六、扩展阅读 除了上述示例之外,还有许多其他的伪静态规则可供参考: - **WordPress**: WordPress默认就...

    Nginx教程从入门到精通到失业

    #### 十六、搭建 Nginx 反向代理用做内网域名转发 - **情景**:模拟内网域名转发的场景。 - **配置步骤**:详细介绍如何配置 Nginx 实现内网域名转发。 - **遇到的问题**:列出在配置过程中可能遇到的问题及解决...

    【Java面试系列】Nginx.pdf

    ### 正向代理与反向代理的区别 - **正向代理**:代理客户端请求,客户端明确知道访问的是代理服务器,用于隐藏客户端真实身份或加速网络访问。 - **反向代理**:代理服务器接收来自客户端的请求并转发给实际的...

    运维142问不看一定后悔

    34. **反向代理与正向代理**:反向代理隐藏真实服务器,正向代理隐藏客户端。 35. **Squid、Varnish、Nginx对比**:Squid主要用于缓存,Varnish专注静态内容加速,Nginx多功能,兼顾反向代理和负载均衡。 36. **...

    LINUX服务器配置大全[参考].pdf

    2. **正向解析文件**:在本例中,正向解析文件是/var/named/named.mydomain.com,它定义了域名与其对应的IP地址。`SOA`记录包含域名信息,`NS`记录指定权威名称服务器,`MX`记录定义邮件交换器,而`CNAME`记录用于...

Global site tag (gtag.js) - Google Analytics