Nginx主要应用

静态web服务器
负载均衡
静态代理
虚拟主机

静态web服务器:

  • Nginx是一个HTTP的web服务器,可以将服务器上的静态文件(如HTML、图片等)通过HTTP协议返回给浏览器客户端;

       server {  
             listen 80; #端口号  
             location /ace {  
                 root /opt/www/; #静态文件路径
             }  
         }
    

负载均衡概述:

  • 在网站创立初期,我们一般都使用单台机器对外提供集中式服务;
  • 但是随着业务量的增大,我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务;但是,我们网站对外提供的访问入口通常只有一个,比如 www.web.com
  • 那么当用户在浏览器输入www.web.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情;
  • 负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀;

负载均衡实现方式

硬件负载均衡

  • 比如 F5、深信服、Array 等;优点是有厂商专业的技术服务团队提供支持,性能稳定;缺点是费用昂贵,对于规模较小的网络应用成本太高;

软件负载均衡

  • 比如 Nginx、LVS、HAProxy 等;优点是免费开源,成本低廉;

Nginx负载均衡

  • Nginx如何实现负载均衡:(通过在Nginx的nginx.conf文件进行配置即可实现)Nginx主要应用

  • 配置如下:(配置2步即可)

  • 1、在http模块加上:(举例)

     upstream www.myweb.com { 
          	server  127.0.0.1:9100 weight=3; 
           	server  127.0.0.1:9200 weight=1;  
     } 
    

其中weight=1表示权重,用于后端服务器性能不均的情况,访问比率约等于权重之比,权重越大访问机会越多;
upstream是配置nginx与后端服务器负载均衡非常重要的一个模块,并且它还能对后端的服务器的健康状态进行检查,若后端服务器中的一台发生故障,则前端的请求不会转发到该故障的机器;

2、在server模块里添加:(举例)

	location /myweb {
		proxy_pass http://www.myweb.com;
	}

-其中 www.myweb.com 字符串要和 upstream 后面的字符串相等;

Nginx常用负载均衡策略:

1、轮询(默认)
每个请求轮流分配到不同的后端服务器,如果后端服务器down掉,将自动剔除;

	upstream backserver { 
	    server 127.0.0.1:8080; 
	    server 127.0.0.1:9090; 
	} 

2、权重

  • 每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况;

     	upstream backserver { 
     	    server 192.168.0.14 weight=5; 
     	    server 192.168.0.15 weight=2; 
     	} 
    

3、ip_hash

  • ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题;

     upstream backserver { 
         ip_hash; 
         server 127.0.0.1:8080; 
         server 127.0.0.1:9090; 
     }
    

4、最少连接

web请求会被转发到连接数最少的服务器上;

	upstream backserver { 
	    least_conn;
	    server 127.0.0.1:8080; 
	    server 127.0.0.1:9090; 
	} 

负载均衡其他几个配置

	upstream backserver { 
	    server 127.0.0.1:9100;
	    server 127.0.0.1:9200 backup; (其它所有的非backup机器down的时候,才请求backup机器) 
	} 
	-------------------------------------------------------------------------------------
	upstream backserver { 
	    server 127.0.0.1:9100;
	    server 127.0.0.1:9200 down; (down表示当前的server是down状态,不参与负载均衡) 
	} 

静态代理

  • 把所有静态资源的访问改为访问nginx,而不是访问tomcat,因为nginx更擅长于静态资源的处理,性能更好,效率更高;

  • 所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理;

    Nginx主要应用
    Nginx静态代理如何实现?(通过在Nginx的nginx.conf文件进行配置即可实现)
    方式一:通过在nginx.conf配置文件中添加静态资源的location,比如:

     #当访问静态资源,则从linux服务器/opt/static目录下获取(举例)
     location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
             root /opt/static;
     }
    

放置静态资源的目录,要注意一下目录权限问题,如果权限不足,给目录赋予权限;

其中:
表示正则匹配,也就是说后面的内容可以是正则表达式匹配;
第一个点 . 表示任意字符;第一个点 . 表示任意字符;
  • 表示一个或多个字符;
  • . 是转移字符,是后面这个点的转移字符;
  • | 表示或者
  • $ 表示结尾
  • 整个配置表示以 .后面括号里面的这些后缀结尾的文件都由nginx处理;

方式二:
通过在nginx.conf配置文件中配置静态资源所在目录实现,比如:

	location ~ .*/(css|js|img|images|image) {
	      root   /opt/static;
	}

我们将静态资源放入 /opt/static 目录下,然后用户访问时由nginx返回这些静态资源;

动静分离:

  • Nginx的负载均衡 和 静态代理 结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景;

  • 动态资源,如jsp由tomcat或其他web服务器完成; 静态资源,如图片、css、js等由nginx服务器完成;

  • 它们各司其职,专注于做自己擅长的事情; 动静分离充分利用了它们各自的优势,从而达到更高效合理的架构;

Nginx主要应用

动静分离示例
负载均衡Nginx配置:

	upstream www.p2p.com { 
	    server  127.0.0.1:9100 weight=5; 
	    server  127.0.0.1:9200 weight=2;  
	}
	    
	upstream static.p2p.com { 
	    server  127.0.0.1:81 weight=1; 
	    server  127.0.0.1:82 weight=1;  
	}

location /p2p {
    proxy_pass http://www.p2p.com;
}

location ~ .*/(css|js|img|images) {
    proxy_pass http://static.p2p.com;
}

静态代理Nginx配置:

location ~ .*/(css|js|img|images) {
    root /opt/static;
}

虚拟主机

  • 虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站;

  • Nginx提供虚拟主机的功能,就是为了让我们不需要安装多个Nginx,就可以运行多个网站;

  • Nginx下,一个server标签就是一个虚拟主机;

  • nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要设置多个虚拟主机,配置多个server节点即可;

配置虚拟主机通过有下面两种方式:
基于域名的虚拟主机 : 基于域名的虚拟主机是最常见的一种虚拟主机。

server {
        listen       80;
        server_name  www.myweb.com;
        location /myweb {
           proxy_pass http://www.myweb.com;
        }
}

server {
        listen       80;
        server_name  www.p2p.com;
        location /p2p {
           proxy_pass http://www.p2p.com;
        }
}

需要修改一下本地的hosts文件,文件位置:C:\Windows\System32\drivers\etc\hosts

在hosts文件配置:192.168.208.128 www.myweb.com

在hosts文件配置:192.168.208.128 www.p2p.com

前面是Linux的IP,后面是你自定义的域名

基于端口的虚拟主机

  • 基于端口的虚拟主机配置,使用端口来区分;

  • 浏览器使用 同一个域名+端口 或 同一个ip地址+端口访问

     server {
         listen 8080;
         server_name www.myweb.com;
         location /myweb {
                proxy_pass http://www.myweb.com;
         }
     }
    

	server {
	    listen 9090;
	    server_name www.myweb.com;
	    location /p2p {
	           proxy_pass http://www.p2p.com;
	    }
	}

虚拟主机示例

城市站点网站(举例说明,我们配置三个城市站点)
Nginx主要应用

1、配置3个Tomcat,每个tomcat一个站点,项目部署在tomcat的ROOT目录下;
2、配置3个Nginx虚拟主机:
方式一:在nginx.conf文件添加三个server节点,用于配置三个虚拟主机

server {
        listen       80;
        server_name  beijing.myweb.com;
        location / {
            proxy_pass http://beijing.myweb.com;
        }
}

server {
        listen       80;
        server_name  nanjing.myweb.com;
        location / {
            proxy_pass http://nanjing.myweb.com;
        }
}

	server {
	        listen       80;
	        server_name  tianjin.myweb.com;
	        location / {
	            proxy_pass http://tianjin.myweb.com;
	        }
	}

方式二:

  • 通过include的方式引入虚拟主机配置
  • include /usr/local/nginx/vhost/vhost.conf;
  • 将虚拟目录的配置文件加入到”http {}”部分的末尾,与其他server并列;

3、配置每个虚拟主机请求转发所对应的后端服务器

upstream beijing.myweb.com { 
    server  127.0.0.1:9910;
}

upstream beijing.myweb.com { 
    server  127.0.0.1:9910;
}

upstream tianjin.myweb.com { 
    server  127.0.0.1:9930;
}

4、修改hosts文件,让Linux的ip指向到一个三个站点的域名

192.168.230.128 beijing.myweb.com
192.168.230.128 nanjing.myweb.com
192.168.230.128 tianjin.myweb.com