IT虾米网

Nginx再出发

mayingbao 2022年11月07日 编程语言 195 0

Nginx 再出发

本篇目录 
		1. 写在前面的话; 
		2. 负载均衡; 
		3. 静态资源访问; 
		4. 传递用户IP; 

1. 写在前面的话

在上一期的 Nginx入门-个人总结 中,我们说明了 Nginx 的基本配置是怎样的。比如我们可以为生产环境的项目设置一个代理的 IP:PORT 访问形式,这样的话,安全性会高很多;

2. 负载均衡

2.1 需求阐述

这一点是由新的需求而产生的。比如说,我们把项目部署了两份,这样可以让用户享受到更快、更好的访问体验;
但我们总不能给用户两个访问地址吧,所以此时就会很凸显代理的重要性。我们可以把所有的访问都发到 Nginx 这边;
由 Nginx 来决定这个请求应该由哪台生产环境服务器来进行响应。这个也正是 负载均衡 的概念;

2.2 解决方案

正如我们在入门篇介绍的那样,针对于请求的分发,我们可以把它理解为 负载均衡 的配置;

2.2.1 实战操作

语法:(其他部位和入门篇的是一致的)

http {
    
		upstream Servers {
    
			server IP:PORT weight=1; 
			server IP:PORT weight=1; 
		} 
				 
		server {
    
			location / {
    
				proxy_pass https://Servers; 
			} 
		} 
	} 

在其他位置代码不变的情况下,我们只需要做出这些改变。就可以实现 负载均衡 的配置了;
我们在入门篇的时候,有说过负载均衡的三种方式,分别是 轮询 加权轮询 IPHASH;

2.2.2 轮询与加权轮询

其实 轮询 和 加权轮询 是一个概念,我们可以把 加权轮询 理解为:在 轮询 的基础上改变了某些服务器的权重,好让它干更多的活;
因为在 Nginx 中,每一个服务器的默认权重是 1 ,所以上述中的 weight=1 我们可以直接省略掉;
但是如果想进行 加权轮询 ,只需要改变 weight 属性后的整数值就可以了;

2.2.3 IPHASH

针对于 IPHASH 的概念介绍我们就不再详述了,我们直接动手开搞;
如果想进行 IPHASH 的配置,你只需要做出这样的改变:

upstream Servers { 
			server IP:PORT; 
			server IP:PORT; 
			hash $request_uri; 
		} 

一旦配置了这样的代码,就可以使用 Nginx 提供的 IPHASH 功能;

3. 静态资源访问

3.1 需求阐述

在入门篇中,我们指定了错误码页面的寻找方式。比如:当出现 502 503 时,我们可以在 Nginx 的配置文件中监听对应的状态码,当出现以上状态码时, Nginx 就会跳转到指定的错误页面中去;
比如这样:

error_page 502 503 /50x.html; 
	location = /50x.html { 
		root html; 
} 

但是,吃力的一点是,如果你的的错误页面中有图片,你就必须要进行这样的一些配置。否则图片将无法正常显示;

location ~.*\.(png)?$ {
    
       root /usr/local/nginx/html; 
       expires 30d; 
       break; 
} 

它的含义是,指定了 .png 结尾的图片都要去 /usr/local/nginx/html 中寻找;
所以此处就会产生问题,如果项目的前端页面中也有 .png 结尾的图片呢?
最终的结果就是,前端页面中 .png 结尾的图片无法正常显示,因为在 /usr/local/nginx/html 中并没有放置这些图片;

3.2 解决方案

从前端包中取出静态资源文件夹,然后放到 /usr/local/nginx/html 去;
改变 error_page 中 root 指定的路径。我们当然也可以把 错误码 页面放到前端包中,然后利用 root 直接访问前端包中的资源即可;

4. 传递用户IP

4.1 需求阐述

一旦我们使用了反向代理功能,且没有进行特殊配置。那么此时服务器接收的请求 ip 地址将会是 Nginx 监听的 ip 地址;
也就是说,此时是 Nginx 代表用户在访问我们的 生产环境 ;
但是如果说,当某一个用户密码错误多次被暂时封掉且项目是以 ip 为判断依据的呢?
那么此时必然会造成所有用户都无法登录系统;

4.2 解决方案

解决的思路也很简单。当 Nginx 在接受用户请求时,不再使用监听的 ip 地址作为请求地址,而是直接使用用户的 ip 地址作为请求 ip 。一旦我们进行了相应的配置,问题就会迎刃而解了;

4.2.1 实战操作

接续之前的配置,我们只需要做出这样的变动;

	1. 重新编译 Nginx (因为 Nginx 传递用户 ip 需要使用其他的组件) 
		cd nginx-1.1-1 // 这是我们解压后的源码包 
		./configure --with-file-aio --with-http_realip_module --with-http_ssl_module 
		make 
		cd objs 
		cp -f nginx /usr/local/nginx/sbin/nginx // 替换原来安装的 Nginx 启动程序 
	2. 改变配置部分 
	server {
    
		listen       8080 ssl; 
		server_name  8.8.8.8; 
		set_real_ip_from 8.8.8.8; //将监听的 ip 排除在外 
 
		location / {
    
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; //传递用户的 ip 作为请求 ip  
			proxy_pass https://HikServer; 
		} 
 
	} 

本文参考链接:https://blog.csdn.net/Mjh20180341121/article/details/122010471
评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!