最近由于不能描述的原因,很多服务器挂了……
实际上,作为技术人员,翻墙之所以为刚需,就是为了Google。
bing是残废;baidu是垃圾;唯有Google才能准确提供相关技术文档。
那么,在目前的网络环境下,如何能低风险的访问Google(节省下有关部门的茶钱)?
答案很简单,自己做个服务器,将Google的服务反向代理出来即可。
原理大概就是:
- 利用nginx的proxy_pass,将访问A域名的请求,转化为访问Google的请求。
- Google内容,通过nginx反馈给客户端。
- 对于客户来说,就是访问了一个Google的镜像站。
一切都很完美。
参考了N个帖子后。开工如下:
重新编译nginx
查看下当前系统自带的nginx
123456$nginx -Vnginx version: nginx/1.10.3 (Ubuntu)built with OpenSSL 1.0.2g 1 Mar 2016TLS SNI support enabledconfigure arguments: --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads这就是ubuntu 16.04自带的nginx的编译选项。记录下来备用。
下载对应版本nginx源码
既然是
ningx/1.10.3
,那就去官网下载一个同版本的。1wget http://nginx.org/download/nginx-1.10.3.tar.gz解压,备用。
下载所需的扩展模块
需要两个模块源代码。分别是页面内容替代库和大佬专为google反代开发的过滤模块。
12git clone https://github.com/cuber/ngx_http_google_filter_modulegit clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module记住库路径
编译工具和依赖库安装
这个无需多说,人家需要我就安~
1sudo apt install libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev libxml2 libxml2-dev libxslt1-dev libgd-dev libgeoip-dev build-essential编译&安装
进入nginx-1.10.3目录,执行:
123./configure --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads--add-module={YOUR_PATH}ngx_http_google_filter_module--add-module={YOUR_PATH}ngx_http_substitutions_filter_module注意,最后的add-module里面的
YOUR_PATH
是刚才git的那2个工程的path123make;sudo make installsudo cp -rf objs/nginx /usr/sbin/nginx至此,nginx已经OK
测试
1nginx -V (看看最后是不是包含了add-module)
域名
域名解析更改
把一个域名指向服务器地址即可。
(假设你希望用
google.0w0.io
。以下配置都以此为例)
搞定证书的一摊事
安装acme.sh
1wget https://get.acme.sh -O install_acme.sh ; bash install_acme.sh申请个证书
1acme.sh --issue -d google.0w0.io --nginx证书搞定后,会保存在 `~/.acme/google.0w0.io下。
ps: 这里多说一句,acme包含三种域名所有权验证。最简单的是standalone,这个需要当前服务器80端口工作正常。其次是nginx,很快就搞定。还有一种是webroot,这个没试。按实际情况选择吧。
综合配置
nginx配置
123456789101112131415161718192021222324252627282930313233343536373839404142proxy_cache_path /tmp/nginx/cache/one levels=1:2 keys_zone=one:10m max_size=2g;proxy_cache_key "$host$request_uri";upstream www.google.com {server 172.217.160.100:443 weight=1 max_fails=3;server 172.217.160.68:443 weight=1 max_fails=3;server 172.217.27.132:443 weight=1 max_fails=3;server 216.58.200.228:443 weight=1 max_fails=3;server 216.58.200.36:443 weight=1 max_fails=3;}server {listen 80;server_name google.0w0.io;# http to httpslocation / {rewrite ^/(.*)$ https://google.0w0.io$1 permanent;}}server {listen 443 ssl;server_name google.0w0.io;resolver 8.8.8.8;ssl on;ssl_certificate /srv/www/google.0w0.io/ssl/server.cer;ssl_certificate_key /srv/www/google.0w0.io/ssl/server.key;ssl_dhparam /srv/www/google.0w0.io/ssl/dhparam.pem;access_log off;error_log on;error_log /var/log/nginx/google-proxy-error.log;location / {google on;}}基本照抄就可以了。里面的证书路径,按照自己的来。其中server.cer 就是 acme.sh申请下来的fullchain.cer
细小但重要的的事情
外人勿用
nginx配置里面,在location/ 域里面添加:
12auth_basic "for better search...";auth_basic_user_file /srv/www/google.0w0.io/password;其中,password文件,用一下脚本生成:
1printf "username:$(openssl passwd -crypt password)\n" >> password把里面的username和password改为自己的就可以了。
利用auth_basic,可以阻挡外人访问我们自己的网站。包括爬虫~