当前位置: 首页>>技术教程>>正文


django – nginx未知指令“upstream”

, , ,

问题描述

我使用nginx作为代理服务器将请求转发到我的gunicorn服务器上。当我运行sudo nginx -t -c /etc/nginx/sites-enabled/mysite时,出现以下错误。

[emerg]: unknown directive "upstream" in /etc/nginx/sites-enabled/mysite:1
configuration file /etc/nginx/sites-enabled/mysite test failed

知道如何解决吗?这是我的nginx配置:

upstream gunicorn_mysite {
    server 127.0.0.1:8000 fail_timeout=0;
}

server {
    listen 80;
    server_name example.com;

    access_log /usr/local/django/logs/nginx/mysite_access.log;
    error_log /usr/local/django/logs/nginx/mysite_error.log;

    location / {
        proxy_pass http://gunicorn_mysite;
    }
}

我正在运行Ubuntu 10.04,我的Nginx版本是从apt安装的0.7.65。

这是我运行nginx -V时的输出

nginx version: nginx/0.7.65
TLS SNI support enabled
configure arguments: --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/body --http-proxy-temp-path=/var/lib/nginx/proxy --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --with-debug --with-http_stub_status_module --with-http_flv_module --with-http_ssl_module --with-http_dav_module --with-http_gzip_static_module --with-http_realip_module --with-mail --with-mail_ssl_module --with-ipv6 --add-module=/build/buildd/nginx-0.7.65/modules/nginx-upstream-fair

最佳答案

当您告诉nginx直接加载该文件时,它从全局上下文开始。上游指令仅在http上下文中有效。当nginx.conf通常包含该文件时,它已经包含在http上下文中:

events { }
http {
  include /etc/nginx/sites-enabled/*;
}

您要么需要使用-c /etc/nginx/nginx.conf,要么使用像上面的代码块那样的小包装,然后使用nginx -c即可。

次佳答案

我正在EC2 Ubuntu上使用nginx版本:nginx /1.4.1。我收到此错误:

nginx:[emerg]在/etc/nginx/nginx.conf中不允许使用”upstream”指令

为了使我的实例运行,我不得不将上游部分和服务器部分包装在http {}部分中。然后,它抱怨缺少事件部分。所以我补充说如下:

事件{worker_connections 1024; }

经过这些修复后,它工作正常,这是我的第一个尝试,因此我正在猜测自己的解决方案。

第三种答案

轮到我的Nginx配置还可以。问题出在我的gunicorn服务器未正常运行。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/10262.html,未经允许,请勿转载。