NGINX位置麻烦

时间:2012-12-13 00:06:03

标签: nginx

我有django和flask应用程序通过不同的端口在同一台机器上运行:

Django在服务器上运行:8088 Flask在服务器上运行:666

在NGINX.conf中,我有以下代码:

 location / {
            proxy_pass          http://127.0.0.1:8088;

        }

 location ^/server2 {
            proxy_pass http://127.0.0.1:666;
        }

Django已成功运行了一年以上,这是一个新的补充。每当我尝试访问其中一个Flask网址时,我会得到“此网址上不存在此网址”错误,或者有时会出现500错误(当我一直在摆弄时)。

如果我写下特定烧瓶网址的位置信息,请执行以下操作:

location /server2/splash {
                proxy_pass http://127.0.0.1:666/splash;
            }

它有效,但我显然不想为烧瓶应用程序中的每个URL写单独的位置信息。

我已经浏览了stackoverflow上的许多现有Nginx位置帖子,但我无法让它工作。有什么想法吗?

谢谢!

修改

这是我正在尝试实现的一个示例,而不是每个网址的单独映射,我想要一个覆盖所有网址的单一映射:

        location /server2{
            proxy_pass http://127.0.0.1:666/splash;
        }

        location /server2/split {
            proxy_pass http://127.0.0.1:666/split;
        }

        location /server2/export {
            proxy_pass http://127.0.0.1:666/export;
        }

        location /server2/import {
            proxy_pass http://127.0.0.1:666/import;
        }

2 个答案:

答案 0 :(得分:0)

为什么使用^标志?只需删除它我认为它会起作用:

location /server2 {
        proxy_pass http://127.0.0.1:666;
    }

答案 1 :(得分:0)

请注意,当您使用location /server2时,server2仍会传递给您的烧瓶应用程序。

在这种情况下,Nginx正在执行以下操作:

server.com/server2 => http://127.0.0.1:666/server2
server.com/server2/splash => http://127.0.0.1:666/server2/splash

在这种情况下,location没有进行重写。始终检查/var/log/nginx(或您的日志所在的位置)以检查浏览器完成的请求以及Nginx在处理您网站的规则后查找的内容。

您可能需要设置upstream指令:

upstream flask_server {
    server 127.0.0.1:666;
}

server {
    ...

    location /server2 {
        proxy_pass http://flask_server;
    }
}