nginx: [emerg] la direttiva "server" non è consentita qui


100

Ho riconfigurato nginx ma non riesco a riavviarlo utilizzando la seguente configurazione:

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;
}
}

dopo aver eseguito sudo nginx -c conf -tper testare la configurazione viene restituito il seguente errore non riesco a capire qual è realmente il problema

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

Risposte:


179

Questo non è un nginxfile di configurazione. Fa parte di un nginxfile di configurazione.

Il nginxfile di configurazione (solitamente chiamato nginx.conf) avrà il seguente aspetto:

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

Il serverblocco è racchiuso in un httpblocco.

Spesso la configurazione viene distribuita su più file, utilizzando le includedirettive per estrarre frammenti aggiuntivi (ad esempio dalla sites-enableddirectory).

Utilizzare sudo nginx -tper testare il file di configurazione completo, che inizia da nginx.confe estrae frammenti aggiuntivi utilizzando la includedirettiva. Vedi questo documento per ulteriori informazioni.


Questa risposta è corretta ed è stata giustamente votata - sto cercando di chiarire ulteriormente, potrebbe aiutare altri niubbi come me. Hanno quindi risposto a questa domanda di seguito.
Rohit Dhankar

14

Esempio valido nginx.conf per il proxy inverso; Nel caso qualcuno sia bloccato come me

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;
   }
 }
}

e puoi anche pubblicarlo nella finestra mobile

 docker run --name nginx-container --rm --net=host   -v /home/core/nginx/nginx.conf:/etc/nginx/nginx.conf nginx

2

Il percorso del nginx.conffile che è il file di configurazione principale per Nginx, che è anche il file che INCLUDE il percorso per altri file di configurazione di Nginx come e quando richiesto è /etc/nginx/nginx.conf.

È possibile accedere a questo file e modificarlo digitandolo sul terminale

cd /etc/nginx

/etc/nginx$ sudo nano nginx.conf

Inoltre in questo file è possibile includere altri file, che possono avere una direttiva SERVER come SERVER BLOCK indipendente, che non devono necessariamente essere all'interno dei blocchi HTTP o HTTPS, come chiarito nella risposta accettata sopra.

Ripeto: se è necessario definire un BLOCCO SERVER all'interno del file di configurazione PRIMARIO stesso, quel BLOCCO SERVER dovrà essere definito all'interno di un blocco HTTP o HTTPS che racchiude nel /etc/nginx/nginx.conffile che è il file di configurazione principale per Nginx.

Nota anche -è OK se si definisce un BLOCCO SERVER che non lo racchiude direttamente all'interno di un blocco HTTP o HTTPS, in un file situato nel percorso /etc/nginx/conf.d. Inoltre per far funzionare questo sarà necessario includere il percorso di questo file nel file PRIMARY Config come mostrato di seguito: -

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

Inoltre è possibile commentare dal file PRIMARY Config, la riga

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

e non è necessario mantenere alcun file di configurazione /etc/nginx/sites-available/e inoltre non è necessario collegarli SIMBOLICI a /etc/nginx/sites-enabled/, si prega di notare che questo funziona per me - nel caso in cui qualcuno pensi che non sia per loro o questo tipo di configurazione sia illegale ecc. ecc., lascia un commento in modo che posso correggermi - grazie.

EDIT: - Secondo l'ultima versione del libro di cucina ufficiale di Nginx, non abbiamo bisogno di creare alcuna configurazione all'interno - /etc/nginx/sites-enabled/, questa era la pratica più vecchia ed è DEPRECIATA ora.

Quindi non c'è bisogno della DIRETTIVA INCLUDE include /etc/nginx/sites-available/some_file.conf;.

Citazione dalla pagina del CookBook di Nginx - 5.

"In alcuni repository di pacchetti, questa cartella è denominata abilitata per i siti e i file di configurazione sono collegati da una cartella denominata site-available; questa convenzione è deprezzata."


0

Potrebbe esserci solo un errore di battitura ovunque all'interno di un file importato dal file config. Ad esempio, ho fatto un errore di battitura nel profondo del mio file di configurazione:

loccation /sense/movies/ {
                  mp4;
        }

(posizione invece di posizione) e questo causa l'errore:

nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-enabled/xxx.xx:1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.