he-sb / tech

My blog related to technique.
MIT License
9 stars 2 forks source link

使用 Envoy 反代谷歌 #27

Open he-sb opened 4 years ago

he-sb commented 4 years ago

适合使用自己的服务器来搭建谷歌的镜像站,造福身边没有条件的朋友。

参考链接:

使用Nginx反向代理google,做谷歌搜索镜像 - 栖迟于一丘

核心配置:

location /
{
    proxy_redirect off;
    proxy_cookie_domain "google.com" "he-sb.tk";
    proxy_pass https://www.google.com;
    proxy_set_header Host "www.google.com";
    proxy_set_header User-Agent $http_user_agent;
    proxy_set_header Referer https://www.google.com;
    proxy_set_header Accept-Encoding "";
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Accept-Language "zh-CN";
    proxy_set_header Cookie 
    "PREF=ID=047808f19f6de346:U=0f62f33dd8549d11:FF=2:LD=zh-CN:NW=1:TM=1325338577:LM=1332142444:GM=1:SG=2:S=rE0SyJh2W1IQ-Maw";

    #Set Nginx Cache

    sub_filter "https://www.google.com" "https://google.he-sb.tk";
    sub_filter_once off;

    addition_types *;
}

实际使用发现以上方法并不行,只能打开谷歌首页,实际搜索内容时还是会被谷歌判定为机器人限制访问。

he-sb commented 4 years ago

参考链接:

  1. Envoy 基础教程:反向代理谷歌搜索 – 云原生实验室 - Kubernetes|Docker|Istio|Envoy|Hugo|Golang|云原生

  2. Envoy 基础教程:基于文件系统动态更新配置 – 云原生实验室 - Kubernetes|Docker|Istio|Envoy|Hugo|Golang|云原生

  3. Envoy 基础教程:入门篇 – 云原生实验室 - Kubernetes|Docker|Istio|Envoy|Hugo|Golang|云原生

he-sb commented 4 years ago

使用 Docker 运行 Envoy。

docker run --restart always envoyproxy/envoy -v /root/envoy:/etc/envoy -v /root/envoy/ssl:/etc/ssl

参数说明:

he-sb commented 4 years ago

Envoy 服务配置,在 /root/envoy/envoy.yaml 文件写入以下内容:

node:
  id: node0
  cluster: cluster0
dynamic_resources:
  lds_config:
    path: /etc/envoy/lds.yaml
  cds_config:
    path: /etc/envoy/cds.yaml
admin:
  access_log_path: "/dev/stdout"
  address:
    socket_address:
      address: "0.0.0.0"
      port_value: 15001

参数说明:

he-sb commented 4 years ago

监听器(Listener)配置,在 /root/envoy/lds.yaml 中写入以下内容:

version_info: "0"
resources:
- "@type": type.googleapis.com/envoy.api.v2.Listener
  name: listener_https
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 443
  filter_chains:
  - filter_chain_match:
      server_names: "google.he-sb.cf"
    transport_socket:
      name: envoy.transport_sockets.tls
      typed_config:
        "@type": type.googleapis.com/envoy.api.v2.auth.DownstreamTlsContext
        common_tls_context:
          tls_certificates:
          - certificate_chain:
              filename: "/etc/ssl/google.he-sb.cf/fullchain.crt"
            private_key:
              filename: "/etc/ssl/google.he-sb.cf/privkey.key"
    filters:
    - name: envoy.http_connection_manager
      typed_config:
        "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
        stat_prefix: ingress_https
        codec_type: AUTO
        access_log:
          name: envoy.file_access_log
          typed_config:
            "@type": type.googleapis.com/envoy.config.accesslog.v2.FileAccessLog
            path: /dev/stdout
        route_config:
          name: https_route_google
          virtual_hosts:
          - name: default
            domains:
            - "*"
            routes:
            - match:
                prefix: "/"
              route:
                cluster: google
                host_rewrite: www.google.com
        http_filters:
        - name: envoy.router

参数说明:

he-sb commented 4 years ago

集群(Cluster)配置,在 /root/envoy/cds.yaml 中写入以下内容:

version_info: "0"
resources:
- "@type": type.googleapis.com/envoy.api.v2.Cluster
  name: google
  connect_timeout: 1s
  type: logical_dns
  dns_lookup_family: V4_ONLY
  lb_policy: ROUND_ROBIN
  load_assignment:
    cluster_name: google
    endpoints:
    - lb_endpoints:
      - endpoint:
          address:
            socket_address:
              address: www.google.com
              port_value: 443
  tls_context:
    sni: www.google.com
he-sb commented 4 years ago

由于 Docker 对 inotify 的支持不太友好,有时会检测不到文件系统的更改,所以在文件修改后需要强制更新一下。原理很简单,将文件重命名,然后再改回来。在配置文件目录新建一个脚本:

vim /root/envoy/apply.sh

写入以下内容:

#!/bin/bash

mv cds.yaml cds.yaml.temp
mv cds.yaml.temp cds.yaml
mv lds.yaml lds.yaml.temp
mv lds.yaml.temp lds.yaml

注意,必须先更新 CDS,后更新 LDS。

给脚本赋予执行权限:

chmod +x /root/envoy/apply.sh

改动了配置文件后执行一下这个脚本来使配置生效。