![如何在 EC2 上的 nginx 上的 uWSGI 上运行 Django 1.3/1.4(Apache2 有效)](https://linux22.com/image/580577/%E5%A6%82%E4%BD%95%E5%9C%A8%20EC2%20%E4%B8%8A%E7%9A%84%20nginx%20%E4%B8%8A%E7%9A%84%20uWSGI%20%E4%B8%8A%E8%BF%90%E8%A1%8C%20Django%201.3%2F1.4%EF%BC%88Apache2%20%E6%9C%89%E6%95%88%EF%BC%89.png)
我代表管理员发布一个问题。基本上,他想在 Amazon EC2 上安装的 nginx 上的 WSGI 上设置 Django 应用程序(基于 Django 1.3 制作,但将迁移到 Django 1.4,因此我希望这两个中的哪一个能工作并不重要)。
当使用 Django 的开发服务器时(例如./manage.py runserver 0.0.0.0:8080
),应用程序可以正常运行,Apache 也可以正常工作。唯一的问题是 nginx,看起来 nginx / WSGI 或 Django 配置还有其他问题。
他的描述如下:
服务器已经按照很多教程配置好了,但是遗憾的是Nginx和uWSGI仍然不能与应用程序一起工作。
项目名称.py:
import os, sys, wsgi
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ProjectName.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
我通过命令运行 uWSGI:
uwsgi -x /etc/uwsgi/apps-enabled/projectname.xml
XML 文件:
<uwsgi>
<chdir>/home/projectname</chdir>
<pythonpath>/usr/local/lib/python2.7</pythonpath>
<socket>127.0.0.1:8001</socket>
<daemonize>/var/log/uwsgi/proJectname.log</daemonize>
<processes>1</processes>
<uid>33</uid>
<gid>33</gid>
<enable-threads/>
<master/>
<vacuum/>
<harakiri>120</harakiri>
<max-requests>5000</max-requests>
<vhost/>
</uwsgi>
在来自 uWSGI 的日志中:
*** no app loaded. going in full dynamic mode ***
在 Nginx 的日志中:
XXX.com [pid: XXX|app: -1|req: -1/1] XXX.XXX.XXX.XXX () {48 vars in 989 bytes} [Date] GET / => generated 46 bytes in 77 m
secs (HTTP/1.1 500) 2 headers in 63 bytes (0 switches on core 0)
added /usr/lib/python2.7/ to pythonpath.
Traceback (most recent call last):
File "./ProjectName.py", line 26, in <module>
from django.core.wsgi import get_wsgi_application
ImportError: No module named wsgi
unable to load app SCRIPT_NAME=XXX.com|
使用的示例教程:
- http://projects.unbit.it/uwsgi/wiki/RunOnNginx
- https://docs.djangoproject.com/en/1.4/howto/deployment/wsgi/
你知道哪里做错了吗,或者应该做什么才能让 Django 在 EC2 上的 nginx 上的 uWSGI 上运行?
答案1
告诉他从简单的配置开始,然后进行调整:
http://projects.unbit.it/uwsgi/wiki/Quickstart
一旦简单 http 模式的应用程序运行起来,他就可以开始添加与 nginx 的集成。
之后,他可以开始真正的调整、添加流程和监控功能。
据我所见,他似乎正从动态模式开始,这是一个非常复杂的话题(而且 99% 的时间都是不需要的)
答案2
在你的 uwsgi.xml 中添加更多配置行,这是我的一个项目的 yaml 版本:
uwsgi:
uid: 33
gid: 33
socket: /webapps/<project_name>/run/uwsgi-socket
logto: /webapps/<project_name>/logs/uwsgi.log
pidfile: /webapps/<project_name>/run/uwsgi.pid
touch-reload: /webapps/<project_name>/run/reload
enable-threads: true
single-interpreter: true
thread: 3
master: true
chdir: /webapps/<project_name>
env: DJANGO_SETTINGS_MODULE=<project_name>.settings.production
module: <project_name>.wsgi
virtualenv: /webapps/.virtualenvs/<project_name>
看起来您缺少了 env 和 module 部分。您可能还需要考虑虚拟环境。