Неизвестная директива nginx вверх по течению

Я использую 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 — 0.7.65, которую я установил из apt.

Это вывод, когда я запускаю 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

person Neil    schedule 20.10.2011    source источник
comment
это все еще очень полезно, может быть, опубликовать это как ответ   -  person James    schedule 24.09.2012


Ответы (3)


Когда вы указываете nginx загрузить этот файл напрямую, он запускается в глобальном контексте. Директива upstream действительна только в контексте http. Когда этот файл обычно включается nginx.conf, он уже включен в контекст http:

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

Вам либо нужно использовать -c /etc/nginx/nginx.conf, либо сделать небольшую оболочку, подобную приведенному выше блоку, и nginx -c ее.

person kolbyjack    schedule 21.10.2011

Я использую версию nginx: nginx/1.4.1 на EC2 Ubuntu. Я получал эту ошибку:

nginx: [emerg] директива «upstream» не разрешена здесь, в /etc/nginx/nginx.conf

Чтобы запустить мой экземпляр, мне пришлось обернуть разделы upstream и server в раздел http { }. Затем он пожаловался на отсутствующий раздел событий. Поэтому я добавил это следующим образом:

события { worker_connections 1024; }

После этих исправлений все заработало нормально, это моя первая попытка, поэтому я догадывался, как пройти.

person eezis    schedule 16.05.2013
comment
У меня работало на Mac OS X с Nginx/Thin. - person user2398029; 15.06.2013

Оказывается, моя конфигурация nginx была в порядке. Проблема заключалась в том, что мой сервер gunicorn не работал должным образом.

person Neil    schedule 24.09.2012