锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 专题栏目
  3. Nginx专题
  4. Nginx实现反向代理:详细配置与代码注释

Nginx实现反向代理:详细配置与代码注释

0
  • Nginx专题
  • 发布于 2024-08-10
  • 13 次阅读
黄健
黄健

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

Nginx 是一款高性能的 HTTP 和反向代理服务器,常用于负载均衡、缓存、SSL 终止、静态内容服务以及作为应用程序的反向代理。本文将详细介绍如何使用 Nginx 实现反向代理功能,包括基本配置、高级特性以及示例代码和详尽注释,以帮助您全面理解和应用 Nginx 的反向代理能力。

一、反向代理概念

反向代理: 反向代理位于客户端和服务器之间,接收客户端的请求,然后根据配置规则将请求透明地转发到后端服务器,并将服务器的响应返回给客户端。客户端感知不到后端服务器的存在,仿佛所有请求都是直接与反向代理交互。

二、Nginx 反向代理配置

Nginx 的反向代理配置主要在nginx.conf或包含的子配置文件(如sites-enabled/*.conf)中进行。配置主要包括以下部分:

  1. HTTP 服务器块 (server): 定义监听的 IP 地址、端口以及与之关联的域名(server_name)。

  2. 位置块 (location): 根据请求 URI 进行匹配,并定义在此范围内应执行的操作,如反向代理。

  3. 反向代理指令 (proxy_pass): 指定请求应被转发到的后端服务器的 URL。Nginx 将替换匹配到的位置块中的 URI,并将其发送到指定的后端服务器。

三、基本反向代理配置示例

Nginx

http {
    # 基本HTTP服务器配置
    server {
        listen 80;                 # 监听端口
        server_name example.com;   # 绑定域名
 
        # 匹配所有请求,将它们转发到后端服务器
        location / {
            proxy_pass http://backend-server:8080;  # 后端服务器地址与端口
            proxy_set_header Host $host;             # 保留原始Host头
            proxy_set_header X-Real-IP $remote_addr; # 传递真实客户端IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;  # 传递请求协议(http/https)
 
            # 其他可选配置,如缓存、超时、重试等
        }
    }
}

代码注释:

  • listen: 指定 Nginx 监听的 IP 地址和端口,这里为标准 HTTP 端口 80。

  • server_name: 设置服务器块所关联的域名,即客户端请求的域名。

  • location /: 匹配所有以根路径("/")开头的请求。

  • proxy_pass: 设置后端服务器的 URL。此处将所有匹配到的请求转发到http://backend-server:8080。

  • proxy_set_header: 设置请求转发时要修改或添加的 HTTP 头部。这些指令用于保持与后端服务器的正确交互,如:

    • Host: 保持原请求的 Host 头,确保后端服务器能够正确识别请求的目的主机。
    • X-Real-IP: 传递真实的客户端 IP 地址,防止后端服务器因反向代理而获取到 Nginx 服务器的 IP。
    • X-Forwarded-For: 传递经过代理链的客户端 IP 列表,多个代理时会追加。
    • X-Forwarded-Proto: 传递原始请求的协议(http 或 https),以便后端服务器识别请求是否经过 SSL 加密。

四、高级反向代理配置

1. 负载均衡

Nginx 可以配置多个后端服务器,并使用不同的负载均衡算法(如轮询、最少连接、IP 哈希等)进行请求分发。

Nginx

upstream backend {
    server backend-server1:8080;
    server backend-server2:8080;
    # ... 更多后端服务器
 
    # 可选的负载均衡策略,如轮询(默认)
    # least_conn;  # 最少连接
    # ip_hash;     # IP哈希
}
 
server {
    ...
    location / {
        proxy_pass http://backend;  # 使用定义好的上游服务器组
        ...
    }
}
2. URL 重写与路由

使用rewrite指令可以对请求的 URI 进行修改,实现 URL 重写或路由功能。

Nginx

location / {
    rewrite ^/old-path(.*)$ /new-path$1 permanent;  # 永久重定向
    rewrite ^/api/v1/(.*)$ /api/v2/$1 break;       # 内部重写,保持反向代理路径不变
    proxy_pass http://backend;
}
3. 缓存

通过proxy_cache模块,Nginx 可以对后端服务器的响应进行缓存,提高响应速度和减少后端压力。

Nginx

http {
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
 
    server {
        ...
        location / {
            proxy_cache my_cache;
            proxy_cache_key "$scheme$request_method$host$request_uri";
            proxy_cache_valid 200 302 1h;
            proxy_cache_valid 404 1m;
            proxy_pass http://backend;
        }
    }
}
4. 错误处理与健康检查

配置proxy_next_upstream指令处理后端服务器故障,以及使用health_check模块定期检查后端服务器健康状态。

Nginx

location / {
    proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
}
 
upstream backend {
    server backend-server1:8080;
    server backend-server2:8080;
 
    health_check uri=/health-check;
}

五、HTTPS 反向代理

要配置 Nginx 作为 HTTPS 反向代理,需要额外设置 SSL 证书和私钥,并可能需要调整 HTTP 头以适应 HTTPS 环境。

Nginx

server {
    listen 443 ssl;  # 监听HTTPS端口
    server_name example.com;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
 
    # 其他SSL配置项,如CA证书、密码、加密套件等...
 
    location / {
        proxy_pass http://backend;
        # 保持或调整与HTTPS相关的HTTP头
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
    }
}

总结来说,Nginx 通过灵活的配置选项提供了强大的反向代理功能。通过上述详细配置示例与注释,您可以根据实际需求定制 Nginx 反向代理策略,包括基本代理、负载均衡、URL 重写、缓存、错误处理以及 HTTPS 支持。这些配置将帮助您构建高效、可靠且易于管理的 Web 服务架构。

标签: #软件开发 1171
相关文章

Nginx部署前端Vue项目 2024-09-26 17:57

在使用Nginx部署前端Vue项目时,我们主要关注的是如何高效地将静态资源(HTML、CSS、JavaScript、图片等)提供给客户端浏览器。Vue.js是一个流行的JavaScript框架,用于构建用户界面,而Nginx作为一个高性能的HTTP和反向代理服务器,非常适合用于静态资源的托管。以下将

Nginx+Tomcat负载均衡、反向代理 2024-09-28 15:11

目录 一、代理 1.概述 二、Nginx反向代理 1.七层反向代理 - 动静分离

Centos下安装nginx步骤解析 2024-08-19 16:06

最近研究LNMP,首先要在linux下配置nginx服务器,话不多说,上步骤 1、编译环境gcc g++ 开发库之类的需要提前装好   yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel 2、首先安装PC

Nginx 反向代理和负载均衡 2024-08-19 14:21

❤之前粗略的学习了一下nginx,也能够简单的进行使用,但时间长了难免就会出现遗忘,遇到命令啥的有时候还得去网上搜,索性就自己整理了一份,以后看起来也比较方便。有什么不对的地方还请大家多多指正。 目录 一、nginx 简介 1、nginx 概述 2、正向代理 3、反向代理 4、负载均衡<

nginx: [emerg] getpwnam(“nginx“) failed in /etc/nginx/nginx.conf:1 2024-08-13 17:01

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net 在 Nginx 配置文件(/etc/nginx/nginx.conf)中出现错误信息 “ngin

隐藏nginx响应头中的server信息(HTTP服务器版本信息泄漏) 2024-08-13 13:40

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net 安全审计中有时会有 漏洞名称 HTTP 服务器版本信息泄漏 漏洞描述 目标服务器

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.