web-dev-qa-db-fra.com

nginx: [émerg] La directive "http" n'est pas autorisée ici dans/etc/nginx/sites-enabled/default: 1

Je suis nouveau sur NGINX et j'essaie d'installer un système de travail minimal. J'ai donc essayé de lancer aiohttp mini-app avec nginx et supervisor (par this example) Mais je ne peux pas configurer Nginx correctement et obtenir l'erreur suivante:

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

Voici le fichier complet 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;
    }
  }

}

Cela semble correct. La directive server est dans http comme il se doit. Et http est directive parent. Qu'est-ce que je fais mal?

16
Paul

Je suppose que vous avez http dans votre fichier /etc/nginx/nginx.conf qui indique ensuite à nginx de include sites-enabled/*;

Alors vous avez 

 http
    http
       server

Comme la directive http ne doit apparaître qu'une seule fois, supprimez-la simplement des fichiers de configuration de vos sites.

28
Shawn C.

Vous pouvez insérer une partie qui devrait se trouver dans la section http{} dans votre nginx.conf et dans /etc/nginx/sites-available/default laisser uniquement la section server{}.

8
Leonid Usachov

Le problème se trouvait donc dans le deuxième mot clé server. J'ai utilisé un exemple tiré de la documentation aiohttp et il semble qu'ils aient été mal typés avec "server example.com" au lieu de server_name example.com

0
Paul