我正在使用nginx和gunicorn配置django项目.当我gunicorn mysite.wsgi:application --bind=127.0.0.1:8001
在nginx服务器中访问我的端口时,我在错误日志文件中收到以下错误.
server {
listen 8080;
server_name localhost;
access_log /var/log/nginx/example.log;
error_log /var/log/nginx/example.error.log;
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
}
}
Run Code Online (Sandbox Code Playgroud)
我的"http://127.0.0.1:8001/"
档案
server {
listen 8080;
server_name localhost;
access_log /var/log/nginx/example.log;
error_log /var/log/nginx/example.error.log;
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
}
}
Run Code Online (Sandbox Code Playgroud)
在我得到的html页面中nginx.conf
.
我做错了什么?
我设置了gunicorn与3名工人30个工人连接并使用eventlet工人类.它是在Nginx背后设置的.在每几个请求之后,我在日志中看到了这一点.
[ERROR] gunicorn.error: WORKER TIMEOUT (pid:23475)
None
[INFO] gunicorn.error: Booting worker with pid: 23514
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我怎么能弄清楚什么是错的?
谢谢
我正在使用Flask构建一个应用程序,但我不太了解WSGI,它是HTTP基础,Werkzeug.当我开始使用gunicorn和4个工作进程为Flask应用程序提供服务时,这是否意味着我可以处理4个并发请求?
我的意思是并发请求,而不是每秒或其他任何请求.
谢谢!
最后,我将我的开发环境从runserver迁移到gunicorn/nginx.
将runserver的自动重载功能复制到gunicorn会很方便,因此当源更改时服务器会自动重新启动.否则我必须手动重启服务器kill -HUP
.
有什么方法可以避免手动重启?
这是一个广泛的问题,但我想得到一个规范的答案.我一直在尝试在Django中使用gunicorn和nginx部署一个站点.阅读吨的教程后,我获得了成功,但我不能肯定我遵循的步骤是不够好,没有问题或可能有更好的方法来做到这一点运行一个网站.这种不确定性很烦人.
这就是为什么我正在为新手寻找一个非常详细且解释清楚的答案.我不想解释太多我所知道的,什么我不知道,因为这会歪曲回答了一下,其他人可以受益程度较轻,从你的答案.但是,我想提到的一些事情是:
您认为哪种"设置"最佳?我用的virtualenv和感动我的Django项目这个环境中,但是我已经看到了另一个设置那里是虚拟环境的项目文件夹等.
如何以允许多个站点托管在单个服务器中的方式设置内容?
为什么有人建议使用gunicorn_django -b 0.0.0.0:8000
和其他人建议gunicorn_django -b 127.0.0.1:8000
?我测试了后者的Amazon EC2实例,但而前者没有问题的工作也没有工作.
nginx的配置文件背后的逻辑是什么?有很多教程使用截然不同的配置文件,我很困惑哪一个更好.例如,有些人使用alias /path/to/static/folder
和其他人root /path/to/static/folder
.也许您可以共享首选配置文件.
为什么我们之间创建一个符号链接site-available
,并sites-enabled
在/etc/nginx
?
一些最佳实践一如既往地欢迎:-)
谢谢
我在Heroku Cedar dyno上运行Flask/Gunicorn Python应用程序.该应用程序返回JSON responses
其客户端(它API server
真的是一个).
偶尔客户端获得0字节响应.然而,不是我回来了.这是我的应用程序日志的片段:
3月14日13:13:31 d.0b1adf0a-0597-4f5c-8901-dfe7cda9bce0 app [web.1] [2013-03-14 13:13:31 UTC] 10.104.41.136 apisrv - api_get_credits_balance():session_token = [MASKED ]
上面的第一行是我开始处理请求.
3月14日13:13:31 d.0b1adf0a-0597-4f5c-8901-dfe7cda9bce0 app [web.1] [2013-03-14 13:13:31 UTC] 10.104.41.136 apisrv 1252148511 api_get_credits_balance():returns [{' credits_balance':0}]
第二行是我返回一个值(给Flask - 它是一个Flask"Response"对象).
3月14日13:13:31 d.0b1adf0a-0597-4f5c-8901-dfe7cda9bce0 app [web.1]"10.104.41.136 - - [14/Mar/2013:13:13:31]"POST/get_credits_balance?session_token = MASKED HTTP/1.1"200 22" - ""Appcelerator Titanium/3.0.0.GA(iPhone/6.1.2; iPhone OS; en_US;)"
第三行是Gnicorn,你可以看到Gunicorn获得了200个状态和22个字节的HTTP主体(" 200 22
").
但是,客户端获得0个字节.这是Heroku路由器日志:
3月14日13:13:30 d.0b1adf0a-0597-4f5c-8901-dfe7cda9bce0 heroku [router] at = info method = POST path =/get_credits_balance?session_token = MASKED host …
我一直在使用nginx/gunicorn和Flask为我的应用程序开发一个新的开发平台.
Ops-wise,一切正常 - 我遇到的问题是调试Flask层.当我的代码出现错误时,我只是将500错误返回到浏览器,并且没有任何内容显示在控制台或我的日志中.
我尝试了很多不同的配置/选项......我想我一定是想错过一些明显的东西.
我的gunicorn.conf:
import os
bind = '127.0.0.1:8002'
workers = 3
backlog = 2048
worker_class = "sync"
debug = True
proc_name = 'gunicorn.proc'
pidfile = '/tmp/gunicorn.pid'
logfile = '/var/log/gunicorn/debug.log'
loglevel = 'debug'
Run Code Online (Sandbox Code Playgroud)
borks-testserver.py的一些Flask代码示例:
from flask import Flask
from flask import render_template_string
from werkzeug.contrib.fixers import ProxyFix
app = Flask(__name__)
@app.route('/')
def index():
n = 1/0
return "DIV/0 worked!"
Run Code Online (Sandbox Code Playgroud)
最后,命令在gunicorn运行烧瓶应用程序:
gunicorn -c gunicorn.conf.py testserver:app
Run Code Online (Sandbox Code Playgroud)
谢谢你们
我在gunicorn + nginx上运行django.我正面临文件上传的问题.实际上上传工作正常,但枪炮超时因此导致这在nginx:
2011/07/25 12:13:47 [error] 15169#0: *2317 upstream timed out (110: Connection timed out) while reading response header from upstream, client: IP-ADDRESS, server: SERVER, request: "GET /photos/events/event/25 HTTP/1.1", upstream: "http://127.0.0.1:29000/photos/events/event/25", host: "HOST", referrer: "REFERER_ADDRESS"
Run Code Online (Sandbox Code Playgroud)
如果我刷新页面,我可以看到所有照片都上传得很好.问题是它会导致超时,从而给人一种上传不起作用的印象.
这是我的枪炮:
bind = "127.0.0.1:29000"
logfile = "/path/to/logs/gunicorn.log"
workers = 3
Run Code Online (Sandbox Code Playgroud)
我尝试更改超时,但它没有用.
我想在localhost上的gunicorn下运行我的django项目.我安装并集成了gunicorn.当我跑:
python manage.py run_gunicorn
Run Code Online (Sandbox Code Playgroud)
它工作但没有任何静态文件(css和js)
我在settings.py中禁用了debug和template_debug(使它们成为假),但它仍然是相同的.我错过了什么吗?
我称之为静态:
{{ STATIC_URL }}css/etc....
Run Code Online (Sandbox Code Playgroud) gunicorn ×10
django ×5
python ×5
flask ×3
nginx ×3
apache ×1
deployment ×1
heroku ×1
json ×1
preforking ×1
python-2.7 ×1
reload ×1
unicorn ×1
webserver ×1
wsgi ×1