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
xiaoshi657
V2EX  ›  Python

关于 Django+Nginx+uWSGI 部署问题

  •  
  •   xiaoshi657 · 2018-05-14 20:42:48 +08:00 · 4282 次点击
    这是一个创建于 2389 天前的主题,其中的信息可能已经有所发展或是发生改变。

    配置文件如下:

    [uwsgi]
    socket=外网 ip:端口(使用 nginx 连接时,使用 socket )
    http=外网 ip:端口(直接做 web 服务器,使用 http )
    chdir=项目根目录
    wsgi-file=项目中 wsgi.py 文件的目录,相对于项目根目录
    processes=4
    threads=2
    master=True
    pidfile=uwsgi.pid
    daemonize=uswgi.log
    

    为什么

    使用 nginx 连接时,使用 socket,直接做 web 服务器,使用 http

    使用 nginx 的时候,用 socket 原因是什么呢, 可以用 http 吗

    14 条回复    2018-05-16 01:05:31 +08:00
    julyclyde
        1
    julyclyde  
       2018-05-14 22:10:11 +08:00   ❤️ 1
    可以
    twor
        2
    twor  
       2018-05-14 22:48:25 +08:00   ❤️ 1
    新手勉强回答一下

    socket=外网 ip:端口(使用 nginx 连接时,使用 socket )

    -- 也可以 http-socket 吧。 我配置都是用 socket file,感觉上效率更高

    http=外网 ip:端口(直接做 web 服务器,使用 http )

    -- 直接把 uWSGI 作为 http 服务器,不需要 nginx 了


    参考

    http://uwsgi-docs.readthedocs.io/en/latest/HTTP.html?highlight=http
    patx
        3
    patx  
       2018-05-14 22:58:34 +08:00   ❤️ 1
    unix socket 好一点吧,nginx 和 uwsgi 进程间直接通信
    http, http socket 效率低一点,为了安全,中间会有一些校验和路由
    FindHao
        4
    FindHao  
       2018-05-14 22:58:44 +08:00 via Android   ❤️ 1
    我们的 uWSGI 是通过网络端口暴露出来的,但是由于后面我们将使用 nginx 来处理实际的 client 连接,然后传递给 uwsgi,而由于这些操作都是在一个机器上运行的,因此这里我们改成 socket 的模式更安全快速。我们指定 socket 文件是当前项目目录下的 myproject.sock。
    https://www.findhao.net/easycoding/2218
    ybping
        5
    ybping  
       2018-05-14 23:16:15 +08:00 via iPhone
    socket 性能更好
    XiaoxiaoPu
        6
    XiaoxiaoPu  
       2018-05-15 01:16:11 +08:00 via iPhone
    unix socket 确实性能好一点,但是你们确实不用考虑多机部署?
    ericls
        7
    ericls  
       2018-05-15 03:00:26 +08:00 via iPhone
    @XiaoxiaoPu 多机部署就多个 nginx 咯?
    geeklian
        8
    geeklian  
       2018-05-15 07:59:22 +08:00 via Android
    socket 和 http 肯定不一样啦...

    socket 传递的是二进制数据包,然后 nginx 将写在 uwsg_params 的信息当环境变量传递给 uwsgi。

    http 传递的超文本数据包,nginx 将原本的 http 信息和 http_proxy 配置的信息糅合在一起重新打包 http,传递给 uwsgi。

    实际使用上的区别,比如获取客户端的 ip 地址,socket 通过 REMOTE_ADDR,http 就要通过 nginx 里配置定义的 x_forwared-for 之类的了。

    至于性能,其实没太大区别。理论上 socket 比 http 强,但业务逻辑和 orm 使用还是影响性能的大头。

    我喜欢用 http,因为内网 nginx 和 django+uwsgi 不在一个服务器上,配置 http 可以直接连 app 服务器测试。备机防火墙打掉到 nginx 的连接,就可以直接当测试机用了。当然这是在管理很随意的非互联网企业的操作。
    ycz0926
        9
    ycz0926  
       2018-05-15 08:59:12 +08:00
    你是要做成分布式的?
    XiaoxiaoPu
        10
    XiaoxiaoPu  
       2018-05-15 13:25:22 +08:00
    @ericls 一个机器宕机了靠 DNS 来切换么?那样生效太慢了啊
    234747005
        11
    234747005  
       2018-05-15 16:07:43 +08:00
    换做是我就会考虑直接用 haproxy 做 tcp 代理,放弃用 nginx。
    RicardoScofileld
        12
    RicardoScofileld  
       2018-05-15 18:30:53 +08:00
    主要 nginx 负载均衡,uwsgi 一个挂了,还能分配到其他上
    ericls
        13
    ericls  
       2018-05-16 00:43:31 +08:00 via iPhone
    @XiaoxiaoPu load balancer
    XiaoxiaoPu
        14
    XiaoxiaoPu  
       2018-05-16 01:05:31 +08:00
    @ericls 那不如 load balancer 直连 uwsgi
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1116 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:10 · PVG 03:10 · LAX 11:10 · JFK 14:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.