Open he-sb opened 4 years ago
使用 Docker 运行 Envoy。
docker run --restart always envoyproxy/envoy -v /root/envoy:/etc/envoy -v /root/envoy/ssl:/etc/ssl
参数说明:
镜像仓库:envoyproxy/envoy;
挂载相应目录:
-v /root/envoy:/etc/envoy
:配置文件目录;
-v /root/envoy/ssl: /etc/ssl
:证书目录。
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
参数说明:
dynamic_resources
字段声明使用动态配置文件,这样上游服务更新时就不用修改长长的主配置文件了,只要修改相应的配置文件就行;
Envoy 将使用 inotify 来监视文件的更改,一旦检测到更改,就立即更新订阅。可以使用
ll /proc/sys/fs/inotify/
查看系统是否支持 inotify;
其后的 lds_config
指定 Listener 配置文件路径,cds_config
指定 Cluster 配置文件路径;
注意此处写的路径是【容器内】路径,需要和上文启动容器时映射的【容器内】路径相同(即挂载目录参数冒号右边的路径);实际文件存放在【宿主机】路径下,即挂载参数冒号左边的路径。
admin
字段创建一个监听在 15001
的 Envoy 服务,访问日志输出到 /dev/stdout
,监听地址 0.0.0.0
表示可通过外网访问,若要仅限本机访问或通过反向代理来访问,可修改为 127.0.0.1
;
监听器(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
参数说明:
server_names
字段改为自己的域名;
tls_certificates
字段修改为域名对应证书存放的路径;
注意此处写的路径是【容器内】路径,需要和上文启动容器时映射的【容器内】路径相同(即挂载目录参数冒号右边的路径);实际文件存放在【宿主机】路径下,即挂载参数冒号左边的路径。
集群(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
由于 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
改动了配置文件后执行一下这个脚本来使配置生效。
适合使用自己的服务器来搭建谷歌的镜像站,造福身边没有条件的朋友。
参考链接:使用Nginx反向代理google,做谷歌搜索镜像 - 栖迟于一丘核心配置:实际使用发现以上方法并不行,只能打开谷歌首页,实际搜索内容时还是会被谷歌判定为机器人限制访问。