Nginx反向代理和负载均衡

反向代理:reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。

Nginx 除了可以在企业提供高性能的web服务之外,另外还可以将 nginx 本身不具备的请求通过某种预定义的协议转发至其它服务器处理,不同的协议就是Nginx服务器与其他服务器进行通信的一种规范,主要在不同的场景使用以下模块实现不同的功能

ngx_http_proxy_module: #将客户端的请求以http协议转发至指定服务器进行处理 7层代理

ngx_http_upstream_module #用于定义为proxy_pass,fastcgi_pass,uwsgi_pass等指令引用的后端服务器分组 负载均衡

ngx_stream_proxy_module:#将客户端的请求以tcp协议转发至指定服务器处理 4层代理

ngx_http_fastcgi_module:#将客户端对php的请求以fastcgi协议转发至指定服务器助理

ngx_http_uwsgi_module: #将客户端对Python的请求以uwsgi协议转发至指定服务器处理

单台反向代理

代理服务器:172.16.88.8

真实服务器:172.16.88.9

客户机:172.16.88.7

客户端去访问代理服务器,跳到真实服务器

真实服务器:

root@node2 \~\]# yum install httpd -y \[root@node2 \~\]# systemctl start httpd //此处服务起不来记得检查防火墙、nginx是否关闭 \[root@node2 \~\]# cd /var/www/html/ \[root@node2 html\]# echo "7-2 7-2 7-2" \> index.html \[root@node2 html\]# ls index.html 客户机验证: \[root@node3 \~\]# curl 172.16.88.9 7-2 7-2 7-2 代理服务器: \[root@node1 conf.d\]# vim pc.conf server { listen 80; server_name [www.pc.com](http://www.pc.com "www.pc.com"); root /data/html; location / { proxy_pass [http://192.168.204.20](http://192.168.204.20 "http://192.168.204.20"); //因为是7层必须把协议写上,写7-2真实服务器的ip } } \[root@node1 conf.d\]# nginx -s reload 客户机验证: \[root@node3 \~\]# curl 172.16.88.8 7-2 7-2 7-2

动静分离

7-1 代理服务器:172.16.88.6

7-2 静态服务器:172.16.88.7

7-3 动态服务器:172.16.88.8

7-4 客户端:172.16.88.9

`7-1 代理服务器:`

bash 复制代码
​
[root@node1 ~]#  vim /apps/nginx/conf.d/pc.conf

server  {
listen 80;
server_name  www.pc.com;
root  /data/html;
   location /api {                       //动态资源
   proxy_pass http://172.16.88.7;
   }
   location ~* \.(jpg|png|bmp|gif)$ {    //静态资源
   proxy_pass http://172.16.88.8;
   }
}

[root@node1 ~]#  nginx -t
[root@node1 ~]#  nginx -s reload

​

7-2 静态服务器:

bash 复制代码
[root@node2 ~]#  systemctl stop firewalld
[root@node2 ~]#  setenforce 0
[root@node2 ~]#  systemctl stop nginx
[root@node2 ~]#  systemctl start httpd
[root@node2 ~]#  cd /var/www/html
[root@node2 html]#  rz       //准备图片

[root@node2 html]#  ls
a.jpg

7-3 动态服务器:

bash 复制代码
[root@node3 ~]#  systemctl stop firewalld
[root@node3 ~]#  setenforce 0
[root@node3 ~]#  systemctl stop nginx
[root@node3 ~]#  systemctl start httpd
[root@node3 ~]#  cd /var/www/html/
[root@node3 html]#  ls
[root@node3 html]#  echo "7-3 dongtaifuwuqi" > index.html    //准备页面
[root@node3 html]#  ls
index.html

`7-4 客户端验证:

bash 复制代码
[root@localhost ~]#  curl 172.16.88.7/api        //动态
7-3 dongtaifuwuqi
[root@localhost ~]#  curl 172.16.88.8/a.jpg   //静态

负载均衡

nginx 代理服务器的 调度算法:

  • 轮询:一人一次
  • 加权轮询:根据权重 分配次数
  • hash算法
    • ip hash :根据ip地址来决定客户端访问的服务器
    • url hash :根据客户端访问的url来决定访问的服务器
    • cookie hash :根据cookie的值来决定访问的服务器
    • 一致性 hash
  • 最小连接算法
  • fair算法:根据响应时间来进行分配

轮询:默认一人一次

7-1 :172.16.88.7

7-2 :172.16.88.8

7-3 :172.16.88.9

7-2:

bash 复制代码
[root@node2 ~]#  yum install httpd -y
[root@node2 ~]#  systemctl start httpd
[root@node2 ~]#  cd /var/www/html/
[root@node2 html]#  ls
[root@node2 html]#  echo  222222  > index.html   //生成页面

7-3:

bash 复制代码
[root@node3 ~]#  yum install httpd -y
[root@node3 ~]#  systemctl start httpd
[root@node3 ~]#  cd /var/www/html/
[root@node3 html]#  ls
[root@node3 html]#  echo  333333  > index.html   //生成页面

7-1:

bash 复制代码
​[root@node1 ~]#  vim /apps/nginx/conf/nginx.conf //编辑主配置文件
http {
    include       mime.types;
    upstream  web {           //自定义一组服务器,配置在http块内
    server 172.16.88.8;
    server 172.16.88.9;
    } 
    [root@node1 ~]#  nginx -s reload

[root@node1 ~]#  vim /apps/nginx/conf.d/pc.conf  //编辑子配置文件
server  {
listen 80;
server_name  www.pc.com;
root  /data/html;
  location / {
  proxy_pass http://web/;
  }
}
[root@node1 ~]#  nginx -s reload

​

客户端访问172.16.88.7进行验证

相关推荐
开开心心就好13 小时前
内存清理工具点击清理,自动间隔自启
linux·运维·服务器·安全·硬件架构·材料工程·1024程序员节
CTO Plus技术服务中13 小时前
大厂面试笔记和参考答案!浏览器自动化、自动化测试、自动化运维与开发、办公自动化
运维·笔记·面试
浅安的邂逅13 小时前
ubuntu 18.04及以上版本 ping命令报错:Name or service not known解决方法
linux·运维·ubuntu·ip设置
重生之绝世牛码13 小时前
Linux软件安装 —— JDK安装
java·大数据·linux·运维·jdk
晚风吹长发13 小时前
初步理解Linux中的进程间通信以及管道通信
linux·运维·服务器·c++·进程·通信
可爱又迷人的反派角色“yang”13 小时前
K8s(六)
linux·运维·云原生·容器·kubernetes
wheeldown14 小时前
【Linux】 Linux网络编程入门:Soket编程详解
linux·运维·网络
好学且牛逼的马1 天前
【工具配置|docker】
运维·docker·容器
文言一心1 天前
LINUX离线升级 Python 至 3.11.9 操作手册
linux·运维·python
北邮刘老师1 天前
A3C Network:智能体互联网的层次化视图
运维·服务器·网络