个人博客

记录一些日常

使用 Nginx 反代谷歌与 wikipedia

本文使用 lnmp.org 提供的 lnmp 一键脚本进行相关示范,使用 lnmp1.4lnmp1.5 均可

获取lnmp1.5

wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz
tar zxf lnmp1.5.tar.gz

操作步骤

1. 编译 ngx_http_substitutions_filter_module 模块

分两种情况

已安装nginx的

编辑/root/lnmp1.5/lnmp.conf文件,找到位于第4行的Nginx_Modules_Options,在两个单引号之间插入--add-module=/root/ngx_http_substitutions_filter_module,保存

然后在/root目录下执行命令

git clone "https://github.com/yaoweibin/ngx_http_substitutions_filter_module.git"

然后进入/root/lnmp1.5目录下

./upgrade.sh

输入1,回车,然后输入你当前的nginx版本号(Current Nginx Version这里的值),回车,回车,然后等待编译完成

《使用 Nginx 反代谷歌与 wikipedia》

未安装nginx的

/root目录下执行命令

git clone "https://github.com/yaoweibin/ngx_http_substitutions_filter_module.git"

然后编辑/root/lnmp1.5/lnmp.conf文件,找到位于第4行的Nginx_Modules_Options,在两个单引号之间插入--add-module=/root/ngx_http_substitutions_filter_module,保存

最后,在/root/lnmp1.5目录下执行命令(仅会安装nginx

./install.sh nginx

2. 检查已编译的模块

输入nginx -V查看已编译的模块,包含--add-module=/root/ngx_http_substitutions_filter_module即可

《使用 Nginx 反代谷歌与 wikipedia》

3. 添加配置文件

使用lnmp vhost add命令添加配置文件。这里假设你的域名是domain.com,如果只想要反代谷歌,只需要添加

  • domain.com
  • www.domain.com

如果还想要反代wikipedia,还需要添加

  • zh.m.wikipedia.domain.com
  • zh.wikipedia.domain.com

注:我是单买了一个域名来作为谷歌和维基百科的镜像站用的,所以二级、三级域名都是形似谷歌、维基百科域名的。比如google.com对应domain.com,www.google.com对应www.domain.com等(我的域名用domain.com代替表达)。假设你的域名是abc.com,你不一定必须要按照教程设置abc.com和www.abc.com作为镜像站点的域名,你也可以设置google.abc.com和www.google.abc.com,或是自由发挥,均不影响使用

设置SSL

这里简单说一下,你可以通过 freessl.org 免费申请亚洲诚信的一年有效期SSL证书,或是通过 lnmp 申请有效期三个月(虽然有效期是三个月,但脚本会自动续期,不必担心)的 Let’s Encrypt 免费SSL证书

使用亚洲诚信SSL证书

1.将SSL证书的crt文件和key文件上传至服务器
2.在Add SSL Certificate项时输入y,回车,然后输入1
3.输入crt文件和key文件的绝对路径

使用 Let’s Encrypt SSL证书

Add SSL Certificate项时输入y,回车,然后输入2

《使用 Nginx 反代谷歌与 wikipedia》

4. 编辑配置文件

下面贴出了各个域名的配置文件模板,你需要将配置文件模板里的domain.com修改成你的对应域名,可以使用 ctrl + h 替换

Nginx配置文件目录:/usr/local/nginx/conf/vhost

domain.com

这个配置模板对应 google.com 域名,将http和gttps的请求301重定向到 www.domain.com 处理

server
	{
		listen 80;
		server_name domain.com;
		return 301 https://www.domain.com$request_uri;
	}

server
    {
        listen 443 ssl http2;
        server_name domain.com;
	return 301 https://www.domain.com$request_uri;
		
        ssl on;
        ssl_certificate /usr/local/nginx/conf/ssl/domain.com/fullchain.cer;
        ssl_certificate_key /usr/local/nginx/conf/ssl/domain.com/domain.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
    }

www.domain.com

这个配置模板对应 www.google.com 域名

server
	{
		listen 80;
		server_name www.domain.com;
		return 301 https://$server_name$request_uri;
	}

server
    {
        listen 443 ssl http2;
        server_name www.domain.com ;
        ssl on;
        ssl_certificate /usr/local/nginx/conf/ssl/www.domain.com/fullchain.cer;
        ssl_certificate_key /usr/local/nginx/conf/ssl/www.domain.com/www.domain.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
		
		location / {
			subs_filter 'www.google.com.hk' 'www.domain.com';
			subs_filter 'zh.wikipedia.org' 'zh.wikipedia.google1s.com';
			subs_filter_types text/css text/xml text/javascript;
			
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-Proto https;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header Referer https://www.google.com.hk;
			proxy_set_header User-Agent $http_user_agent;
			proxy_set_header Host www.google.com.hk;
			proxy_pass https://www.google.com.hk;
			proxy_set_header Accept-Encoding "";
			proxy_set_header Accept-Language "zh-CN";
			proxy_set_header Cookie "PREF=ID=047808f19f6de346:U=0f62f33dd8549d11:FF=2:LD=en-US:NW=1:TM=1325338577:LM=1332142444:GM=1:SG=2:S=rE0SyJh2W1IQ-Maw";
			proxy_cookie_domain www.google.com.hk www.domain.com;
		}
    }

zh.wikipedia.org

这个配置模板对应 zh.wikipedia.org 域名

server
	{
		listen 80;
		server_name zh.wikipedia.domain.com;
		return 301 https://$server_name$request_uri;
	}

server
    {
        listen 443 ssl http2;
        server_name zh.wikipedia.domain.com ;
        ssl on;
        ssl_certificate /usr/local/nginx/conf/ssl/zh.wikipedia.domain.com/fullchain.cer;
        ssl_certificate_key /usr/local/nginx/conf/ssl/zh.wikipedia.domain.com/zh.wikipedia.domain.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
		
		location / {
			subs_filter 'zh.wikipedia.org' 'zh.wikipedia.domain.com';
			subs_filter_types text/css text/xml text/javascript;
			
			proxy_pass https://zh.wikipedia.org;
			proxy_redirect 'https://zh.m.wikipedia.org' 'https://zh.m.wikipedia.domain.com';
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-Proto https;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header Referer https://zh.wikipedia.org;
			proxy_set_header User-Agent $http_user_agent;
			proxy_set_header Host zh.wikipedia.org;
			proxy_set_header Accept-Encoding "";
			proxy_cookie_domain zh.wikipedia.org zh.wikipedia.domain.com;
		}
    }

zh.m.wikipedia.domain.com

这个配置模板对应 zh.m.wikipedia.org 域名

server
	{
		listen 80;
		server_name zh.m.wikipedia.domain.com;
		return 301 https://$server_name$request_uri;
	}

server
    {
        listen 443 ssl http2;
        server_name zh.m.wikipedia.domain.com ;
        ssl on;
        ssl_certificate /usr/local/nginx/conf/ssl/zh.m.wikipedia.domain.com/fullchain.cer;
        ssl_certificate_key /usr/local/nginx/conf/ssl/zh.m.wikipedia.domain.com/zh.m.wikipedia.domain.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
		
		location / {
			subs_filter 'zh.m.wikipedia.org' 'zh.m.wikipedia.domain.com';
			subs_filter_types text/css text/xml text/javascript;
			
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-Proto https;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header Referer https://zh.m.wikipedia.org;
			proxy_set_header User-Agent $http_user_agent;
			proxy_set_header Host zh.m.wikipedia.org;
			proxy_pass https://zh.m.wikipedia.org;
			proxy_set_header Accept-Encoding "";
			proxy_cookie_domain zh.m.wikipedia.org zh.m.wikipedia.domain.com;
		}
    }

5. 重启Nginx

重启Nginx

lnmp nginx restart

《使用 Nginx 反代谷歌与 wikipedia》

如果没有报错,那就能用了。如果报错了,那就根据错误提示一步步排查,并解决问题

你可能会遇到的问题

访问镜像站点却跳转到了谷歌

谷歌会根据访问IP的归属地,将访问 www.google.com 的请求重定向到归属地的站点(如香港IP的访问会重定向到 www.google.com.hk,新加坡IP的访问会重定向到 www.google.com.sg)

如果你访问你的镜像站点,却被重定向到了谷歌的另一个站点,那只需要将这个站点的域名作为源站,修改 www.domain.com 域名的 nginx 配置文件,将配置文件中的 www.google.com.hk 全部替换为重定向到的这个站点的域名,然后重启 nginx 即可

重启nginx时报错

如果你使用了自己的SSL证书,或是使用了亚洲诚信签发的证书,在重启 nginx 时报错,那你需要将使用这些 SSL 证书的域名的 nginx 配置文件中的

ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;

注释掉(在 ssl_dhparam 前面加上“#”号),然后重启 nginx

参考来源

https://www.moerats.com/archives/445/

发表评论

电子邮件地址不会被公开。 必填项已用*标注