Ngnix之反向代理、负载均衡、动静分离

目录

[1. Ngnix](#1. Ngnix)

[1.1 Linux系统Ngnix下载安装](#1.1 Linux系统Ngnix下载安装)

[1.2 反向代理](#1.2 反向代理)

[正向代理(Forward Proxy):](#正向代理(Forward Proxy):)

[反向代理(Reverse Proxy):](#反向代理(Reverse Proxy):)

[1.3 负载均衡](#1.3 负载均衡)

[1.4 动静分离](#1.4 动静分离)


1. Ngnix

Nginx是一个高性能的开源Web服务器,它还可以用作反向代理、负载均衡器以及动静分离的工具。

1.1 Linux系统Ngnix下载安装

nginx: download

bash 复制代码
yum install -y wget

wget -c http://nginx.org/download/nginx-1.24.0.tar.gz

上传到服务器后:

bash 复制代码
#安装nginx所需要的依赖包
yum install -y gcc-c++	zlib zlib-devel	openssl openssl-devel pcre pcre-devel
bash 复制代码
#解压安装包
tar -zxvf nginx-1.24.0.tar.gz
bash 复制代码
#执行配置脚本 --prefix是指定安装目录
./configure --prefix=/usr/local/nginx
bash 复制代码
#对nginx编译和安装
make & make install

进入到/usr/local/nginx/sbin/中

bash 复制代码
#启动,
./nginx
#停止
./nginx -s stop
#重载
./nginx -s reload

1.2 反向代理

正向代理和反向代理是两种不同的代理服务器配置,它们在作用方向和目的上有所不同。以下是它们的主要区别:

正向代理(Forward Proxy):

  1. 作用方向: 正向代理是在客户端和目标服务器之间的代理服务器。客户端向代理服务器发送请求,然后代理服务器将请求转发给目标服务器,并将目标服务器的响应返回给客户端。

  2. 隐藏客户端身份: 正向代理可以隐藏客户端的真实身份,因为目标服务器只知道代理服务器,而不知道最终的客户端。这可以用于绕过访问限制或保护客户端隐私。

反向代理(Reverse Proxy):

  1. 作用方向: 反向代理位于目标服务器和客户端之间。客户端向反向代理发送请求,然后反向代理将请求转发给一个或多个目标服务器,并将目标服务器的响应返回给客户端。

  2. 隐藏服务器身份: 反向代理可以隐藏后端服务器的真实身份,因为客户端只知道代理服务器,而不知道哪个后端服务器响应了请求。这有助于提高安全性和负载均衡。

  3. 负载均衡: 反向代理常用于分发客户端请求到多个后端服务器,实现负载均衡,确保各个服务器都能得到合理的负载。

总的来说,正向代理代表客户端与服务器通信,而反向代理代表服务器与客户端通信。正向代理隐藏客户端身份,而反向代理隐藏服务器身份。

反向代理到Tomcat 8080端口nginx.conf如下:

bash 复制代码
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
	    proxy_pass http://localhost:8080;
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

1.3 负载均衡

负载均衡是通过将请求分发到多个服务器上,以实现更好的性能、可用性和可伸缩性。Nginx可以作为负载均衡器。

Nginx支持多种负载均衡算法,这些算法用于分发客户端请求到后端服务器,以实现负载均衡和提高系统的性能。以下是一些常见的负载均衡算法:

  1. 轮询算法(Round Robin): 每个新的请求按顺序分配给后端服务器列表中的下一个服务器。
  2. **IP哈希算法(IP Hash):**使用客户端的IP地址计算哈希值,然后将请求分发到后端服务器中的一个,使得相同IP的客户端每次请求都被分配到相同的服务器。
  3. 加权轮询算法(Weighted Round Robin): 给每个后端服务器分配一个权重,高权重的服务器获得更多的请求。
  4. 最小连接数算法(Least Connections): 将请求分发给当前连接数最少的后端服务器。
  5. **最短响应时间算法(Least Time):**将请求分发给响应时间最短的后端服务器。

下面是使用轮询算法在两个Tomcat上负载均衡:

bash 复制代码
docker pull tomcat:8.0
docker run -d -p 9090:8080 --name tomcat01 tomcat:8.0

nginx.conf如下:

bash 复制代码
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

     upstream myserver{
        server localhost:8080;
        server localhost:9090;	
        }   
    server {
        listen       80;
        server_name  localhost;

        location / {
	    proxy_pass http://myserver;
            root   html;
            index  index.html index.htm;
        }

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

}

1.4 动静分离

动静分离是指将静态内容(如图片、CSS、JavaScript文件)和动态内容(如PHP、Python等生成的页面)分开处理,以提高性能和减轻服务器负担。Nginx可以通过简单的配置实现动静分离。

相关推荐
龙龙博客1 小时前
LVS+Keepalived 实现高可用负载均衡
运维·负载均衡·lvs
职略1 小时前
负载均衡类型和算法解析
java·运维·分布式·算法·负载均衡
Iᴛ's ᴅᴇsᴛɪɴʏ²⁸.3 小时前
Nginx反向代理和负载均衡
运维·nginx·负载均衡
cui_win4 小时前
nginx-限制客户端并发数
运维·nginx·限流·limit_conn·限制并发
King's King5 小时前
自动化立体仓库出入库能力及堆垛机节拍
运维·自动化
一颗星的征途6 小时前
宝塔-Linux模板常用命令-centos7
linux·运维·服务器
yumuing blog6 小时前
【论文解读】AGENTLESS:揭开基于LLM的软件工程代理的神秘面纱,重塑软件工程自动化新基线
运维·自动化·软件工程·llama
Elastic 中国社区官方博客6 小时前
Elasticsearch:Painless scripting 语言(一)
大数据·运维·elasticsearch·搜索引擎·全文检索
hay_lee7 小时前
一台docker机器如何实现构建多平台镜像
运维·docker·云原生·容器
AllenLeungX7 小时前
Linux 安装 sftp
linux·运维·服务器