Google Scholar 翻墙记

摘要

在很久很久之前我的VPS就被Scholar屏蔽了,中间折腾了好几次都没有解决。

之前一直想着用哪家的VPS可以不被Google Scholar屏蔽,大概搜了一下,发现被屏蔽是非常常见的,用得多的基本都被Google Scholar屏蔽了,没有哪个VPS能一定不被Google Scholar屏蔽。不对!于是我心生一计,Google Cloud应该不会被Google Scholar给屏蔽叭?好了就用它了!

然后我被光速打脸,第一个申请的Google Cloud实例就是被Google Scholar屏蔽的IP。不过好在后来换了一个地区的竟然就成了!耶!希望这次能活久一点。

Google Cloud

Google Cloud有个免费计划,有两个福利:

  1. 前三个月会给你300美元的额度,在他的限制范围内可以随便用
  2. 每个月都有一些免费的东西(官方叫法是免费层级),小心点用的话是不会产生费用的

但是这里面还是有一些坑的:

  1. 拿到这300美元,必须要有visa之类的信用卡,或者非大陆地区的paypal,或者国外的银行卡。总而言之就是对中国用户非常不友好。我是借用了女朋友的爹的信用卡才搞定的。
  2. 那白嫖的300美元不能用来买GPU或者8个以上的CPU,也不能用win server的操作系统
  3. 免费层级一定要仔细研究清楚是哪些东西在什么范围内才会免费,否则稍有不胜就要掏钱了,我就不幸中招,但是好在有前面的300美元兜底,花了这300美元中的5美分,我原计划是在免费层级内解决需求的。

解决方案

在Google Cloud的免费层级,每个月可以用一个免费1核586M内存30GB硬盘的虚拟机,并且每个月有1 GB 网络出站流量 - 从北美到所有地区目的地(不包括中国和澳大利亚)。因为我只要解决上Google Scholar的问题,所以1GB流量就够了。

不过要特别注意,这1GB流量不能是去中国和澳大利亚的。如果超过1GB的话其实流量收费是$0.12/GB,还是挺贵的

因为Google会通过一些技术手段防止你给他的网站设置反向代理,所以要用高级一点的反向代理,用的就是Nginx Module for Google,不过这个手动配不是很好配置,意外的我找到了这个的docker版

然后访问自己的反向代理就能访问Google Scholar了~

操作方法

申请免费的Google Cloud 300美金

略,这里八仙过海,各显神通

创建免费实例

之后找到“创建实例”来弄一个新的虚拟机。

之后先仔细选择机器配置

  • 只有在N1里面才会有免费层级中提到的f1-micro机器类型

  • 只有3个地区的机器时免费的:us-west1us-central1us-east1。一开始我选择的是us-east1,但是给我的那台机器竟然上不了scholar,后来换了一台us-central1的就可以了。鉴别方法是:curl https:scholar.google.com,如果返回的不是被禁的信息,就是ok的。

  • 一个大坑是,磁盘类型必须要选择标准永久磁盘,因为官方说明非常模糊,直说HDD是免费的,但是启动磁盘类型里面还有一个平衡的永久性磁盘,这个其实是SSD来的,是要收费的,千万不要选错了,我就是这里被坑了5美分。然后磁盘大小可以直接怼到30GB。

  • 其他基本就不用设置什么了,记得实例名称改一下,这个就是机器的hostname,后面也无法在系统里改的。

配置机器

  • 机器创建好了直接在网页端登录即可,关闭selinux,开放ssh的root登录,添加秘钥,然后就可以直接愉快的ssh登录上机器玩耍了
  • 装docker等一些必备的东西在这里就不赘述了
  • 然后就是配置防火墙,Google Cloud默认禁止所有传入流量,需要传入的流量都要单独配置,通过一些配置可以节约一些奇怪来源的流量。我这里的逻辑是:除了我另一台VPS可以访问这台服务器,其他的都禁止。

Google Scholar代理配置

docker pull jokester/google-reverse-proxy
./create.sh

create.sh如下

#!/bin/bash

docker rm -f proxy

docker run -d \
--name=proxy \
--publish 443:443 \
-v /root/proxy/nginx.conf:/usr/local/nginx/conf/nginx.conf \
-v /root/proxy/ssl:/ssl \
--restart=always \
jokester/google-reverse-proxy

/root/proxy/nginx.conf如下,其中的scholar.yourdomain.tech需要替换为你自己的域名

#user  nobody;
worker_processes 2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    # http
    server {
        listen 80;

        location / {
            resolver 8.8.8.8;
            google on;
            google_language en;
            google_scholar on;
        }
    }

    # https (w/ self-signed cert)
    server {
        listen 443 ssl;
	server_name scholar.yourdomain.tech;
        ssl_certificate     /ssl/scholar.yourdomain.tech/pem;
        ssl_certificate_key /ssl/scholar.yourdomain.tech/key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:!aNULL:!MD5;

        location / {
            resolver 8.8.8.8;
            google on;
            google_language en;
            google_scholar on;
        }
    }

    include /nginx-conf.d/*.conf;
}

使用方法

我直接把scholar.yourdomain.tech添加到了我SS的PAC用户规则,然后访问https://scholar.yourdomain.tech/scholar就可以正常使用了

流量统计

由于超出1GB之后流量费挺贵的,所以还是做个流量监控叭

/root/traffic_count/log.sh如下

#!/bin/bash

traffic=`cat /proc/net/dev | grep eth0: | tr -s [:space:] | cut -d " " -f 11`
echo `date --rfc-3339=seconds` $traffic >> /root/traffic_count/`date +%Y_%m`

# 512*1024*1024=536870912
if [ $traffic -gt 536870912 ]
then
	echo "shutdown -h now" >> /root/traffic_count/`date +%Y_%m`
	shutdown -h now
fi

然后执行crontab -e

* * * * * /root/traffic_count/log.sh
0 0 1 * * reboot

设置每分钟检查一次流量

每月重启一次以使流量计数器归零

费用检查

在Google Cloud上可以检查是否产生了费用,如下图

我这里Balanced PD Capacity就是一开始选错了硬盘产生了费用,正确情况下应该是全0就是对的。

里面的使用量还可以查流量使用情况,不过好像延迟挺大的。

免费计划变更!!!

从2021年8月1日开始,谷歌的免费计划竟然变更了!然后过渡期只有1个月,如果在2021年8月31日前没有变更,之前的免费的VPS就会开始计费!(此处省略一句脏话),然后我今天2021年9月10日才发现,血亏1.53美元。

这里记录下变更免费计划的操作过程

删除原来的虚机

因为一开始看了一下原来的区域似乎没有免费计划的机器了,所以必须删了再新的有免费机器的地方重建虚拟机,但是后来发现是看错了……算了删了就删了重建叭

新建project

新建一个project,方便在结算费用中直接选择这个project,观察有没有产生费用

重建虚机

创建如下的虚拟机,但是无论我怎么找都没找到免费的提示,导师原来的f1-micro机器还会提示免费,所以先试试吧……

其他操作和原来相同。

删除预留ip

一个星期后我上去看了一下,wdnmd,竟然又扣费了,仔细排查了一下发现竟然是因为之前删除的实例之后ip是不会自动释放的,要手动释放,不然就会扣费

于是又扣了我1.31刀……

而且这个删除ip的地方还特别不好找……