使用nginx提供静态主页和通过uwsgi提供rest服务

10

我有一个使用nginx + uwsgi搭建的网站(使用Flask处理动态Python页面)。我想直接通过nginx提供静态主页,并将所有其他请求路由到uwsgi。

以下nginx配置指令可以很好地通过nginx服务于静态主页,并将mysite.com/login的请求重定向到uwsgi:

location / {                                                                                                                                                                                                
    root  /var/www/mysite.com/static;                                                                                                                                                                
    index  index.html index.htm;                                                                                                                                                                            
}                                                                                                                                                                                                           

location /login {                                                                                                                                                                                           
    include uwsgi_params;                                                                                                                                                                                   
    uwsgi_pass 127.0.0.1:3031;                                                                                                                                                                              
} 

但是我找不到一种通用的方式来捕获所有对mysite.com/something的调用并将它们重定向到uwsgi。

我尝试了以下代码,但它并没有起作用(除了对mysite.com的调用之外,其它任何调用都会得到404错误):

location / {                                                                                                                                                                                                
    root  /var/www/mysite.com/static;                                                                                                                                                                
    index  index.html index.htm;                                                                                                                                                                            
}                                                                                                                                                                                                           

location /* {                                                                                                                                                                                           
    include uwsgi_params;                                                                                                                                                                                   
    uwsgi_pass 127.0.0.1:3031;                                                                                                                                                                              
}

有什么建议吗?

1个回答

11

试试这样做

server {
...
 root  /var/www/mysite.com/static;                                                                                                                                                                
 index  index.html index.htm;   
 try_files $uri @uwsgi; 
 location @uwsgi{
    include uwsgi_params;                                                                                                                                                                                   
    uwsgi_pass 127.0.0.1:3031; 
 }
...
}

http://wiki.nginx.org/HttpCoreModule#try_files


3
感谢,将 try_files 指令更改为 try_files $uri $uri/ @uwsgi; 后,它就像魔法般地运行了。 - gws
2
注意!"$uri/"很重要,在我的情况下也解决了问题(在Dreamhost VPS上使用nginx 0.8.4)。 - velochy
能否只在特定位置尝试使用try_files?这样可能更有效率。 - 2080

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接