nginx: [появляется] Директива http не разрешена здесь в /etc/nginx/sites-enabled/default: 1

Я новичок в NGINX, и я пытаюсь настроить минимальную работу. Поэтому я пытаюсь запустить мини-приложение aiohttp с nginx и supervisor (в этом примере). Но я не могу правильно настроить Nginx и получить следующую ошибку:

nginx: [emerg] "http" directive is not allowed here in /etc/nginx/sites-enabled/default:1

Вот полный файл default.conf:

http {
  upstream aiohttp {
    # Unix domain servers
    server unix:/tmp/example_1.sock fail_timeout=0;
    server unix:/tmp/example_2.sock fail_timeout=0;
    server unix:/tmp/example_3.sock fail_timeout=0;
    server unix:/tmp/example_4.sock fail_timeout=0;
  }

  server {
    listen 80;
    client_max_body_size 4G;

    server example.com;

    location / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_redirect off;
      proxy_buffering off;
      proxy_pass http://aiohttp;
    }
  }

}

Это выглядит правильно. Директива server находится в http так, как должно быть. И http - родительская директива. Что я делаю неправильно?

Ответы

Ответ 1

Я предполагаю, что у вас есть http в вашем файле /etc/nginx/nginx.conf, который затем сообщает nginx include sites-enabled/*;

Итак, у вас есть

 http
    http
       server

Поскольку директива http должна произойти только однажды, просто удалите директиву http из файлов конфигурации с поддержкой сайтов.

Ответ 2

Вы можете вставить часть, которая должна находиться в разделе http{} в ваш nginx.conf и в /etc/nginx/sites-available/default оставить только server{}.

Ответ 3

Таким образом, на самом деле проблема была во втором ключевом слове server. Я использовал пример из aiohttp docs и выглядит так, как будто они ошибочно ссылаются на "server example.com" вместо server_name example.com.