在Nginx中,您可以通过配置不同的 location 块将特定路径的请求路由到不同的后端服务器

在Nginx中,您可以通过配置不同的 location 块将特定路径的请求路由到不同的后端服务器。以下是详细的配置方法:


1. 基础配置示例

复制代码
http {
    # 定义上游服务器(可选,适用于负载均衡场景)
    upstream backend1 {
        server 192.168.1.10:80;  # 后端服务器1
    }

    upstream backend2 {
        server 192.168.1.20:80;  # 后端服务器2
    }

    server {
        listen 80;
        server_name example.com;

        # 路由到后端服务器1
        location /app1/ {
            proxy_pass http://backend1/;  # 结尾的 / 会去除 /app1/ 前缀
            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
        location /app2/ {
            proxy_pass http://backend2/;  # 结尾的 / 会去除 /app2/ 前缀
            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://default_backend;
        }
    }
}
复制代码

 


2. 关键配置解释

2.1 location 路径匹配

  • 精确匹配location = /path { ... }
    仅匹配 /path 请求。

  • 前缀匹配location /prefix/ { ... }
    匹配以 /prefix/ 开头的所有请求。

  • 正则匹配location ~ ^/regex/(.*)$ { ... }
    使用正则表达式匹配路径。

2.2 proxy_pass 代理行为

  • 保留路径前缀

    location /app1/ {
        proxy_pass http://backend1;  # 无结尾 /
    }

    请求 example.com/app1/api → 转发到 backend1/app1/api

  • 去除路径前缀

    location /app1/ {
        proxy_pass http://backend1/;  # 有结尾 /
    }

    请求 example.com/app1/api → 转发到 backend1/api

2.3 请求头传递

  • proxy_set_header:确保后端服务器获取真实客户端信息:

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

3. 高级场景

3.1 路径重写(Rewrite)

location /legacy/ {
    rewrite ^/legacy/(.*)$ /new/$1 break;  # 将 /legacy/ 重写为 /new/
    proxy_pass http://backend3;
}

3.2 负载均衡

upstream backend {
    server 192.168.1.30:80 weight=2;  # 权重2
    server 192.168.1.40:80;
}

location / {
    proxy_pass http://backend;
}

3.3 静态文件处理

location /static/ {
    root /var/www/html;  # 路径为 /var/www/html/static/
    expires 30d;        # 缓存30天
}

4. 测试与调试

  1. 检查语法

    nginx -t
  2. 重载配置

    nginx -s reload
  3. 日志排查

    • 查看Nginx访问日志:/var/log/nginx/access.log

    • 查看Nginx错误日志:/var/log/nginx/error.log


5. 完整示例

复制代码
http {
    upstream app1_server {
        server 10.0.0.1:8080;
    }

    upstream app2_server {
        server 10.0.0.2:8080;
    }

    server {
        listen 80;
        server_name mydomain.com;

        # 路由到应用1
        location /app1/ {
            proxy_pass http://app1_server/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        # 路由到应用2(带路径重写)
        location /app2/ {
            rewrite ^/app2/(.*) /$1 break;
            proxy_pass http://app2_server;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        # 默认路由
        location / {
            return 404;  # 或代理到默认后端
        }
    }
}
复制代码

通过上述配置,Nginx会根据请求路径将流量分发到不同的后端服务器。请根据实际需求调整IP、端口和路径规则。

posted @   郭慕荣  阅读(73)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2021-03-02 nginx -s reload原理
2021-03-02 Nginx 限流总结
2020-03-02 开发一个属于自己的Spring Boot Starter
点击右上角即可分享
微信分享提示