0

具体来说,我认为我需要 Nginx 不消耗(捕获?)我用来路由位置的 URI 的一部分。但我不知道这样的事情是否可能。


让我备份。我正在转换我的应用程序的设置。之前,我有一个 Nginx 配置文件,其中包含一个与所有内容匹配的位置块:

server {
    listen   80;
    server_name ec2-54-234-175-21.compute-1.amazonaws.com;

    location / {
        ...
        proxy_pass http://localhost:8000/;
    }

通过这个设置,到目前为止,我一直在运行一个 Django 应用程序。在 Nginx 将用户路由到唯一的端点后,Django 使用整个 URI。这意味着,在内部,Django 砍掉了/api/,然后只是 has 1.0,它也需要。

现在,我将使用 Nginx 代理多个服务器,每个服务器托管一个应用程序。由于前面提到的内部路由,Django 应用程序需要(至少)接收一个 URI /1.0,而另一个(在 Flask 上)需要获取/api/2.0. 但是,为了让 Nginx 位置指令有意义,我必须区分这两个应用程序。我已经解决的是,我将只有以下两个位置指令:

server {
    listen   80;
    server_name ec2-54-234-175-21.compute-1.amazonaws.com;

    location /api/[1.0] {
        ...
        proxy_pass http://localhost:8000/;
    }

    location / {
        ...
        proxy_pass http://localhost:8080/;
    }

但是,请注意括号中的 [1.0]。如果存在,我意识到为了实际访问预期的资源,我必须输入 /api/1.0/1.0 的 URI。所以,不知何故,我需要在我的 nginx conf 中有一个非消耗位置。如果我知道如何用更简单的术语来表达这一点,我会的。我想要的可能吗?

4

1 回答 1

0

问了这个问题大约一个星期后,一位同事指出了我想要的答案,而且很简单。关键在于 Nginx 为您提供路由的延展性。因为我想访问位于 的资源/api/1.0,但仍需要区分配置中的两个应用程序,所以我执行以下操作:

服务器 {

listen   80;
server_name ec2-54-234-175-21.compute-1.amazonaws.com;

location /api/1.0 {
    ...
    proxy_pass http://localhost:8000/api/1.0;
}
location /api/2.0 {
    ...
    proxy_pass http://localhost:8080/api/2.0;
}

正如我在上面所写的那样,这有效地使 URL “不消耗”,因为我使用所需的资源 URL 进行路由,然后在引用特定应用程序中的实际位置时复制它。

也许这会帮助别人。

于 2014-05-10T00:27:35.817 回答