当前位置: 首页 > 知识库问答 >
问题:

与django和uwsgi一起使用Nginx的问题

籍昱
2023-03-14

我按照http://uwsgi-docs.readthedocs.org/en/latest/tutorials/django_and_nginx.html中的步骤执行,但是当所有步骤完成后没有任何错误时,我访问127.0.0.1:8000,它的响应是超时,我的nginx日志显示

上游超时(110:连接超时)从上游读取响应标头时,

顺便说一句,我可以访问127.0.0.1:8001,在那里uwsgi和django工作得很好。我也可以访问127.0.0.1:8000/image/1.jpg中的image,但就是不能访问127.0.0.1:8000

这是我的nginx.conf

upstream django {
    server 127.0.0.1:8001;
}

server {
    listen 8000;
    server_name 127.0.0.1
    charset utf-8;

    client_max_body_size 75M;

    location /media {
        alias /home/zhaolei/virtualdjango/bin/mysite/media;
    }

    location /image {
        alias /home/zhaolei/virtualdjango/bin/mysite/image;
    }

    location / {
        uwsgi_pass django;
        include /home/zhaolei/virtualdjango/bin/mysite/uwsgi_params;
    }
}

我使用UWSGI--HTTP 127.0.0.1:8001-chdir=mysite--module=mysite.wsgi来运行UWSGI。我在https://github.com/nginx/nginx/blob/master/conf/uwsgi_params中使用uwsgi_params主机

共有1个答案

东门晨
2023-03-14

uWSGI有2种协议与web服务器进行通信。其中一个是普通的HTTP协议,也可以用来直接与客户端通信。但是也有特殊的uwsgi协议,为HTTP代理服务器和uwsgi之间的通信进行了优化。

nginx在使用UWSGI_PASS指令时使用该协议,uWSGI在使用--socket参数启动uWSGI服务器时使用该协议。

如果您使用--HTTPparam启动uWSGI,那么uWSGI将使用HTTP协议(这就是您正在做的),但是如果nginx仍然使用UWSGI_PASS,那么它将在套接字上使用uWSGI协议,而不是HTTP。

要解决这个问题,您必须将uwsgi开始命令改为使用--socket而不是--http(这是推荐的方法,但是您不能通过在浏览器中直接输入127.0.8001来检查uwsgi是否正常工作,但是没关系:如果使用--http的命令正常工作,那么使用--socket就不会有任何不同)或者在nginx配置中使用proxy_pass而不是UWSGI_pass

链接上说你被提到了,就在这里

 类似资料:
  • 我在Nginx上使用uwsgi运行我的DJango应用程序。它目前正在使用这些配置: chdir=/TMP/SRC/ 进程=4 线程=2 server_name 192.168.56.104; charset UTF-8; #最后,将所有非媒体请求发送到Django服务器。 我已经生成了证书。

  • 我遵循本教程,但我有一个问题,我得到了502 Nginx错误。 教程链接 我检查了错误日志,上面写着 uwsgi.log ImportError:没有名为khcards的模块。wsgi 我的uwsgi文件是这样的 我的nginx。形态 服务器{监听80;server_name域www.domain.co.uk;根 /var/www/example.com/src/khcards;access_lo

  • 我正试图在Docker上用Nginx、uWSGI和Postgres安装一个Django应用程序。我找到了一本关于为Django和Postgres设置Compose的优秀指南:https://docs.docker.com/v1.5/compose/django/ 但是,现在我需要添加Nginx和uWSGI。我试过使用这个回购协议的文件(https://github.com/baxeico/djan

  • 我的Django url模式: 自动取款机。我使用以下命令运行Django: uwsgi--socket:8000--wsgi-file wsgi.py 我可以访问Django,但是当我试图访问 www.testing.test/api/admin 时,我得到了一个404(从Django调试)。 但这让我的Django告诉我一个404 当我请求

  • 到目前为止,我在Ubuntu18.04远程服务器上使用uwsgi和nginx运行了一个Flask应用程序。这个应用程序是由我的网站监听端口5002的子域服务的。我想添加一个新的Flask应用程序来监听端口5003,但我一定是做了一些错误的配置,然后一切都失控了。现在这两个应用程序都不起作用了。 app1的服务器块 null

  • 在前面的章节中我们使用 python manage.py runserver 来运行服务器。这只适用测试环境中使用。 正式发布的服务,我们需要一个可以稳定而持续的服务器,比如apache, Nginx, lighttpd等,本文将以 Nginx 为例。 安装基础开发包 Centos 下安装步骤如下: yum groupinstall "Development tools" yum install