Nginx 不区分大小写的 proxy_pass

标签 nginx nginx-location nginx-reverse-proxy

我有一个网站叫 http://example.com ,运行的应用程序可以通过 http://example.com/app1 访问. app1 位于 nginx 反向代理后面,如下所示:

location /app1/ {
    proxy_pass http://localhost:8080/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

将尾部斜杠添加到 proxy_pass字段让我“删除” URL 的/app1/部分,至少就应用程序而言。所以 app1 认为它正在获取对根 url 的请求(例如,我在 app1 中有一条路由位于 '/' ,而不是 '/app1' )。

但是,我想让 nginx 不区分大小写。所以我是否去http://example.com/App1http://example.com/APP1 ,它应该仍然只是将请求转发到 app1,并删除 url 的/app1/部分。

当我尝试使用 nginx 不区分大小写的规则时,它不允许将 URI 的其余部分转发到 app1。
location ~* /app1/ {
    proxy_pass http://localhost:8080/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

这给了我一个 nginx 配置错误。

我的目标有两个:
  • 匹配 /app1/不区分大小写
  • 删除 /app1/将网址“传递”到应用程序时的网址的一部分

  • 我试过重写 url,但它不会让我将 URI 的其余部分添加到 proxy_pass。

    任何帮助,将不胜感激!

    最佳答案

    您应该捕获 url 的其余部分,然后使用它

    location ~* /app1/(.*) {
        proxy_pass http://localhost:8080/$1$is_args$args;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
    

    关于Nginx 不区分大小写的 proxy_pass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46625593/

    相关文章:

    node.js - nginx + node.js + websockets 的问题

    ruby-on-rails - 如何将 Capistrano 与 Apache 或 Nginx 一起使用?

    docker - 将Nginx中的端口号映射到自定义主机名

    php - 尝试在 Debian 8 v-server 上将 phalcon 更新到 3.0

    nginx 上传文件并修改文件名

    regex - Nginx 多个 "Single Page App"路由

    nginx - proxy_pass 基于 header 而不使用 if 条件

    docker - 如何使用NGINX将请求转发到Docker Microservice

    nginx - 如何通过 nginx 通过 HTTPS 连接到安全的 WebSocket SurrealDB 实例?

    api - 如何动态获取 NGINX 代理的 API 访问 token