Archive for 6月, 2014
nginx双向https代理
前段时间有一个googlestable.com。
但是呢。它是http协议的。于是突发奇想根据googlestable代理的原理
弄一个双向https的代理应该可行了
要做的事情
首先我们需要一个nginx
wget http://nginx.org/download/nginx-1.7.2.tar.gz
tar xvf nginx*.tar.gz
./configure –prefix=/opt/net.techest/tpanel/server/nginx-1.7.2 –with-http_ssl_module –with-http_sub_module
这里注意需要两个附加模块。第一个即ssl加密模块,第二个用来做响应的替换
因为没有交钱,所以得找个地方,签名生成为我们的服务器生成一个自己用的证书
openssl req -new -x509 -nodes -out server.crt -keyout server.key
上部命令会生成两个文件,按他们的路径配置如下的nginx配置
server {
listen 443;
server_name g.techest.net;
keepalive_timeout 60m;access_log /home/techest/logs/g.techest.net.nginx_access.log main;
ssl on;
ssl_certificate /opt/net.techest/tpanel/etc/sslkey/server.crt;
ssl_certificate_key /opt/net.techest/tpanel/etc/sslkey/server.key;ssl_session_timeout 60m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;location / {
client_max_body_size 8m;
proxy_connect_timeout 15s;
proxy_send_timeout 1m;
proxy_read_timeout 1m;
proxy_buffer_size 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
# 需要访问的网站
proxy_pass https://www.google.com.hk;
# 设置一下访问头
proxy_set_header Host www.google.com.hk;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 把cookie也代理过去
proxy_set_header Cookie $http_cookie;
proxy_set_header “Accept-Encoding” “”;
# 替换远端返回的cookie的作用域
proxy_cookie_domain ~\.([a-z]+\.[a-z]+)$ $host;
# 替换远端的302重定向
proxy_redirect ~*(.*)$ /;
# 统一替换远端响应
sub_filter “google.com.hk” “g.techest.net”;
sub_filter_types “*”;
sub_filter_once off;
}
# 防止google擅自主张打开了gzip
add_header Set-Cookie “GZ=Z=0;Domain=$host;Path=/;Max-Age=31536000”;
}
说明一下几个配置
- 最后那个地方是因为google新版使用cookie里面的GZ来决定是否开启gzip,优先级比上面写的Accept-Encoding还要高
- sub_filter只能替换一次,本来想用nginxlua来替换的,结果安装有问题,放弃了。而且注意如果服务端返回的是压缩数据就没有效果了
- proxy_cookie_domain可以强制把远程返回的cookie域改写掉。这样cookie和session都打通了