Nginx使用之反向代理、负载均衡、动静分离教程

Linux命令

Nginx使用之反向代理、负载均衡、动静分离教程

2024-11-11 00:29


Nginx 是一款高性能的开源 Web 服务器,同时也是功能强大的反向代理服务器。凭借其卓越的性能、稳定性和丰富的功能,Nginx 被广泛应用于反向代理、负载均衡和动静分离等场景中。本文将详细介绍如何使用 Nginx 实现反向代理、负载均衡和动静分离,帮助您搭建高效、可靠的 Web 服务。?

                                            




Nginx 是一款高性能的开源 Web 服务器,同时也是功能强大的反向代理服务器。凭借其卓越的性能、稳定性和丰富的功能,Nginx 被广泛应用于反向代理、负载均衡和动静分离等场景中。本文将详细介绍如何使用 Nginx 实现反向代理、负载均衡和动静分离,帮助您搭建高效、可靠的 Web 服务。?

一、安装和启动 Nginx

1. 在 Linux 上安装 Nginx

通过包管理器安装(以 Ubuntu 为例):

sudo apt update
sudo apt install nginx

启动 Nginx 服务:

sudo systemctl start nginx

设置开机自启动:

sudo systemctl enable nginx

2. 在 Windows 上安装 Nginx

虽然 Nginx 主要用于类 Unix 系统,但在 Windows 上也可以运行。建议使用第三方编译版本:

  1. 从 Nginx 官方网站下载适用于 Windows 的压缩包。
  2. 解压缩到指定目录,例如 C:\nginx
  3. 运行 nginx.exe 启动服务器。

停止 Nginx:

在命令行中按 Ctrl + C,或者使用任务管理器结束进程。

二、配置反向代理

反向代理是指 Nginx 接受客户端请求后,将其转发到后端服务器,并将后端服务器的响应返回给客户端。以下是配置反向代理的步骤:

1. 编辑 Nginx 配置文件

配置文件通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default。以编辑默认站点配置为例:

sudo nano /etc/nginx/sites-available/default

2. 添加反向代理配置

在 server 块中添加如下配置:

server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

配置说明:

  • listen 80;:监听 80 端口。
  • server_name your_domain.com;:指定域名。
  • location /:匹配所有请求路径。
  • proxy_pass http://backend_server;:将请求转发到后端服务器。
  • proxy_set_header:设置请求头,确保后端服务器获取正确的客户端信息。

3. 测试和重启 Nginx

sudo nginx -t
sudo systemctl restart nginx

✅ 成功配置反向代理后,客户端请求将通过 Nginx 转发到指定的后端服务器。

三、配置负载均衡

负载均衡通过将客户端请求分发到多个后端服务器,平衡服务器负载,提高系统的可靠性和可扩展性。Nginx 支持多种负载均衡策略,如轮询、IP 哈希和最少连接等。

1. 定义后端服务器组

在 http 块中添加 upstream 配置:

http {
    upstream backend_servers {
        server backend1_server:port;
        server backend2_server:port;
        # 可添加更多后端服务器
    }

    server {
        listen 80;
        server_name your_domain.com;

        location / {
            proxy_pass http://backend_servers;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

2. 选择负载均衡策略

默认使用轮询(Round Robin)策略,Nginx 还支持其他策略:

  • 轮询(Round Robin): 默认策略,按顺序分配请求。
  • 最少连接(Least Connections): 将请求分配给连接数最少的服务器。
  • IP 哈希(IP Hash): 根据客户端 IP 地址分配服务器,保持会话一致性。

示例:使用最少连接策略

upstream backend_servers {
    least_conn;
    server backend1_server:port;
    server backend2_server:port;
}

3. 测试和重启 Nginx

sudo nginx -t
sudo systemctl restart nginx

负载均衡配置完成后,Nginx 会根据指定策略将请求分发到后端服务器,提升系统的处理能力和稳定性。

四、实现动静分离

动静分离指将动态请求(如 PHP、Python 脚本)和静态资源(如 HTML、CSS、JavaScript 文件)分别处理,以优化资源利用和提高响应速度。

1. 配置静态资源处理

在 server 块中添加静态资源路径配置:

server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location ~* \.(html|css|js|png|jpg|jpeg|gif|ico)$ {
        root /path/to/static/files;
        expires 30d;
        access_log off;
    }
}

配置说明:

  • location ~* \.(html|css|js|png|jpg|jpeg|gif|ico)$:匹配静态资源文件扩展名。
  • root /path/to/static/files;:指定静态文件的存放目录。
  • expires 30d;:设置静态资源的缓存时间为 30 天。
  • access_log off;:关闭静态资源的访问日志,提高性能。

2. 配置动态请求处理

动态请求通常需要通过后端服务器处理,例如 PHP-FPM。以下是 PHP 动态请求的配置示例:

server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location ~ \.php$ {
        root /path/to/php/files;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~* \.(html|css|js|png|jpg|jpeg|gif|ico)$ {
        root /path/to/static/files;
        expires 30d;
        access_log off;
    }
}
&a                                            

label :
  • Nginx