V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
linuxfish
V2EX  ›  Python

关于 Web 框架中路由的困惑

  •  
  •   linuxfish · 2015-11-25 15:02:04 +08:00 · 3415 次点击
    这是一个创建于 3284 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Python 中使用修饰器来将某个 url 绑定到具体的处理逻辑上的写法很容易理解,但在实际生产环境中时,一般部署是 nginx-->Web 服务器(uWSGI)-->Flask ,我的疑问是在这几个角色之间,路由到底是怎么处理的呢?我现在的感觉是 nginx 可以处理路由, Flask 中也可以处理路由,那到底该怎么用呢?

    比如,我目前有一个需求,我有一个域名, www.somesite.com ,我想要把某一个 Flask 写的逻辑绑定到比如 www.somesite.com/act 下,而不是根目录下。

    我看网上大部分的教程都是以绑定到域名的根目录来示例的,有没有办法可以实现我上面的需求呢?我感觉应该通过配置 nginx 就可以实现,但我找了好久没有找到方法。。

    8 条回复    2015-11-26 11:02:05 +08:00
    halfcrazy
        1
    halfcrazy  
       2015-11-25 15:14:55 +08:00
    rewrite
    virusdefender
        2
    virusdefender  
       2015-11-25 15:59:49 +08:00
    使用 Python 框架处理, nginx 一般就是做反向代理,没有也可以用的。
    Felldeadbird
        3
    Felldeadbird  
       2015-11-25 16:45:53 +08:00
    rewrite ^/act$ /Flask 的请求地址$1 last;
    我觉得应该是上面类似的。。
    不过通常来说,不推荐在 nginx 实现路由规则。每次修改都得修改 nginx 的规则,还得 reload 。还不如用程序实现。
    Kokororin
        4
    Kokororin  
       2015-11-25 17:02:45 +08:00
    其实和 php 框架的路由差不多,都是交给 python/php 处理,而不是靠 nginx
    linuxfish
        5
    linuxfish  
    OP
       2015-11-25 20:52:07 +08:00 via Android
    @virusdefender
    @Felldeadbird 我也想用程序实现,但在框架中如何配置类似上面需求的路由呢?把逻辑映射到非域名根目录下。在框架中是否有地方可以配置框架认为的根目录?
    secondwtq
        6
    secondwtq  
       2015-11-25 21:05:23 +08:00 via iPhone
    @linuxfish 如果我没理解错你的意思的话。

    我的做法是,在框架里面就用默认的设置,然后 nginx 配置里面加入对应目录的规则,想办法 rewrite 成根目录,然后 proxy 到后台路由。
    loading
        7
    loading  
       2015-11-25 21:12:11 +08:00 via Android
    你这是多级路由
    xiewenlongs
        8
    xiewenlongs  
       2015-11-26 11:02:05 +08:00
    nginx 管理总路由, 除了 path, 它还管理 domain 路由。 并且它决定一个 request 路由到哪个上游

    flask 或者 django 这样的框架,管理下层路由( nginx 路由下来的 request )它决定哪个 path 由哪个 view function 处理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3377 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:45 · PVG 12:45 · LAX 20:45 · JFK 23:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.