2015年(73)
分类: LINUX
2015-03-16 16:24:33
先简单说下我碰到的情况。我一个域名的http页面被墙,国内用户可以通过https方式打开。为了seo,也遵循尽量不换网站域名的前提下,现 在我想实现的目标是对国外蜘蛛(google...)和不在墙内的用户访问http页面时301重定向跳转到https,而百度蜘蛛访问原页面时301到 一个新域名,新域名反向代理原来的网页,用户通过百度搜索点击打开的是原域名https页面。
server { listen 80 default; server_name index index.html index.htm index. default.html default.htm default.php; root /home/wwwroot/nbhao; #通过$http_user_agent判断是否是百度蜘蛛 if ($http_user_agent ~* Baiduspider){ return 301 } #排除对一个网址的301重定向 if ($request_uri !~ ^/.*/.*notify_url\.php.*){ return 301 } location ~ .*\.(php|php5)?$ { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fcgi.conf; } access_log /home/wwwlogs/ } server { listen 443 ; ...... #https配置详见 }
server { listen 80; #listen [::]:80; server_name index index.html index.htm index.php default.html default.htm default.php; root /home/wwwroot/hellonet8.com/www; #如果用户不是百度蜘蛛且访问的网址不是baidu.*\.html格式 set $flag 0; if ($http_user_agent !~* Baiduspider){ set $flag "${flag}1"; } #用做百度站长平台的验证 if ($request_uri !~ ^.*/baidu.*\.html.*){ set $flag "${flag}2"; } if ($flag = "012") { return 301 } #接上不,如果是百度蜘蛛,执行_pass反代。 location ^~ / { proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; if ($request_uri !~ ^.*/baidu.*\.html.*){ proxy_pass https:// } } ...... access_log /home/wwwlogs/ access; }
[stocky@s1 ~]$ curl -I -A Baiduspider HTTP/1.1 301 Moved Peanently Server: nginx/1.0.15 Date: Wed, 04 Mar 2015 08:59:27 GMT Content-Type: text/html Content-Length: 185 Connection: keep-alive Loion: [stocky@s1 ~]$ curl -I -A Baispider HTTP/1.1 200 OK Server: nginx Date: Wed, 04 Mar 2015 09:01:29 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive Vary: Accept-Encoding Vary: Accept-Encoding X-Powered-By: PHP/5.2.17p1 [stocky@s1 ~]$ curl -I -A google HTTP/1.1 301 Moved Permanently Server: nginx/1.0.15 Date: Wed, 04 Mar 2015 09:00:08 GMT Content-Type: text/html Content-Length: 185 Connection: keep-alive Location: htt:/// [stocky@s1 ~]$ curl -I -A google HTTP/1.1 301 Moved Permanently Server: nginx Date: Wed, 04 Mar 2015 09:02:07 GMT Content-Type: text/html Content-Length: 178 Connection: keep-alive Location: https:/// [stocky@s1 ~]$ curl -I -A Mozilla HTTP/1.1 301 Moved Permanently Server: nginx/1.0.15 Date: Wed, 04 Mar 2015 09:01:59 GMT Content-Type: text/html Content-Length: 185 Connection: keep-alive Location: https:/// [stocky@s1 ~]$ curl -I -A Mozilla HTTP/1.1 301 Moved Permanently Server: nginx Date: Wed, 04 Mar 2015 09:04:00 GMT Content-Type: text/html Content-Length: 178 Connection: keep-alive Location: https:///
测试后发现满足要求。