使用Nginx服务器实现反向代理、负载均衡以及虚拟主机

相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额。那究竟它有什么作用呢?可能很多人未必了解。

 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了。摘一段百度百科上的描述:

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。 

 这里讲得很直白。反向代理方式实际上就是一台负责转发的代理服务器,貌似充当了真正服务器的功能,但实际上并不是,代理服务器只是充当了转发的作用,并且从真正的服务器那里取得返回的数据。这样说,其实nginx 完成的就是这样的工作。我们让nginx监听一个端口,譬如80端口,但实际上我们转发给在8080端口的tomcat,由它来处理真正的请求,当请求完成后,tomcat返回,但数据此时没直接返回,而是直接给nginx,由nginx进行返回,这里,我们会以为是nginx进行了处理,但实际上进行处理的是tomcat。

 说到上面的方式,也许很多人又会想起来,这样可以把静态文件交由nginx来进行处理。对,很多用到nginx的地方都是作为静态伺服器,这样可以方便缓存那些静态文件,比如CSS,JS,html,htm等文件。

好了,让我们开始具体看看Nginx服务器的反向代理、负载均衡以及虚拟主机怎么配置使用。
 

一、配置虚拟主机


    就是在一台服务器启动多个网站(看起来好像有多台主机)。
    如何区分不同的网站:
    1、域名不同
    前提:在Windows系统上,配置hosts文件192.168.25.148 www.taobao.com
                                                                       192.168.25.148 www.baidu.com
    目的是不走dns服务器解析,直接将对应的域名解析成我们的Nginx服务器的ip地址。(这里的Nginx服务器是搭建在虚拟机的Linux系统上的)
    

server {
        listen       80;			//访问该服务器的时候,域名为www.taobao.com走html-taotao
        server_name  www.taobao.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
			//这里的配置表示访问根目录为html-taobao下的index.html文件
            root   html-taobao;
            index  index.html index.htm;
			
			//这里的配置表示:访问该服务器,实现的功能是反向代理(这两种配置一般不能同时存在)
			proxy_pass http://localhost:18081; 
        }
    }
    server {						//访问该服务器的时候,域名为www.baidu.com走html-baidu
        listen       80;
        server_name  www.baidu.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

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


    2、端口不同
        前提必须在hosts文件配置如下信息:192.168.25.148 http://localhost
      

server {			//访问80端口的时候,Nginx服务器将请求转发到 html
			listen       80;
			server_name  localhost;

			#charset koi8-r;

			#access_log  logs/host.access.log  main;

			location / {
				root   html;
				index  index.html index.htm;
			}
		}
		server {			//访问81端口的时候,Nginx服务器将请求转发到 html-81
			listen       81;
			server_name  localhost;

			#charset koi8-r;

			#access_log  logs/host.access.log  main;

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

二、使用Nginx实现反向代理


    在hosts文件中添加域名和ip的映射关系
    192.168.25.148 www.sina.com.cn
    192.168.25.148 www.sohu.com    

    两(多)个域名指向同一台nginx服务器,用户访问不同的域名显示不同的网页内容。
    两(多)个域名是www.sian.com.cn和www.sohu.com,这两个域名分别对应一个Tomcat服务器(因为一台电脑跑两个服务器,所以端口必须不同)
    

upstream tomcat1 {
	server 192.168.25.148:8080;
    }
    server {
        listen       80;
        server_name  www.sina.com.cn;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://tomcat1;	//接收到的请求如果是www.sina.com.cn,则将请求转发到http://192.168.25.148:8080这台服务器上。
            index  index.html index.htm;
        }
    }
	
	
    upstream tomcat2 {
	server 192.168.25.148:8081;
    }
    server {
        listen       80;
        server_name  www.sohu.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://tomcat2;	//接收到的请求如果是www.sohu.com,则将请求转发到http://192.168.25.148:8081这台服务器上。
            index  index.html index.htm;
        }
    }


    这样就可以实现将不同的请求转发到对应的服务器上。
    

三、使用Nginx实现负载均衡


    如果一个服务由多条服务器提供,需要把负载分配到不同的服务器处理,需要负载均衡。

    upstream tomcat2 {
        server 192.168.25.148:8081;
        server 192.168.25.148:8082;
    }


    可以根据服务器的实际情况调整服务器权重。权重越高分配的请求越多,权重越低,请求越少。默认是都是1

    upstream tomcat2 {
        server 192.168.25.148:8081;
        server 192.168.25.148:8082 weight=2;
    }

四、Nginx的高可用


    nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,
    如果nginx服务器宕机后端web服务将无法提供服务,影响严重。
    为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。
    主服务器和备份机上都运行高可用(High Availability)监控程序,
    通过传送诸如“I am alive”这样的信息来监控对方的运行状况。
    当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;
    当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,
    这样的主服务器就开始再次提供负载均衡服务。

猜你喜欢

转载自blog.csdn.net/qq_41300571/article/details/83270649