我一直在努力解决这个问题两天没有成功。 我创build了一个名为“testdj”的默认Django(1.6.1)应用程序实例,将其安装在运行Ubuntu Server 13.10的Amazon AWS EC2 t1.micro实例上,并试图访问默认的Django“It works !” 通过Gunicorn页(第18节)。 当我从命令行启动gunicorn时:
gunicorn testdj.wsgi:application --bind [ec2-public-dns]:8001
当我input这个url时,我可以看到页面:
http://[ec2-public-dns]:8001
然而,如果我使用了一个在读完Karzynski的博文“用Nginx,Gunicorn,virtualenv,supervisor和Postgresql设置Django”之后创build的“start-gunicorn”bash脚本,我总是会遇到一个错误。 当我input这个url…
http://[ec2-public-dns]
…我得到这个错误:
Django + Gunicorn + Nginx内部服务器错误,错误在哪里以及如何解决?
为什么你需要一个URL的末尾的斜线?
无法在Windows中使用solr和haystack和django创build索引文件
Error 502 - Bad Request The server Could not resolve your request for uri: http://[ec2-public-dns]
这是开始gunicorn脚本:
#!/bin/bash NAME="testdj" DJANGODIR=/usr/share/Nginx/html/testdj SOCKFILE=/usr/share/Nginx/html/testdj/run/gunicorn.sock USER=testdj GROUP=testdj NUM_WORKERS=3 DJANGO_SETTINGS_MODULE=testdj.settings DJANGO_Wsgi_MODULE=testdj.wsgi WORKON_HOME=/home/testdj/venv source `which virtualenvwrapper.sh` workon $NAME export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE export PYTHONPATH=$DJANGO_DIR:$PYTHONPATH RUNDIR=$(dirname $SOCKFILE) test -d $RUNDIR || mkdir -p $RUNDIR exec gunicorn ${DJANGO_Wsgi_MODULE}:application --name $NAME --workers $NUM_WORKERS --user=$USER --group=$GROUP --access-logfile /tmp/gunicorn-access.log --error-logfile /tmp/gunicorn-error.log --log-level=debug --bind=unix:$SOCKFILE
正如你所看到的,我在我的服务器上创build了一个名为“testdj”的特殊帐户来运行该应用程序。 我正在虚拟环境中运行我的Django应用程序。 我根本没有改变Django的wsgi.py文件。 因为我最终希望使用Nginx作为我的反向代理,所以我安装了Nginx,并将Django应用程序放在Nginx默认的根目录/ usr / share / Nginx / html中。 用户/组www / data拥有/ usr / share / Nginx以及除用户/组“testdj”拥有/ usr / share / Nginx / html / testdj及其下的所有内容以外的所有内容。 / usr / share / Nginx / html / testdj及其所有的子目录都有775,我已经将www-data添加到testdj组。
我有Nginx安装,但我没有运行Nginx服务。 我曾尝试启动并使用以下configuration文件启用Nginx虚拟服务器,但仍然发生错误。
upstream testdj_app_server { server unix:/usr/share/Nginx/html/testdj/run/gunicorn.sock fail_timeout=0; } server { listen 80; server_name ec2-[my-public-dns-ip].us-west-2.compute.amazonaws.com; client_max_body_size 4G; access_log /var/log/Nginx/testdj-access.log; error_log /var/log/Nginx/testdj-error.log; location /static/ { alias /usr/share/Nginx/html/testdj/static/; } location /media/ { alias /usr/share/Nginx/html/testdj/media/; } location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; if (!-f $request_filename) { # This must match "upstream" directive above proxy_pass http://testdj_app_server; break; } } error_page 500 502 503 504 /500.html; location = /500.html { root /usr/share/Nginx/html/testdj/static/; } }
这个问题似乎与gunicorn,因为如果我用“ – 绑定 – [ec2-public-dns]:8000”replace我的启动gunicorn脚本中的“–bind = unix:$ SOCKFILE”,我可以看到Django的默认页面。 但是,我不想在端口8000上绑定到我的公共DNS名称,我想在端口80上运行,并使用Nginx作为我的前端反向代理。
我最初有AWS入站安全组规则,限制对我的笔记本电脑端口80,8000和8001上的HTTP访问该网站的访问,但即使我删除这些规则并保持打开网站,仍然收到502错误消息。
我的gunicorn访问日志不显示任何活动,我在gunicorn错误日志中看到的唯一的东西是gunicorn启动。 当我访问默认的Django页面时,错误日志中没有错误:
2014-02-03 18:41:01 [19023] [INFO] Starting gunicorn 18.0 2014-02-03 18:41:01 [19023] [DEBUG] Arbiter booted 2014-02-03 18:41:01 [19023] [INFO] Listening at: unix:/usr/share/Nginx/html/testdj/run/gunicorn.sock (19023) 2014-02-03 18:41:01 [19023] [INFO] Using worker: sync 2014-02-03 18:41:01 [19068] [INFO] Booting worker with pid: 19068 2014-02-03 18:41:01 [19069] [INFO] Booting worker with pid: 19069 2014-02-03 18:41:01 [19070] [INFO] Booting worker with pid: 19070
有人知道这里发生了什么? 它看起来不像我甚至得到gunicorn。 我为这篇长文章道歉,但似乎有很多“移动部分”来解决这个问题。 我非常感谢任何帮助,因为我尝试了许多不同的东西,但都无济于事。 我也看了其他的问题,其他人有类似的问题,但我没有看到任何与这个问题有关的问题。 谢谢!
在Djangopipe理中上传文件时出现UnicodeEncodeError
如何在Django中设置Nginx的子目录
Django il8n – 在Windows上翻译外部应用程序
如何运行Nginx,gevent,virtualenv和django
在FCGI的Apache Django – 500内部服务器在高负载下的错误
我在我的Linode服务器上重复了我的配置过程,完全没有问题。 我必须假定这个问题与AWS EC2实例配置的方式有关,可能是关于安全性。
今天我遇到了同样的问题。 丹尼尔·罗斯曼在这里的评论中向我解释:
端口8000默认情况下不对外开放; 你需要摆弄负载平衡器/防火墙设置才能打开它,或者在80端口运行gunicorn(这意味着要杀死Nginx并以超级用户身份启动gunicorn)。 更容易得到正确的Nginx设置; gunicorn 部署文档页面上有一个完全可用的配置。
看起来可以直接运行Gunicorn,但EC2默认情况下不会设置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。