Heim > php教程 > PHP源码 > 生成nginx配置文件,反向代理google

生成nginx配置文件,反向代理google

PHP中文网
Freigeben: 2016-05-23 16:40:09
Original
2152 Leute haben es durchsucht

生成nginx配置文件,反向代理google

生成nginx配置文件,反向代理google

google的ip地址经常改变,所以要用nslookup去更新ip

#!/bin/env php
<?php
 
define("CONF_PATH", &#39;/usr/local/nginx/conf/hosts&#39;);
 
$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[&#39;ips&#39;]) && date(&#39;Ymd&#39;, $arr[&#39;__logtime&#39;])==date(&#39;Ymd&#39;)) {
            $ips = array_merge($ips, $arr[&#39;ips&#39;]);
            $ips = array_unique($ips);
        }
    }
}
 
$data = [&#39;__logtime&#39; => time(), &#39;ips&#39; => $ips];
file_put_contents($google_ips, serialize($data));
 
$str = &#39;&#39;;
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);
Nach dem Login kopieren

 以上就是生成nginx配置文件,反向代理google的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage