反向代理代理百度、google
<VirtualHost _default_:443> # ServerAdmin mail@localhost # DocumentRoot "/var/www/html" ServerName baidu.dev.comsys.net.cn:443 SSLEngine On SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM SSLCertificateFile C:/Apache2.2/conf/server.cer SSLCertificateKeyFile C:/Apache2.2/conf/server.key #SSLCertificateChainFile pem文件路径,可选 SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 SSLProxyEngine On # RequestHeader set Front-End-Https "On" ProxyPass / https://www.baidu.com/ ProxyPassReverse / https://www.baidu.com/ # CacheDisable * </VirtualHost>
这几天有网友咨询nginx怎么同时反向代理http服务和https服务。其实这个问题很简单,因为http默认使用的是80端口而https默认使用的是443端口,是两个不同的服务,所以只需要把http和https这两个服务当成两个不同的服务来看,分别设置反向代理就可以了。我们以反向代理谷歌为例来分析分析配置方法。谷歌服务同时有http版和https版,我们就拿他下手正好解决国内不能访问谷歌的问题。有资源的朋友可以弄个国外的vps或是云主机添加反向代理就能使用谷歌的服务了,不过不能大面积推广,容易被墙。下面贴出反向代理谷歌的nginx配置并分析分析具体的代码。
假设用www.fedora.hk反向代理谷歌,是假设,我可不愿意由于这个我的网站被墙。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
proxy_cache_path /data/nginx/cache/one levels=1:2 keys_zone=one:10m max_size=10g;proxy_cache_key "$host$request_uri";server {listen 80;server_name www.fedora.hk fedora.hk;rewrite ^(.*) https://www.fedora.hk$1 permanent;} upstream google { server 173.194.127.144:80 max_fails=3; server 173.194.127.147:80 max_fails=3; server 173.194.127.148:80 max_fails=3; server 173.194.127.145:80 max_fails=3; server 173.194.127.146:80 max_fails=3; }server { listen 443; server_name www.fedora.hk fedora.hk; ssl on; ssl_certificate /usr/local/nginx/conf/fedora.crt; ssl_certificate_key /usr/local/nginx/conf/fedora.key;location / { proxy_cache one; proxy_cache_valid 200 302 1h; proxy_cache_valid 404 1m; proxy_redirect https://www.google.com/ /; proxy_cookie_domain google.com fedora.hk; 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"; sub_filter www.google.com www.fedora.hk; sub_filter_once off;}} |
解释下吧:
1、这里监听了80和443端口,用了ssl加密,高大上。ssl证书是免费的,startssl,自己去申请个放上就可以了。
2、定义了个upstream google,放了5个谷歌的ip,你也可以多放几个达到负载均衡的效果,不过在这的作用是把请求分发到不同的服务器上,避免同一个IP请求过多出现验证码。
3、设置了反向代理缓存,某些资源不用重复去请求谷歌获取,加快搜索速度。
4、proxy_redirect https://www.google.com/ /; 这行的作用是把谷歌服务器返回的302响应头里的域名替换成我们的,不然浏览器还是会直接请求www.google.com,那样反向代理就失效了。
5、proxy_cookie_domain google.com fedora.hk; 把cookie的作用域替换成我们的域名。
6、proxy_pass http://google; 反向代理到upstream google,会随机把请求分配到那几个ip。忘记说了,那几个ip可以在自己的vps或服务器上使用nslookup www.google.com获取。
7、proxy_set_header Accept-Encoding ""; 防止谷歌返回压缩的内容,因为压缩的内容我们无法作域名替换。
8、proxy_set_header Accept-Language "zh-CN";设置语言为中文
9、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"; 这行很关键,传固定的cookie给谷歌,是为了禁止即时搜索,因为开启即时搜索无法替换内容。还有设置为新窗口打开网站,这个符合我们打开链接的习惯。
10、sub_filter www.google.com www.fedora.hk;当然是把谷歌的域名替换成我们的了,注意需要安装nginx的sub_filter模块
好了,说明够详细了,如果哪有不清楚的参数可以直接去搜索一下就明白了。本实例使用的反向代理技术,URL重写,ssh,负载,内容替换,自定义header等相关技术,是个学习nginx不错的参考教程。
反向代理代理百度、google的更多相关文章
- Nginx正向代理代理http和https服务
Nginx正向代理代理http和https服务 1. 背景需求 通过Nginx正向代理,去访问外网.可实现局域网不能访问外网的能力,以及防止在上网行为上,留下访问痕迹. 2. 安装配置 2.1安装 w ...
- java动态代理--代理接口无实现类
转载:https://blog.csdn.net/weixin_45674354/article/details/103246715 1.接口定义: package cn.proxy; public ...
- nginx正向代理访问百度地图API
正向代理的概念 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器这个代理服务器呢,他能访问那个我不能访问的网站于是我先连上代 ...
- php实现查询百度google收录情况(示例代码)
对了貌似查google pr的东西只是file一个地址而已,如此说了就没有什么难度了.完整代码如下 写了一个小东西记录baidu和google对于站点的收录情况,现在可以查询了,其实也没什么难度,就是 ...
- 百度,google的地理编码
1.百度的地理编码:(不支持中国以外的其它城市) http://api.map.baidu.com/geocoder/v2/?ak=E974997f80db18330f8f5c61d084a677&a ...
- C#winform抓取百度,Google搜索关键词结果
基于网站seo,做了一采集百度和Google搜索关键字结果的采集.在这里与大家分享一下 先看先效果图 代码附加: 1 private void baidu_Click(object sender ...
- java动态代理——代理方法的假设和验证及Proxy源码分析五
前文地址 https://www.cnblogs.com/tera/p/13419025.html 本系列文章主要是博主在学习spring aop的过程中了解到其使用了java动态代理,本着究根问底的 ...
- 关于input框仿百度/google自动提示的方法
引入jquery-autocomplete文件 链接:https://pan.baidu.com/s/1hW0XBYH8ZgJgMSY1Ce6Pig 密码:tv5b $(function() { $( ...
- 简单的php基于curl的反向代理程序
起因: 经理:需要实现一个反向代理? 我: 简单,nginx分分钟配置好. 经理:嗯?没有nginx? 我: nodejs也行啊,网上有例子分分钟搞定. 经理:嗯?只有虚拟主机,只能上传php程序? ...
随机推荐
- 【转】自动化任务运行器 Grunt 迅速上手
原文转自:http://blog.jobbole.com/51586/ 这篇文章将带领你用Grunt来提速和优化网站开发的流程.首先我们会简短介绍Grunt的功能,然后我们直接上手,介绍如何用Grun ...
- Selenium - 实现网页元素拖拽
Drag and Drop, 使用鼠标实现元素拖拽的操作貌似很复杂, 在Selenium中, 借助OpenQA.Selenium.Interactions.Actions类库中提供的方法, 实现起来还 ...
- Word embedding blog
http://colah.github.io/posts/2014-07-NLP-RNNs-Representations/ https://www.quora.com/What-is-the-def ...
- Tomcat集群---Cluster节点配置(转)
<!-- Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点. className 表示tomcat集群时,之间相互传递信息使用那个类来实现信息之间的传递. cha ...
- 初识mySQL(关系型数据库)
一.数据库修改密码 ①先执行use mysql; ②再执行update mysql.user set password=PASSWORD(要修改的密码) where user='root' ; ...
- postgresql存储二进制大数据文件
如果想把整个文件或图片存储在数据表的一个字段内,该字段可以选择二进制类型,然后将文件按二进制存储起来,文本文件也可以存在text字段内. 示例如下: 二进制类型bytea的操作(在最大值内,有内存限制 ...
- Core Java Volume I — 3.4. Variables
3.4. VariablesIn Java, every variable has a type. You declare a variable by placing the type first, ...
- 快速用springmvc搭建web应用-超越昨天的自己系列(10)
Demo地址:http://pan.baidu.com/s/1sjttKWd 创建命令: mvn archetype:generate -DgroupId=com.witown.open.demo - ...
- Nginx 的线程池与性能剖析
http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt158 正如我们所知,NGINX采用了异步.事件驱动的方法来处理连接.这种处理方 ...
- 67. Add Binary
public class Solution { public String addBinary(String a, String b) { char[] aa=a.toCharArray(); cha ...