Nginx设置与应用

Nginx主要应用

静态网站

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

	 server{
		listen 80;#端口号
		location /app{    #/app是拦截访问路径   http://127.0.0.1:80/app/index.html
			root /opt/app;#静态文件路径   root是指ip+端口即 http://127.0.0.1:80/
			index index.html;
		}
	}

负载均衡(针对HTTP访问)

概述

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

负载均衡实现方式

  • 硬件负载均衡
    比如F5、深信服、Array等
    优点:有厂商专业的技术服务团队提供支持,性能稳定;
    缺点:费用昂贵,对于规模较小的网络应用成本太高
  • 软件负载均衡
    比如Nginx、LVS、HAProxy等
    优点:免费开源,成本低廉

Nginx负载均衡

  • Nginx如何实现负载均衡:
    通过配置Nginx的nginx.conf文件进行配置即可实现
    在这里插入图片描述
  • 配置步奏
  • 在http模块加上
    #负载均衡配置
    #weight=1 表示权重,用于后端服务器性能不均的情况,访问比率约等于权重之比,权重越大访问机会越多;
    #max_fails 允许请求失败的次数,超过次数后,转发到下一个服务器,当有max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查   
    #fail_timeout 指定时间内无响应则失败, 在以后的fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器
    #upstream是配置nginx与后端服务器负载均衡非常重要的一个模块,
    #并且它还能对后端的服务器的健康状态进行检查,若后端服务器中的一台发生故障,则前端的请求不会转发到该故障机器
    http{
        ....
       upstream www.myweb.com{
       	server 127.0.0.1:8080 weight=3 max_fails=2 fail_timeout=30s;  
       	server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
       }
       ...
    }
    
  • 在server加上
        ...
        server{
        ...
        #负载均衡配置location
       location /myweb{
         proxy_pass http://www.myweb.com;
       }
       #转发的地址要和upstream后面的字符串相等;
       ...
       }
       ...
    

Nginx常用的负载均衡策略

  • 轮询策略(默认)
    每个请求轮流分配到不同的后端服务器,如果后端服务器宕机了,将自动剔除

    	upstream www.myweb.com{
      	server 127.0.0.1:8080 ;  
      	server 127.0.0.1:8081 ;
      }
    
  • 权重策略
    表示权重,用于后端服务器性能不均的情况,每个请求按照一定比例分发到不同后端服务器,访问比率约等于权重之比,权重越大访问机会越多;

      upstream www.myweb.com{
      	server 127.0.0.1:8080 weight=3;  
      	server 127.0.0.1:8081 weight=1;
      }
    
  • ip_hash策略
    ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决 会话session丢失问题
    session丢失问题也可以用其它方法解决,如redis

       upstream www.myweb.com{
       	ip_hash;
       	server 127.0.0.1:8080 ;  
       	server 127.0.0.1:8081 ;
       }
    
  • 最少链接策略
    web请求绘本转发到链接数量最少的服务器上

   upstream www.myweb.com{
   	least_conn;
   	server 127.0.0.1:8080 ;  
   	server 127.0.0.1:8081 ;
   }

负载均衡其它几个配置

一般上线部署或某台服务器出现错误的时候使用,将其中一台服务器标注后,不影响其它的服务器的访问使用

  • 备份
    其它所有非backup机器dang的时候,菜请求backup服务器
       upstream www.myweb.com{
       	server 127.0.0.1:8080 ;  
       	server 127.0.0.1:8081 backup ;
       }
    
  • down机状态
    down表示当前的server是down状态,不参与负载均衡
      	upstream www.myweb.com{
      		server 127.0.0.1:8080 ;  
      		server 127.0.0.1:8081 down;
      	}
    

静态代理

  • 把所有静态资源的访问改为访问nginx,而不是tomcat,因为nginx更擅长静态资源的处理,性能更好,效率更高;
    所以在实际应用中,一般将静态资源如:图片、css、html、js等交给nginx处理,而不是由tomcat处理
    在这里插入图片描述
  • Nginx静态代理的实现
    通过在nginx.conf配置文件中添加静态资源的location如:如:
    • 1.基于文件后缀

          location ~.*\.(css|js|img|images|html|htm|gif|jpg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
        		root /opt/static;
        }
      

      将静态资源放入/opt/static目录下,然后用户访问时由nginx返回这些静态资源;
      放置静态资源的目录,要注意以下目录权限问题,如果权限不足,给目录赋予权限

      • ~表示正则匹配,表示后面的内容可以正则表达匹配;
      • 第一个点 .表示任意字符
      • *表示一个或多个字符;
      • .是转义符
      • | 表示或者
      • $表示结尾
  • 2.拦截访问路径
     	location ~ .*/(css|js|img|images|html|htm|gif|jpg|png){
     	  root /opt/static;
     }
    

动静分离

Nginx的负载均衡和静态代理结合一起,我们可以实现动静分离,这是十几应用中常见 的一种场景;
动态资源,如jsp由tomcat或其他web服务完成;
静态资源,如图片、css、js等由nginx服务器完成;
他们各司其职,专注于自己擅长的事情;
动静分离从分利用了它们各自的优势,从而达到更高校合理的架构;
在这里插入图片描述

  • 动静分离实例
  • 负载均衡Nginx配置:
       	 http{
       	 					...
     			upstream www.myweb.com{
     				server 127.0.0.1:8080 ;  
     				server 127.0.0.1:8081;
     			}
     	
     		upstream static.myweb.com{
     				server 127.0.0.1:8080 ;  
     				server 127.0.0.1:8081;
     			}
     		server{
     			location /myweb{
     			  procy_pass http://www.myweb.com;
     			}
     			location ~ .*/(css|js|img|images|html|htm|gif|jpg|png){
     			  procy_pass http://static.myweb.com;
     			}
                       .......
     		}
       	}
    
  • 静态代理Nginx配置:
    	location ~ .*/(css|js|img|images|html|htm|gif|jpg|png){
    	  root /opt/static;
    	}
    

虚拟主机

虚拟主机就是把一台物理服务器划分为多个“虚拟”的服务器,这样一台物理服务器就可以当作多个服务器使用,从而可以配置多个网站;
Nginx提供虚拟主机的功能,就是为了让我们不用安装多个Nginx,就可以运行多个网站;
Nginx配置文件下,一个server标签就是一个虚拟主机,想要设置多个虚拟主机,配置多个server节点即可(可以配置200多个);
配置虚拟主机的方式:

  • 基于域名的虚拟主机
    最常见的
	server{
		listen  80;
		server_name www.myweb.com; #此处是域名
		location /myweb {
			proxy_pass http://www.myweb.com;
		}
	}
	server{
		listen  80;
		server_name www.web.com;
		location /web {
			proxy_pass http://www.web.com;
		}
	}

需要修改一下本地host文件,位置:C:\Windows\System32\drivers\etc\hosts
在hosts文件配置:127.0.0.1 www.myweb.com
前面是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 /web {
			proxy_pass http://www.web.com;
		}
	}
  • 基于IP的虚拟主机(有多个网卡的时候)
	server{
		listen  80;
		server_name 127.0.0.1; #此处是Ip
		location /myweb {
			proxy_pass http://www.myweb.com;
		}
	}
	server{
		listen  80;
		server_name 127.0.0.2;
		location /web {
			proxy_pass http://www.web.com;
		}
	}
  • 示例:
    配置三个城市的服务器
    在这里插入图片描述
  • 配置3个Tomcat,每个Tomcat一个站点,项目部署在tomcat的ROOT目录下;

  • 配置3个Nginx虚拟主机

    • 第一种方式
      	server{
      		listen  80;
      		server_name bejing.myweb.com; #此处是域名
      		location /  {
      			proxy_pass http://bejing.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;
      		}
      	}
      
    • 第二种方式
  • 配置每个虚拟主机请求转发所对应的后端服务器

       	upstream beijing.myweb.com{
       		server 127.0.0.1:8080 ;  
       	}
       	upstream nanjing.myweb.com{
       		server 127.0.0.1:8081 ;  
       	}
       	upstream tianjin.myweb.com{
       		server 127.0.0.1:8082 ;  
       	}
      ```
    
  • 修改hosts文件,让ip(是部署项目的服务器)指定到一个三个站点的域名
    168.166.124 beijing.myweb.com
    168.166.124 nanjing.myweb.com
    168.166.124 tianjin.myweb.com
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值