nginx+uwsgi 502

问题描述

  1. uwsgi --http-socket=:port --venv --plugin --pythonpath 启动后可以通过ip:port 访问
  2. 服务器同时存在另一个listen 80 的server 正在运行。
  3. nginx 配置 :
server {
    server_name domain.com;
    listen 80;
    location / {
        alias /home/xxx;
   }

}

通过域名(domain.com)无法访问,返回502。

  1. nginx error.log

xxxx/xx/xx 16:02:03 [error] 320570#320570: *10169 uepstream prematurely closed connection while reading response header from upstram, client: ip.xx.ip, server: xxx.com, request: "GET / HTTP/1.1", upstream: "uwsgi://127.0.0.1:9191", host: "www.xxx.com"

解决

注意区分

  1. nginx 配置中 uwsgi_pass 和 proxy_pass 的区别。
  2. uwsgi 配置中 socket \ http \ http-socket 的区别。

总结

  • nginx 中 使用uwsgi_pass, uwsgi 中必须使用 socket。如果 使用 uwsgi_pass 和 http-socket 组合,测试会出现上面502 错误。
  • 不通过nginx发布、需要直接把uwsgi暴露外网时,使用 http 选项。此时 uwsgi 会创建一个新的http进程。
  • 通过nginx发布,nginx 中使用proxy_pass 时,uwsgi 需要 http-socket 来暴露接口。

简单的理解整理成下面的对应关系:

编号 Nginx 配置 uWSGI 配置 备注
1 uwsgi_pass 127.0.0.1:9191; --socket=127.0.0.1:9191 推荐配置
2 proxy_pass http://127.0.0.1:9191 --http-socket=127.0.0.1:9191
3 不使用 Nginx发布 --http=127.0.0.1:9191 --plugin=http 可能需要安装 uwsgi-http 和uwsgi-router_http
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容