Nginx反向代理实现与配置

目录

Nginx 反向代理

Nginx 可以充当反向代理服务器,将客户端请求转发到后端的多个服务器上,并将响应返回给客户端。

Nginx作为反向代理服务器的工作原理如下:

  1. 客户端发送请求:当客户端(例如浏览器)需要访问某个Web服务时,它会向Nginx服务器发送HTTP请求。这个请求包括了要访问的URL和其他相关信息。
  2. Nginx接收请求:Nginx服务器接收到客户端发送的请求后,会解析请求中的URL和其他信息。
  3. 转发请求:Nginx根据配置规则,将接收到的客户端请求转发给后端的Web服务器(或称为应用服务器)。这个过程可能是基于轮询、加权轮询、IP hash等负载均衡策略来选择的。
  4. 后端服务器处理请求:后端的Web服务器接收到Nginx转发过来的请求后,会处理这个请求,并生成相应的响应。
  5. 返回响应:后端服务器将处理后的响应返回给Nginx服务器。Nginx服务器可能会对这个响应进行一些处理,例如缓存、压缩等。
  6. Nginx转发响应:Nginx将后端服务器返回的响应转发给客户端。这样,客户端就得到了它需要的数据。

在整个过程中,Nginx作为反向代理服务器,起到了一个中间人的角色。它接收客户端的请求,转发给后端服务器,再将后端服务器的响应返回给客户端。这样,客户端并不知道它实际上访问的是哪个后端服务器,从而实现了隐藏后端服务器、负载均衡、缓存加速等功能。同时,由于Nginx的高性能和稳定性,它可以处理大量的并发请求,提高整个Web服务的性能和可靠性。

Nginx反向代理配置

Nginx的配置文件主要有两个,/etc/nginx/nginx.conf和/etc/nginx/conf.d/default.conf

/etc/nginx/nginx.conf:这是Nginx的主配置文件,包含了全局的配置信息。在这个文件中,你可以配置Nginx的全局设置,如进程数、用户、日志格式等。此文件通常用于配置Nginx的全局行为,例如设置worker_processes参数、加载模块等。

/etc/nginx/conf.d/default.conf:这是一个子配置文件,位于/etc/nginx/conf.d/目录下。在Nginx的主配置文件中,通常会通过include指令来引入该目录下的所有子配置文件。default.conf文件是一个示例配置文件,用于演示和说明Nginx的基本用法。

在/etc/nginx/nginx.conf配置文件,通过include指令引入了conf.d目录下的所有配置文件,一般我们通过nginx.conf配置文件进行配置即可

Nginx 可以通过配置 Nginx 的 locationproxy_pass 指令来实现反向代理,location 用于指定处理哪些URL请求,proxy_pass 用于指定反向代理的服务器地址

以下是一个示例配置,用于将请求反向代理到本地的 8080 端口:

powershell 复制代码
http {
    server {
        listen 80;
        server_name localhost; # 你的域名
        location / {
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

这个配置文件的含义是:当用户访问你的服务器(假设你的服务器 IP 是 your_server_ip)的 80 端口时,Nginx 会将请求转发到本地的 8080 端口。

listen 80:表示 Nginx 监听 80 端口。

location /:表示匹配所有 URI 的 location 块。就是说,这个 location 块会处理所有发送到 Nginx 服务器的请求,不管 URI 是什么。

location 是 Nginx 配置中的一个关键指令,用于根据请求的 URI 来进行相应的处理请求。

powershell 复制代码
以下是一些常见的 location 使用示例:
1. location /: 匹配所有请求,包括根路径(例如 http://yourserver.com/)。
2. location /api/: 匹配以 /api/ 开头的所有请求,包括/api/(例如 http://yourserver.com/api/users)。
3. location /static/: 匹配以 /static/ 开头的所有请求(例如 http://yourserver.com/static/css/style.css)。
4. location ~* \.(jpg|jpeg|png)$: 匹配所有以 .jpg, .jpeg, 或 .png 结尾的请求,无论它们位于哪个路径下。
5. location = /path 精准匹配,只匹配/path这个请求路径

当请求到达 Nginx 时,Nginx 会根据 location 块的配置顺序和匹配规则来决定使用哪个 location 块来处理请求。如果请求的 URI 与多个 location 块匹配,Nginx 会选择第一个最精确的匹配。如果没有找到匹配的 location 块,Nginx 会使用默认的 location / 块。

你可以使用多个 location 块来根据不同的路径进行不同的转发

以下是一个示例配置:

powershell 复制代码
http {
    server {
        listen 80;

        location /api/ {
            proxy_pass http://127.0.0.1:8000;
            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 /static/ {
            proxy_pass http://127.0.0.1:8001;
            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 / {
            proxy_pass http://127.0.0.1:8002;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

在这个配置中,所有以 /api/ 开头的请求会被转发到 http://127.0.0.1:8000,所有以 /static/ 开头的请求会被转发到 http://127.0.0.1:8001,其他所有请求会被转发到 http://127.0.0.1:8002

注意:Nginx 会按照配置文件中 location 块的顺序进行匹配,一旦找到匹配的 location,就会停止查找。因此,你应该将最特殊的 location(例如,以特定前缀开始的路径)放在最上面,将最通用的 location(例如,用于匹配所有其他请求的路径)放在最下面。

proxy_pass http://127.0.0.1:8080:表示将所有请求转发到本地的 8080 端口,proxy_pass 就是用来设置反向代理的目标服务器地址和端口

proxy_set_header 用于设置转发请求的 HTTP 头部信息。

proxy_set_header Host $host;:这个指令用于设置 HTTP 请求头部中的 Host 字段,将客户端请求中的 Host 头部信息传递给后端服务器。这样后端服务器就能知道客户端请求的原始 Host 信息。

proxy_set_header X-Real-IP $remote_addr;:这个指令用于设置 HTTP 头部 X-Real-IP字段,将客户端的真实 IP 地址传递给后端服务器。这有助于后端服务器获取客户端的真实 IP 地址(通过读取 "X-Real-IP" 字段来获取客户端的真实 IP 地址)。

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:这个指令用于设置 HTTP 头部 X-Forwarded-For字段,将客户端的原始 IP 地址列表传递给后端服务器(简单来说就是将客户端的真实 IP 地址添加到 "X-Forwarded-For" 字段中。同时,它还会保留原有的 "X-Forwarded-For" 字段值,以便于追踪请求经过了哪些代理服务器)。这个头部通常用于记录经过的代理服务器的 IP 地址,以便后端服务器跟踪请求的来源。

相关推荐
黑牛先生4 分钟前
【Linux】进程-PCB
linux·运维·服务器
Karoku06610 分钟前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
新知图书34 分钟前
Rust编程与项目实战-模块std::thread(之一)
开发语言·后端·rust
盛夏绽放1 小时前
Node.js 和 Socket.IO 实现实时通信
前端·后端·websocket·node.js
Ares-Wang1 小时前
Asp.net Core Hosted Service(托管服务) Timer (定时任务)
后端·asp.net
安迁岚1 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
打码人的日常分享2 小时前
商用密码应用安全性评估,密评整体方案,密评管理测评要求和指南,运维文档,软件项目安全设计相关文档合集(Word原件)
运维·安全·web安全·系统安全·规格说明书
Rverdoser2 小时前
RabbitMQ的基本概念和入门
开发语言·后端·ruby
追风赶月、3 小时前
【Linux】线程概念与线程控制
linux·运维·服务器
CP-DD3 小时前
Docker 容器化开发 应用
运维·docker·容器