NGINX反向代理和负载均衡

作者: oldboy 分类: Nginx 发布时间: 2022-09-28 15:19

1、nginx简介

Nginx 是⼀个⾼性能的HTTP和反向代理web服务器,核⼼特点是占有内存少,并发能⼒强。
Nginx的应用场景:

●Http服务器(Web服务器)
1、性能⾮常⾼,⾮常注重效率,能够经受⾼负载的考验。
2、⽀持50000个并发连接数,不仅如此,CPU和内存的占⽤也⾮常的低,10000个没有活动的连接才占⽤2.5M的内存。
●反向代理服务器

2、实验规划

角色主机 ip服务
反向代理/负载均衡lb0161.160.221.186/192.168.122.60nginx
web服务器web01192.168.122.56nginx
web服务器web02192.168.122.65nginx
测试服务器test01连接公网的电脑win系统

3、反向代理配置

3.1、安装lb01、web03分别安装nginx(默认1.20版本)

yum install -y nginx

3.2、配置web服务器

systemctl start nginx.service 
systemctl enable nginx.service 
cat > /etc/nginx/conf.d/01.www.oldni.com.conf<<EOF
server {
  listen 80;
  server_name www.oldni.com;
  root /app/code/www;
  location / {
    index index.html;
  }
  access_log /var/log/nginx/www_access.log main;
  error_log /var/log/nginx/www_error.log notice;
}
EOF
mkdir -p /app/code/www
nginx -t
nginx -s reload
echo "122.60-nginx-proxy-122.56" >/app/code/www/index.html

3.3、配置lb服务器

systemctl start nginx.service  
systemctl enable nginx.service  
cat > /etc/nginx/conf.d/01.www.oldni.com.conf<<EOF 
server {
  listen 80;
  server_name www.oldni.com;

  location / {
    proxy_pass http://192.168.122.56:80;
  }
  access_log /var/log/nginx/www_access.log main;
  error_log /var/log/nginx/www_error.log notice;
}
EOF 
nginx -t 
nginx -s reload

4、测试机上测试

4.1、编辑hosts文件:

4.2、浏览器访问测试:

5、说明:

1、需要关闭防火墙,防止访问不成功

2、反向代理实则是代理访问,就是用户请求反向代理服务器后,反向代理服务器再向web服务器请求,并不是负载均衡的转发请求!!

3、web服务器上的访问日志都是反向代理的访问记录,真正的外网访问日志都要反向代理服务器上

6、需要解决的问题

6.1web服务器上的访问日志全是反向代理服务器的记录,如何能让web服务器就能获取真实用户的访问日志呢?

思路:

1、用户的请求到达反向代理服务器后,反向代理服务器把用户的ip地址保存下来,代理再向web端发请求的时候带上这个ip。

2、到达web端后,web取出请求中的ip并把ip写到日志里

流程:

用户请求访问时数据包里有个请求头,请求头包含:

客户端ip地址:公网IP
Host:www.oldni.com
Uer-Agent:浏览器信息

请求到达反向代理服务器后会添加:X-Forwarded-For信息(通过“proxy_set_header X-Forwarded-For $remote_addr;”实现)[$remote_addr是nginx里的一个变量]后再发给web服务器请求。

客户端ip地址:192.168.122.60(注意变成了lb的ip地址)
Host:www.oldni.com
Uer-Agent:浏览器信息
X-Forwarded-For:用户的IP(这才是重点)

web服务器在nginx日志模块修改(其实nginx日志就是向请求头里取数据):

log_format $http_x_forwarded_for;

操作:

1、修改反向代理服务器的网站配置文件并重启nginx

nginx -t
nginx -s reload

2、测试机访问测试并查看web服务器的访问日志

3、分析访问用户的ip

awk '{print $NF}' /var/log/nginx/www_access.log |sort|uniq -c|sort -nr

6.2、当web端启用了默认的站点(多虚拟机),我们再访问网站就会跳转到默认站点的页面,如何让代理端把正确的请求发给web端?

因为反向代理到的是web服务器的ip地址:“proxy_pass http://192.168.122.56:80;”所以访问的到默认页面。

在反向代理服务器上添加:”proxy_set_header Host $http_host;” 即可解决。

6.3、最终反向代理的最终配置:

7、负载均衡

在web02上配置成和web01一样。只是html文件内容变成

echo "122.60-nginx-proxy-122.65" >/app/code/www/index.html

lb上负载均衡的配置(upstream模块):

优化:因为每个站点配置文件都会这么写,我们可以使用include简化

修改成:

cat /etc/nginx/proxy_params

重启nginx再测试

测试机上测试

因为两台web服务器的权重一样,刷新一次,各访问一次。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

标签云