从django + gunicorn + nginx设置向外部URL发出POST请求

See*_*Yre 10 django nginx gunicorn

我正在从运行在django + nginx + gunicorn上的Web应用程序内的方法发送一个post请求.在django自己的服务器上执行时,使用相同的代码接收200响应没有问题(使用runserver).

try:
    response = requests.post(post_url, data=some_data)
    if response.status_code == OK and response.content == '':
        logger.info("Request successful")
    else:
        logger.info("Request failed with response({}): {}".format(response.status_code, response.content))
        return response.status_code == OK and response.content == ''
except requests.RequestException as e:
    logger.info("Request failed with exception: {}".format(e.message))
    return False
Run Code Online (Sandbox Code Playgroud)

我在post_url检查了服务器日志,它确实返回了200响应这个数据.但是,当我在gunicorn和nginx后面运行应用程序时,我无法收到响应(但请求正在发送).在try块之后代码卡在第一行,并且gunicorn worker超时(30秒后).

这是post_url上的apache服务器日志:

[14/Sep/2016:13:19:20 +0000] "POST POST_URL_PATH HTTP/1.0" 200 295 "-" "python-requests/2.9.1"
Run Code Online (Sandbox Code Playgroud)

更新:

我忘了提一下,这个请求执行时间不到一秒,所以这不是一个超时问题.配置出了什么问题?我有标准的nginx + gunicorn设置,其中gunicorn被设置为nginx中的proxy_pass.我猜是因为我在nginx代理后面,我应该在从应用程序发送帖子请求时做些不同的事情吗?

See*_*Yre 6

在我的gunicorn设置中,设置workers=2解决了这个问题。

当我向外部 URL 发送请求时,外部应用程序会发回一个请求。这一新请求将占用应用程序中唯一的工作人员。我发出的原始请求是无工作的,因此它被卡住了。有了 2 个工作人员,我就可以同时发出一个请求并接收另一个请求。