nginx: la directive [émerg] «serveur» n'est pas autorisée ici

100

J'ai reconfiguré nginx mais je ne peux pas le redémarrer en utilisant la configuration suivante:

conf:

server {
listen 80;
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}


server {
listen 80;
server_name example.com;

access_log /var/log/nginx/access.log;
error_log  /var/log/nginx/error.log;

location /robots.txt {
    alias /path/to/robots.txt;
    access_log off;
    log_not_found off;
}

location = /favicon.ico { access_log off; log_not_found off; }

location / {
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_connect_timeout 30;
    proxy_read_timeout 30;
    proxy_pass http://127.0.0.1:8000;
}

location /static {
    expires 1M;
    alias  /path/to/staticfiles;
}
}

après avoir exécuté sudo nginx -c conf -tpour tester la configuration, l'erreur suivante est renvoyée, je ne peux pas comprendre quel est vraiment le problème

nginx: [emerg] "server" directive is not allowed here in    /etc/nginx/sites-available/config:1
nginx: configuration file /etc/nginx/sites-available/config test failed
samix73
la source

Réponses:

179

Ce n'est pas un nginxfichier de configuration. Il fait partie d'un nginxfichier de configuration.

Le nginxfichier de configuration (généralement appelé nginx.conf) ressemblera à:

events {
    ...
}
http {
    ...
    server {
        ...
    }
}

Le serverbloc est enfermé dans un httpbloc.

Souvent, la configuration est répartie sur plusieurs fichiers, en utilisant les includedirectives pour extraire des fragments supplémentaires (par exemple à partir du sites-enabledrépertoire).

Utilisez sudo nginx -tpour tester le fichier de configuration complet, qui commence à nginx.confet extrait des fragments supplémentaires à l'aide de la includedirective. Consultez ce document pour en savoir plus.

Richard Smith
la source
Cette réponse est correcte et a été votée à juste titre - im essayant de clarifier davantage, peut aider d'autres noobs comme moi. Ont donc répondu à cette question ci-dessous.
Rohit Dhankar
14

Exemple de nginx.conf valide pour le proxy inverse; Au cas où quelqu'un serait coincé comme moi

events {
  worker_connections  4096;  ## Default: 1024
}
http {
 server {
   listen 80;
   listen [::]:80;

   server_name 10.x.x.x;

   location / {
       proxy_pass http://10.y.y.y:80/;
       proxy_set_header Host $host;
   }
 }
}

et vous pouvez aussi le servir dans docker

 docker run --name nginx-container --rm --net=host   -v /home/core/nginx/nginx.conf:/etc/nginx/nginx.conf nginx
Alex Punnen
la source
2

Le chemin d'accès au nginx.conffichier qui est le fichier de configuration principal pour Nginx - qui est également le fichier qui doit INCLURE le chemin pour les autres fichiers de configuration Nginx en cas de besoin /etc/nginx/nginx.conf.

Vous pouvez accéder et modifier ce fichier en le tapant sur le terminal

cd /etc/nginx

/etc/nginx$ sudo nano nginx.conf

Plus loin dans ce fichier, vous pouvez inclure d'autres fichiers - qui peuvent avoir une directive SERVER en tant que BLOC SERVEUR indépendant - qui n'ont pas besoin d'être dans les blocs HTTP ou HTTPS, comme cela est clarifié dans la réponse acceptée ci-dessus.

Je le répète - si vous avez besoin d'un BLOC SERVEUR à définir dans le fichier de configuration PRIMAIRE lui-même, ce BLOC SERVEUR devra être défini dans un bloc HTTP ou HTTPS englobant dans le /etc/nginx/nginx.conffichier qui est le fichier de configuration principal pour Nginx.

Notez également -c'est OK si vous définissez, un BLOC SERVEUR ne l'enfermant pas directement dans un bloc HTTP ou HTTPS, dans un fichier situé au chemin /etc/nginx/conf.d. Aussi pour faire ce travail, vous devrez inclure le chemin de ce fichier dans le fichier PRIMARY Config comme indiqué ci-dessous: -

http{
    include /etc/nginx/conf.d/*.conf; #includes all files of file type.conf
}

De plus, vous pouvez commenter à partir du fichier PRIMARY Config, la ligne

http{
    #include /etc/nginx/sites-available/some_file.conf; # Comment Out 
    include /etc/nginx/conf.d/*.conf; #includes all files of file type.conf
}

et n'a pas besoin de conserver de fichiers de configuration /etc/nginx/sites-available/et pas besoin de les lier symboliquement /etc/nginx/sites-enabled/, veuillez noter que cela fonctionne pour moi - au cas où quelqu'un pense que ce n'est pas le cas pour eux ou que ce type de configuration est illégal, etc., veuillez laisser un commentaire pour que je peux me corriger - merci.

EDIT: - Selon la dernière version du livre de recettes officiel Nginx, nous n'avons pas besoin de créer de configuration à l'intérieur - /etc/nginx/sites-enabled/, c'était la pratique la plus ancienne et est maintenant DÉPRECIEE.

Ainsi, pas besoin de la DIRECTIVE INCLURE include /etc/nginx/sites-available/some_file.conf;.

Citation de la page du livre de recettes Nginx - 5.

"Dans certains référentiels de packages, ce dossier est nommé sites-enabled, et les fichiers de configuration sont liés à partir d'un dossier nommé site-available; cette convention est dépréciée."

Rohit Dhankar
la source
0

Il peut y avoir juste une faute de frappe n'importe où dans un fichier importé par la configuration. Par exemple, j'ai fait une faute de frappe au fond de mon fichier de configuration:

loccation /sense/movies/ {
                  mp4;
        }

(emplacement au lieu de l'emplacement), et cela provoque l'erreur:

nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-enabled/xxx.xx:1
Bojan
la source