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