三个不同项目的 Nginx 位置块

三个不同项目的 Nginx 位置块

我在尝试在 Nginx 中设置位置块时遇到了麻烦。我的服务器中有三个项目/目录,我想在同一个域下提供服务。两个 React 服务器和一个 NodeJS 服务器。

我想要实现的目标是:

  1. 如果转到域根目录,我想为其中一个 React 应用提供服务。因此,由于项目已构建,因此这只是静态文件。(这运行良好)
  2. 如果/check我想将其传递给 nodeJS 应用程序(这也很好用)
  3. 接下来是棘手的部分。我希望/check除根域之外的所有其他内容都能加载其他 React 应用程序。(这不起作用)

这是我目前拥有的:

server {

        root /var/www/landing/public;
        index index.html index.htm index.nginx-debian.html;

        server_name domain.com www.domain.com;

        location / {
            try_files $uri $uri/ =404;
        }

        location /(?<something>.*)/ {
           alias /var/www/react-frontend/build/;
           index index.html index.htm;
        }

        location /check/ {
           proxy_pass http://localhost:3001/;
        }
}

希望我能够解释清楚一切。谢谢。

答案1

以下是示例配置。

server {
  listen 127.0.0.1:8088;
  location / {
    content_by_lua_block {
        ngx.say("root")
        ngx.exit(ngx.HTTP_OK)
    }
  }
  location ~* "^\/check(.*)$" {
    content_by_lua_block {
        ngx.say("check")
        ngx.exit(ngx.HTTP_OK)
    }
  }
  location ~* "^\/(.*)\/+(.*)$" {
    content_by_lua_block {
        ngx.say("all other")
        ngx.exit(ngx.HTTP_OK)
    }
  }
}

以下是测试:

# curl 127.0.0.1:8088
root
# curl 127.0.0.1:8088/
root
# curl 127.0.0.1:8088/ll
root
# curl 127.0.0.1:8088/ll/
all other
# curl 127.0.0.1:8088/check
check
# curl 127.0.0.1:8088/check/
check

答案2

我相信你可以做这样的事情:

location = / {
 index block
}

location = /check/ {
 check block }

location ~* ".*" {
 all others block
}

因为精确匹配优先于正则表达式匹配。这对你有用吗?

相关内容