nginx架设http代理


squid透明代理已经向大家介绍过了,前两天在Libing大哥的博客逛的时候发现原来也可以用nginx来作透明代理(个人觉得叫正向代理更合理些),学习了下,又丰富了下,给大家分享一下。

server {
listen 81;
location / {
proxy_pass http://$http_host$request_uri;
}
}


步骤非常简单,只要新建一个主机,随便监听一个端口就可以,但是不能加主机名,因为我们是正向http代理,如果加了主机名,那岂不是就只能访问那几个网站了吗,呵呵。

$http_host – 主机名,即是访问该服务器的域名
$request_uri – 主机名后面跟的所有的东西

例如:http://www.kangzj.net/preminder/ 蓝色部分就是$http_host 红色部分就是$request_uri


然后怎样,不用我教了吧,打开IE选项设置代理即可利用代理上网啦!
当然,如果你想限制用户只能上某几个网站,那么就加上:

server_name www.163.com g.cn;

等等就可以啦,是不是很方便呢。
如果把代理端口设置成80就可以作为透明代理来使用了(严格来说并不是透明代理,反而更像反向代理):
但是需要我们修改无敌的hosts文件了,为什么?——因为我们要访问的网站的域名并不是指向我们的nginx服务器啊~OK改好,这样子,所有的网站就好像工作在那台nginx服务器似的,可以上啦!
说到这里同学们可能会有点乱了,正向代理、反向代理、透明代理……最后再跟大家明确下:

  1. 这三种方式的代理本质是相同的:都是代理服务器代理客户端到相应的互联网服务器取东西(浏览、下载等)。
  2. 代理使用的方式是不同的:正向代理是在IE或者其它浏览器设置代理选项,浏览器向代理服务器请求所有网页,由代理服务器代理取回网页;透明代理跟正向代理原理一样,只不过主机将代理服务器当做网关使用,并不需要设置代理选项;而反向代理是为一个(或几个)网站架设的代理,网站好像就在代理服务器端似的,多用来给网站加速用(跟我上面讲的所谓透明代理是一个意思)。

不会越说越乱吧,呵呵,其实不用在定义上这么纠缠,在有用的时候想到有方法可以实现就可以了。
Nginx真的很好用、很强大,你不妨试一下:-)

33 Replies to “nginx架设http代理”

  1. 为了让使用代理上IEEE, 做了如下的修改:
    使用了nginx做HTTP代理, 根据原始的nginx.conf修改了
    1. 端口为8081,
    2. 屏蔽server_name,
    3. 修改了 location /, 如下
    location / {
    root html;
    index index.html index.htm;
    #proxy_buffering off;
    proxy_pass http://www.ieee.org;
    }
    结果悲剧了…输入任何的网站都会被定向到ieee网站, 并且在里面输入搜索,什么都搜不到!(比如搜索lna, 在正常能用,代理就是搜不到)
    楼主能搞定不?

  2. 按照博主文章,配置Nginx做正向代理不能使用啊
    listen 80 或者 其他端口都不行啊
    博主能给个自己的配置文件吗……

  3. 我想做一个nginx与squid的协同工作的代理系统,nginx作为反向代理,squid作为正向代理,请问该如何做,nginx反向代理配置具体要如何配置?

  4. 额 就是浙大的代理 我试过了 火狐的一个插件可以做到 我改写脚本之后确实可用 就是仍不支持cookie

  5. 我知道一个apache服务器www.baidu.com.******.com就是说无论你在什么网址后面加上这个后缀都可以通过这个服务起来连接 ,ping http://www.baidu.com.******.com得到的ip也都是一样的就是说
    ping http://www.baidu.com.******.com
    ping http://www.google.com.******.com
    ping http://www.163.com.******.com的ip是一样的所以我就分析不了 这个代理的用法了 每次想打开网站都要加上后缀
    点击下一个连接后缀就没了 我又得加上,很麻烦
    想问是否有什么软件或者插件可以达到目的
    或者你要是知道如何使用这种apache服务器也请告诉我
    已经抓包分析 没看出什么 这个代理可以下东西 但就是需要加后缀 我在想如果用插件或软件配置一个将环境 让本机所有数据通过这个代理发出就好了
    谢谢
    直接输入那个ip的结果Fedora Core Test Page
    This page is used to test the proper operation of the Apache HTTP server after it has been installed. If you can read this page, it means that the Apache HTTP server installed at this site is working properly.

  6. 师兄犯错误鸟 – –
    必须在http字段内指定一个DNS服务器 即resolver代理才能正常工作。
    否则代理将不能正常解析主机名 – -。
    我发现我非常适合做大材小用这种事情……
    不管是squid还是nginx全部被我拿来做代理了……不过今天仔细看了一下,nginx的文件还真是很简洁啊……

    1. @我买糕的, 是吗,呵呵,我原先没有加,也能用哦,不知道怎么回事;是啊,用惯了nginx都不想用apache了;squid,nginx,apache我也都用过了,呵呵 😐

    1. @houkai,
      kangzj@xinqing:~$ curl –head http://w92.houkai.com
      HTTP/1.1 500 Internal Server Error
      Date: Thu, 17 Sep 2009 02:55:49 GMT
      Server: Google Frontend
      Content-Type: text/plain
      Cache-Control: private, x-gzip-ok=””
      Transfer-Encoding: chunked
      Connection: close
      怎么做的啊?

      1. @kangzj, 呵呵 刚才我那个网站能打开吗?我只是在phpnow(阿帕奇)里面设置了一下,你没就他的ip是北大教育网的吗?
        我没用python呀?

Leave a Reply to kangzjCancel reply