ICT教育

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1690|回复: 5

使用nginx快速搭建反向代理服务器

[复制链接]
发表于 2010-12-8 10:05:04 | 显示全部楼层 |阅读模式
本帖最后由 ltzy 于 2010-12-8 12:49 编辑

由于学校出于经费考虑,打算终止教育网的接入,而电信的5个IP显然不够应对未来的需求(江苏12.5规划,教育领域居然要建34个信息系统),于是就考虑建立反向代理,充分利用IP地址。

什么是反向代理呢?其实,反向代理也就是通常所说的WEB服务器加速,它是一种通过在繁忙的WEB服务器和Internet之间增加一个高速的WEB缓冲服务器(即:WEB反向代理服务器)来降低实际的WEB服务器的负载。

Web服务器加速(反向代理)是针对Web服务器提供加速功能的。它作为代理Cache,但并不针对浏览器用户,而针对一台或多台特定Web服务器(这也是反向代理名称的由来)。实施反向代理(如上图所示),只要将Reverse Proxy Cache设备放置在一台或多台Web服务器前端即可。当互联网用户访问某个WEB服务器时,通过DNS服务器解析后的IP地址是Reverse Proxy Server的IP地址,而非原始Web服务器的IP地址,这时Reverse Proxy Server设备充当Web服务器,浏览器可以与它连接,无需再直接与Web服务器相连。因此,大量Web服务工作量被卸载到反向代理服务上。不但能够防止外部网主机直接和web服务器直接通信带来的安全隐患,而且能够很大程度上减轻web服务器的负担,提高访问速度


nginx的功能很多,web服务器、反向代理服务器、缓存服务器、负载均衡等等,具体的大家可以看张宴的那本《实战Nginx:取代Apache的高性能Web服务器》

这里只是为了解决公网IP不够用的问题。

1. 操作系统为Debian 5.0 ,标准安装

2. aptitude install gcc gcc+ autoconf automake zlib1g zlib1g-dbg zlib1g-dev libpcre3 libpcre3-dev libcurl4-openssl-dev openssl

3. cd /tmp

4. wget http://nginx.org/download/nginx-0.8.53.tar.gz

5. tar zxvf nginx-0.8.53.tar.gz

6. cd nginx-0.8.53

7. ./configure && make && make install

8. nano  /usr/local/nginx/conf/nginx.conf

user  nobody;
worker_processes  1;                              #具体数值视负载而定

error_log  logs/error.log crit;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        /usr/local/nginx/nginx.pid;


events {
    worker_connections  1024;             #具体数值视负载而定
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

       # error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
       # error_page   500 502 503 504  /50x.html;
       # location = /50x.html {
       #     root   html;
       # }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

server
        {
        listen          80;                                         #监听80端口
        server_name     test.domain.com;            #需要反向代理的域名

        location / {
                proxy_pass              http://192.168.0.1;                          #内网的web服务器地址
                proxy_redirect          off;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                }
        }


#如果有多个域名,复制以上server{... ...}即可

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;

    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    #    ssl_prefer_server_ciphers   on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

9. ./nginx -t -c /usr/local/nginx/conf/nginx.conf                                            #检查配置文件的语法错误

10. ./nginx -c /usr/local/nginx/conf/nginx.conf                                             #启动nginx

11. netstat -natp                                                                                         #查看是否开始监听80端口

12. nano /etc/rc.local
/ usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf                     #在exit 0 前面添加这一句

13. ifconfig                                                                                   #查看nginx服务器IP 192.168.0.254

14. 登陆路由器,添加端口映射1.1.1.1:80-->192.168.0.254:80

15. 所有域名的解析指向该公网IP1.1.1.1
发表于 2010-12-8 21:41:14 | 显示全部楼层
反向代理如何解决ip不够的问题?如果你能用直白的话简单解释,我就不google了……
 楼主| 发表于 2010-12-8 22:24:56 | 显示全部楼层
乔木 发表于 2010-12-8 21:41
反向代理如何解决ip不够的问题?如果你能用直白的话简单解释,我就不google了……



公网只有一个IP,但有多个域名对应到内网不同IP的主机上,且同时需要使用80端口。用反向代理,对所有域名的请求先发到内网的反向代理服务器上,由他再转发到对应的web服务器上。
发表于 2010-12-9 09:04:31 | 显示全部楼层
回复 乔木 的帖子

反向代理主要是:proxy_pass
外网是公用IP,但是可以proxy_pass到内网上去。
写多个server就是基于域名的虚拟主机,但是主机可以放到内网的其他服务器上。
发表于 2011-3-8 13:42:49 | 显示全部楼层
ltzy 发表于 2010-12-8 22:24
公网只有一个IP,但有多个域名对应到内网不同IP的主机上,且同时需要使用80端口。用反向代理,对所有 ...

有点像地址映射,不过“公网只有一个IP,但有多个域名对应到内网不同IP的主机上,且同时需要使用80端口”可以用win2003的主机头来实现啊,不过反向代理服务器可以把服务做在不同服务器上而已。
 楼主| 发表于 2011-3-9 12:55:39 | 显示全部楼层
贾老师 发表于 2011-3-8 13:42
有点像地址映射,不过“公网只有一个IP,但有多个域名对应到内网不同IP的主机上,且同时需要使用80端口” ...

要的就是内网不同的服务器。我有基于linux的服务器和基于windows的服务器,还要实现热备和负载均衡的时候,就不是主机头能解决的了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|ICT教育—中小学信息技术教育网 ( 苏ICP备10008215号

GMT+8, 2018-1-16 21:44

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表