Pages

Friday, 30 March 2012

利用apache server的proxy module+rewrite module+.htaccess反向代理任何被封的网站

我在自己的vps上启用了proxy module:
as3:# a2enmod proxy
Module proxy already enabled.

也启用了rewrite module:
as3:~# a2enmod rewrite
Module rewrite already enabled

我在我的域名所指向的目录里放了一个.htaccess文件,内容如下:
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ http://briteming.appspot.com/$1 [P]

但是当我访问http://bm.brite.biz/时显示:
Internal Server Error。访问http://bm.brite.biz,并不能反向代理http://briteming.appspot.com

怎么回事?
我的vps为debian系统.

摸索了一番,自己搞定。首先用find / -name mod_rewrite.so  (mod_proxy.so mod_proxy_connect.so mod_proxy_http.so mod_proxy_ftp.so)分别查找这些模块的位置。然后修改apache的配置文件,在文件的末尾加入如下几行以加载这几个模块:
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_connect_module /usr/lib/apache2/modules/mod_proxy_connect.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule proxy_ftp_module /usr/lib/apache2/modules/mod_proxy_ftp.so
修改apache的默认的虚拟主机的配置文件如下:
<Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All (把None改为All)
                Order allow,deny
                allow from all
        </Directory>

然后重启apache,就ok了。现在访问http://bm.brite.biz,即可反向代理http://briteming.appspot.com的内容。

把.htaccess内的 http://briteming.appspot.com替换为任何被封的网址,这样设置后即可访问该被封的网址.
原创文章.

相关帖子: http://briteming.blogspot.co.uk/2012/02/apache_17.html
----------------------------------------------------------------------------------



配置Apache作为支持Http/Https的反向代理的方法

Apache作为功能全面的Web Server软件,可以很简单的配置成一个反向代理或者Load Balancer前端使用,不过在默认情况下,CentOS或者Ubuntu系统从软件仓库安装的版本只能反向代理http协议的网站,不能支持代理https/SSL加密的站点,如果直接修改配置ProxyPass参数会出现500错误,以下简单介绍一下如何配置Apache使软件支持反向代理Https加密协议的网站。

在CentOS下Yum安装好Apache以后,还需要安装使Apache支持SSL的模块mod_ssl.so。步骤是先运行
yum install mod_ssl
安装SSL模块,系统会自动在/etc/httpd/conf.d/目录下加入ssl.conf配置文件,这个文件会Include到httpd.conf文件中,里面包含了为Apache服务器启用SSL所需的基本配置,主要是
LoadModule ssl_module modules/mod_ssl.so 加载SSL模块和
     Listen 443 让Apache在Https 443端口监听
然后修改/etc/httpd/conf/httpd.conf配置文件,加入以下配置:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule ssl_module modules/mod_ssl.so 


ProxyRequests Off(禁用正向代理)
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLProxyEngine on
ProxyPass /maps https://maps.googleapis.com/maps
ProxyPassReverse /maps https://maps.googleapis.com/maps


然后运行service httpd restart重启httpd服务就Okay了。如果是Ubuntu系统以Root用户运行命令:
a2enmod ssl
激活Mod_ssl模块,然后同样修改配置文件再重启apache2服务即可。
参考文章:
1、http://stackoverflow.com/questions/16130303/apache-config-how-to-proxypass-http-requests-to-https
2、http://ihazem.wordpress.com/2011/12/12/installing-mod_ssl-for-apache-on-centos-for-ssl-certificates/
--------------------

 利用vps架设ghs的反向代理

ghs.google.com在国内是被墙掉的。不过如果你自己有一台国外的vps或者服务器,完全可以自己来架设该服务。主要说一下nginx和apache下的配置.

Nginx的情形-

upstream ghs {
ip_hash;
server ghs.google.com;
server 72.14.203.121;
server 72.14.207.121;
server 74.125.43.121;
server 74.125.47.121;
server 74.125.53.121;
server 74.125.77.121;
server 74.125.93.121;
server 74.125.95.121;
server 74.125.113.121;
server 216.239.32.21;
server 216.239.34.21;
server 216.239.36.21;
server 216.239.38.21;
}

server {
listen 80;
server_name ghs.yourdomain.com www.urdomain.com;

location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_pass http://ghs;
proxy_set_header  x-real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}