浅析Nginx实现反向代理、负载均衡、动静分离

1、首先来了解一下Nginx配置文件中的内容


主要包含三部分内容:
(1)全局块:配置服务器整体运行的配置指令,比如 worker_processes 1; 处理并发数的配置
(2)events  块 :影响 Nginx  服务器与用户的网络连接,比如 worker_connections 1024;  支持的最大连接数为 1024
(3)http  块:还包含两部分:http全局块(nginx服务器配置中的重要部分,代理,缓存,日志定义等绝大部分功能以及第三方配置都可以放在这个模块中。)、server块 (server块和虚拟主机有密切关系,每一个http块可以包含多个server块,在server块中配置虚拟主机需要监听的端口,IP或域名,每一个server块中可以包含多个location块,从严格意义上讲,location块只是server块的一个指令,它会接收到域名后面跟着的字符串,根据字符串来进行匹配,对特定请求进行处理,重定向,缓存,以及应答控制等功能。)

2.对Nginx进行的多数配置一般在server块进行

2.1.1通过对server块进行配置实现反向代理 实例1:

server {
	listen  91;  # 设置虚拟主机监听端口
	server_name www.cg.cn; # 设置虚拟主机域名(在第二个例子中对此有详细说明)
	location / {
	    proxy_pass http://localhost:8888;  # 设置反向代理的服务器地址IP+端口号(这里是Tomcat服务器)    
	}
}

效果:通过访问http://www.cg.cn:91访问到被反向代理的tomcat服务器:

2.1.2 在上述例子中有个点需要注意,就是www.cg.cn的域名不能直接使用,说到这里就需要对域名进行解析的过程进行简述:首先域名解析时会对本机的hosts目录(我的在C:\Windows\System32\drivers\etc目录下)进行解析,看里面是否做了ip与域名的映射,发现没有在浏览器输入的域名映射后,会去域名系统(DNS)进行查找匹配。因此在做上述实例1前需要将本机hosts文件做修改(添加如下映射):

127.0.0.1  www.cg.cn 

这样就能对www.cg.cn域名进行本地解析

2.2通过对server块进行配置实现反向代理 实例2:配置同一端口不同server_name

首先在hosts文件中追加内容:

127.0.0.1  www.cg.cn 
127.0.0.1  www.cg.org 

然后对server块进行配置:

server {
	listen  91;
	server_name www.cg.cn;
	location / {
		proxy_pass http://localhost:8888;      
	}
}
	
server {
	listen  91;
	server_name www.cg.org;
	location / {
		proxy_pass http://localhost:9999;  # 这里是另一台端口号为9999的tomcat      
	}
}

分别访问两个域名效果如下:

注意点:这里的server_name有个匹配规则:

server_name与host匹配优先级如下:

(1)完全匹配

(2)通配符在前的,如*.test.com

(3)在后的,如www.test.*  

(4)正则匹配,如~^\.www\.test\

如果都不匹配

(1)优先选择listen配置项后有default或default_server的

(2)找到匹配listen端口的第一个server块

3.负载均衡配置:

3.1Nginx负载均衡选项upstream配置(主要有三种选项:1.使用哈希算法对访问的ip地址进行哈希,同时也是解决session共享问题的一种解决方案;2.使用权重,权重大的访问比例也会增大;3.不配置权重就默认采用轮询的方式进行请求分发。):

upstream serverpool{      # 通过此模块实现请求分发,达到负载均衡
	# ip_hash;        		  # 哈希算法
	# server 10.10.27.9:8888 weight=3;   # 声明权重
	# server 10.10.27.8:9999 weight=1;
	server localhost:8888;   # 不声明权重默认轮询方式进行负载均衡
	server localhost:9999;
}

3.2配置好upstream块后,还没完,还需要配置server块启用upstream配置:

server {
	   listen       99;
	   server_name  localhost;   # 这里就用localhost访问nginx
	
	   location / {
	       proxy_pass http://serverpool/;  # 启用upstream配置(指定代理连接池)
               proxy_set_header Host $host;    #转发请求头信息
               proxy_set_header X-Forward-For $remote_addr;  #转发请求IP地址
	   }
}

效果图:我上面用的是轮询交替分发请求所以,访问的tomcat也是交替出现的:

4.动静分离配置(动静分离实现了静态资源文件(如js,css,html)和动态文件(如jsp和servlet)分别处理效果):

为了演示效果,先在C盘新建文件夹nginxstaticsource,再在nginxstaticsource新建html和img文件夹分别存放网页和图片:

具体配置如下:

server {
	listen  8091;             # 随便写了端口号,访问nginx就使用该端口号好了
	server_name 127.0.0.1;
	location  /img/ {
		root   c:/nginxstaticsource;  # 设置静态资源的文件路径,注意点:这里的路径会和/img/做路径拼接后为:c:/nginxstaticsource/img/
		autoindex on;   # Nginx默认是不允许列出整个目录的,如需此功能就设置这个。
	}
	location  /html/ {
		root   c:/nginxstaticsource;  # 路径拼接后最终访问的是 c:/nginxstaticsource/html/
		index index.html index.htm;
	}
}

最终效果图:

访问img:

访问html:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值