Nginx中proxy_pass使用小结

 更新时间:2025年01月10日 11:37:56   作者:福如意如我心意  
本文详细介绍了Nginx中proxy_pass指令的基本用法、配置示例及高级用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

proxy_pass 是 Nginx 中一个非常重要的指令,用于将请求代理到后端服务器。本文将详细介绍 proxy_pass 的基本用法、配置示例以及一些高级用法。

1. 基本概念

1.1 proxy_pass 概述

proxy_pass 指令用于将请求转发到后端服务器。它可以用于 HTTP 和 Stream 模块,分别处理 HTTP 请求和 TCP/UDP 流量。

1.2 语法

proxy_pass URL;
  • URL:后端服务器的地址,可以是 HTTP/HTTPS 地址或 TCP/UDP 地址。

1.3 使用场景

  • HTTP 代理:将 HTTP 请求转发到后端服务器。
  • Stream 代理:将 TCP/UDP 流量转发到后端服务器。

2. 基本用法

2.1 HTTP 代理

2.1.1 基本示例

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_server;
    }
}

在这个示例中,所有访问 example.com 的请求都会被转发到 backend_server

2.1.2 绝对根路径 vs 相对路径

绝对根路径:在 proxy_pass 后面的 URL 以斜杠 / 结束,表示绝对根路径。

location /proxy/ {
    proxy_pass http://127.0.0.1/;
}

例如,访问 http://example.com/proxy/test.html 会被转发到 http://127.0.0.1/test.html

相对路径:在 proxy_pass 后面的 URL 不以斜杠 / 结束,表示相对路径。

location /proxy/ {
    proxy_pass http://127.0.0.1;
}

例如,访问 http://example.com/proxy/test.html 会被转发到 http://127.0.0.1/proxy/test.html

2.2 Stream 代理

stream {
    upstream backend {
        server 127.0.0.1:8080;
    }

    server {
        listen 12345;
        proxy_pass backend;
    }
}

在这个示例中,所有连接到 12345 端口的 TCP 流量都会被转发到 127.0.0.1:8080

3. 高级用法

3.1 正则匹配

当 location 使用正则表达式时,proxy_pass 不能包含 URI 部分。

location ~ /testc {
    proxy_pass http://127.0.0.1:8801;
}

如果包含 URI 部分,会导致配置文件解析错误:

location ~ /testd {
    proxy_pass http://127.0.0.1:8801/;  # 错误
}

3.2 变量使用

可以使用变量来动态生成转发地址。

location /novel/ {
    proxy_pass http://book-server/books$request_uri;
}

例如,访问 http://example.com/novel/three-body.html?page=3 会被转发到 http://book-server/books/novel/three-body.html?page=3

3.3 重定向

Nginx 会在某些情况下自动进行 301 重定向,例如当请求的 URI 没有以斜杠 / 结束,但 Nginx 认为这是一个目录时。

location /films/nature/ {
    proxy_pass http://film-server;
}

如果访问 http://example.com/films/nature,Nginx 会返回 301 重定向到 http://example.com/films/nature/

3.4 精确匹配

可以使用精确匹配来避免 301 重定向。

location /films/nature/ {
    proxy_pass http://film-server;
}

location = /films/nature {
    proxy_pass http://film-server;
}

3.5 if 语句

在 location 中使用 if 语句时,proxy_pass 不能包含 URI 部分。

location /google {
    if ($geoip_country_code ~ (RU|CN)) {
        proxy_pass http://www.google.hk;
    }
}

3.6 limit_except

在 limit_except 中使用 proxy_pass 时,不能包含 URI 部分。

location /yongfu/ {
    proxy_pass http://unix:/tmp/backend.socket:/uri/;

    limit_except PUT DELETE {
        proxy_pass http://127.0.0.1:9080;
    }
}

4. 实际案例

4.1 转发到多个后端服务器

upstream backend_servers {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_servers;
    }
}

4.2 转发到不同路径

server {
    listen 80;
    server_name example.com;

    location /api/ {
        proxy_pass http://api_server/;
    }

    location /static/ {
        proxy_pass http://static_server/;
    }
}

4.3 转发到 Unix Domain Socket

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://unix:/tmp/backend.socket:/uri/;
    }
}

到此这篇关于Nginx中proxy_pass使用小结的文章就介绍到这了,更多相关Nginx proxy_pass使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Nginx配置网页转发的实现步骤

    Nginx配置网页转发的实现步骤

    本文主要介绍了Nginx配置网页转发的实现步骤,实现将云服务器的80端口转发到另一台服务器部署的网页,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • nginx proxy_redirect https配置后端http302跳转处理方式

    nginx proxy_redirect https配置后端http302跳转处理方式

    这篇文章主要介绍了nginx proxy_redirect https配置后端http302跳转处理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Nginx转发需求querystring转写示例解析

    Nginx转发需求querystring转写示例解析

    这篇文章主要为大家介绍了Nginx转发需求querystring转写示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • nginx正向代理https网站的实现

    nginx正向代理https网站的实现

    Nginx正向代理,通过服务器代理客户端去重定向请求访问到目标服务器的一种代理服务,本文主要介绍了nginx正向代理https网站的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • 详解Nginx中的geo模块与利用其配置负载均衡的示例

    详解Nginx中的geo模块与利用其配置负载均衡的示例

    这篇文章主要介绍了详解Nginx中的geo模块与利用其配置负载均衡的示例,文中对模块的geo指令使用有比较详细的介绍,需要的朋友可以参考下
    2016-01-01
  • Nginx防盗链根据UA屏蔽恶意User Agent请求(防蜘蛛)

    Nginx防盗链根据UA屏蔽恶意User Agent请求(防蜘蛛)

    相对于 Apache,Nginx 占用的系统资源更少,更适合 VPS 使用。恶意盗链的 User Agent 无处不在,博客更换到 WordPress 没几天,就被 SPAM(垃圾留言)盯上,又被暴力破解后台用户名密码。今天来介绍 Nginx 屏蔽恶意 User Agent请求的方法
    2016-07-07
  • linux安装nginx和前端部署vue项目全过程(实测react项目也可)

    linux安装nginx和前端部署vue项目全过程(实测react项目也可)

    这篇文章主要介绍了如何将前端项目打包并部署到服务器上,包括使用nginx进行配置和启动等步骤,文中通过代码以及图文介绍的非常详细,需要的朋友可以参考下
    2024-11-11
  • nginx作为下载服务器配置过程

    nginx作为下载服务器配置过程

    本文详细介绍了如何配置Nginx作为下载服务器,包括基本配置指令、location块配置、Content-Disposition头部信息、sendfile指令、文件系统权限设置以及访问控制,通过实验,验证了Nginx在文件下载场景中的高效和安全性
    2025-12-12
  • Nginx配置之虚拟主机server_name优先级方式

    Nginx配置之虚拟主机server_name优先级方式

    本文主要介绍了Nginx配置文件中不同匹配规则的优先,包括精确匹配、以星号开头的最长通配符、以星号结尾的最长通配符以及第一个正则表达式匹配,总结了Nginx处理匹配规则的优先机制,以及注意事项
    2026-04-04
  • NGINX中浏览器的盗链与防止被盗的实现

    NGINX中浏览器的盗链与防止被盗的实现

    本文介绍在局域网内实现盗链与防盗链的配置方法,通过Nginx设置valid_referers限制资源访问来源,非法引用返回403禁止访问,感兴趣的可以了解一下
    2025-07-07

最新评论