早已经习惯了google访问不了,反向代理也没有太多的技术含量,网上搜配置文件一大把,这里贴一段代码用PHP生成nginx的反向代理配置文件,因为google的ip一直会变,所以配置文件最好让脚本去生成,然后用定时器去跑~
如果你不想自己做一个,可以用https://g.51open.net
#!/bin/env php
<?php
define("CONF_PATH", '/usr/local/nginx/conf/hosts');
$google_ips = __DIR__ . "/google_ips.txt"; // 保存IP地址文件
$ngx_cnf = CONF_PATH . "/51open.conf"; // NGINX配置文件
exec("nslookup google.com", $out, $ret);
$start = false;
$ips = [];
foreach($out as $line) {
// answer: 之后的是服务器对应IP
if (false !== strpos($line, "answer:")) {
$start = true;
} else if (!$start) {
continue;
}
preg_match("/Address: ((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))/i", $line, $matches);
if (!empty($matches) && isset($matches[1])) {
$ips[] = $matches[1];
}
}
// 保存的IP地址
if (file_exists($google_ips)) {
$data = file_get_contents($google_ips);
if ($data) {
$arr = unserialize($data);
if (isset($arr['ips']) && date('Ymd', $arr['__logtime'])==date('Ymd')) {
$ips = array_merge($ips, $arr['ips']);
$ips = array_unique($ips);
}
}
}
$data = ['__logtime' => time(), 'ips' => $ips];
file_put_contents($google_ips, serialize($data));
$str = '';
foreach ($ips as $ip) {
$str .= sprintf("\n server %s:80 max_fails=3;", $ip);
}
if (!$str) {
exit;
}
$ngx_tpl = <<<EOT
client_body_buffer_size 512k;
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
#levels设置目录层次
#keys_zone设置缓存名字和共享内存大小
#inactive在指定时间内没人访问则被删除在这里是1天
#max_size最大缓存空间
proxy_cache_path /data/cache/nginx/51open levels=1:2 keys_zone=51open:20m inactive=1d max_size=2g;
upstream google {%s
}
server {
listen 80;
server_name g.51open.net google.51open.net;
rewrite ^(.*)\$ https://\$host\$1 permanent;
}
server {
listen 443;
server_name g.51open.net google.51open.net;
ssl on;
ssl_certificate /usr/local/nginx/conf/hosts/ssl/g.51open.net.crt;
ssl_certificate_key /usr/local/nginx/conf/hosts/ssl/g.51open.net.key;
location / {
proxy_cache 51open;
proxy_cache_key \$host\$uri\$is_args\$args;
proxy_cache_valid 200 304 301 302 3d; #哪些状态缓存多长时间
proxy_cache_valid any 1d; #其他的缓存多长时间
proxy_redirect https://www.google.com/ /;
proxy_cookie_domain google.com g.51open.net;
proxy_pass http://google;
proxy_set_header Host "www.google.com";
proxy_set_header Accept-Encoding "";
proxy_set_header User-Agent \$http_user_agent;
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";
# --- 关键字替换 start --- #
sub_filter_types text/css text/xml text/javascript; # 过滤类型
sub_filter ssl.gstatic.com g.51open.net; # google会加载ssl.gstatic.com的几个资源和文件
sub_filter www.google.com g.51open.net;
sub_filter_once off;
# --- 关键字替换 end --- #
}
## 反向代理ssl.gstatic.com ##
location /gb {
proxy_cache 51open;
proxy_cache_key \$host\$uri\$is_args\$args;
proxy_cache_valid 200 304 301 302 3d; #哪些状态缓存多长时间
proxy_cache_valid any 1d; #其他的缓存多长时间
proxy_pass http://ssl.gstatic.com/gb/;
proxy_cookie_domain ssl.gstatic.com g.51open.net;
proxy_set_header Accept-Encoding "";
proxy_set_header User-Agent \$http_user_agent;
proxy_set_header Accept-Language "zh-CN";
}
}
EOT;
$content = sprintf($ngx_tpl, $str);
file_put_contents($ngx_cnf, $content);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。