2012-12-13 135 views
0

我有Django和烧瓶应用程序通过不同的端口在同一台机器上运行:NGINX位置的烦恼

Django的运行在服务器:8088 瓶运行在服务器:666

在NGINX.conf我有以下代码:

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

     } 

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

Django已经成功运行了一年多了,这里的烧瓶是一个新的补充。任何时候我尝试访问Flask的URL之一,我会得到一个“这个URL不存在于这个服务器上”的错误,或者有时会出现500错误(当我一直在摆弄)。

如果我写了一个特定的URL瓶这样的位置信息:

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

它的工作原理,但我显然不想写每个人的位置信息,并在瓶应用的每个URL。

我已经通过了很多现有的Nginx的位置帖子在stackoverflow,但我一直无法得到它的工作。有任何想法吗?

谢谢!

编辑

这是我想要达到一个例子,但不是每个URL单独的映射,我要覆盖所有URL一个映射:

 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; 
     } 
+0

你解决这个问题?你有两个应用程序只用于本地主机?你使用的是“nginx服务器块”吗?我在一个月前做了类似的教程!也许它可以帮助[教程](http://s.albertogrespan.com/k6hi) – albertogg

回答

0

为什么使用^符号?只是将其删除,我认为它会工作:

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

我试过两种方式(其中包括),他们都以同样的方式失败。 – danspants

0

注意,当您使用location /server2server2仍然被传递给你的应用程序烧瓶。

在这种情况下,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; 
    } 
}