nginx: [emerg] “server” direktif tidak diperbolehkan di sini


104

Saya telah mengkonfigurasi ulang nginx tetapi saya tidak bisa membuatnya restart menggunakan konfigurasi berikut:

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

setelah menjalankan sudo nginx -c conf -tuntuk menguji konfigurasi kesalahan berikut dikembalikan saya tidak tahu apa sebenarnya masalahnya

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

Jawaban:


186

Itu bukan nginxfile konfigurasi. Ini adalah bagian dari nginxfile konfigurasi.

File nginxkonfigurasi (biasanya disebut nginx.conf) akan terlihat seperti:

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

The serverblok tertutup dalam sebuah httpblok.

Seringkali konfigurasi didistribusikan ke beberapa file, dengan menggunakan includearahan untuk menarik fragmen tambahan (misalnya dari sites-enableddirektori).

Gunakan sudo nginx -tuntuk menguji file konfigurasi lengkap, yang dimulai pada nginx.confdan menarik fragmen tambahan menggunakan includeperintah. Lihat dokumen ini untuk lebih lanjut.


Jawaban ini benar dan telah dipilih dengan benar - saya mencoba menjelaskan lebih lanjut, semoga membantu noob lain seperti saya. Dengan demikian telah menjawab pertanyaan di bawah ini.
Rohit Dhankar

14

Contoh nginx.conf yang valid untuk reverse proxy; Jika seseorang terjebak seperti saya. di mana 10.x.x.xserver tempat Anda menjalankan server proxy nginx dan yang Anda sambungkan dengan browser, dan di 10.y.y.ymana server web Anda yang sebenarnya berjalan

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

Berikut ini potongannya jika Anda ingin melakukan pass SSL. Itu jika 10.y.y.ymenjalankan webserver HTTPS. Di sini 10.x.x.x, atau di mana nignx berjalan mendengarkan port 443, dan semua lalu lintas ke 443 diarahkan ke server web target Anda

events {
  worker_connections  4096;  ## Default: 1024
}

stream {
  server {
    listen     443;
    proxy_pass 10.y.y.y:443;
  }
}

dan Anda bisa menyajikannya di buruh pelabuhan juga

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

2

Path ke nginx.conffile yang merupakan file Konfigurasi utama untuk Nginx - yang juga merupakan file yang akan TERMASUK Path untuk file Nginx Config lainnya jika diperlukan /etc/nginx/nginx.conf.

Anda dapat mengakses dan mengedit file ini dengan mengetik ini di terminal

cd /etc/nginx

/etc/nginx$ sudo nano nginx.conf

Lebih lanjut dalam file ini Anda dapat menyertakan file lain - yang dapat memiliki direktif SERVER sebagai SERVER BLOCK independen - yang tidak perlu berada dalam blok HTTP atau HTTPS, seperti yang dijelaskan dalam jawaban yang diterima di atas.

Saya ulangi - jika Anda memerlukan SERVER BLOCK untuk didefinisikan dalam file PRIMARY Config itu sendiri daripada SERVER BLOCK harus didefinisikan dalam blok HTTP atau HTTPS yang melingkupi /etc/nginx/nginx.conffile yang merupakan file Konfigurasi utama untuk Nginx.

Juga catat -itu OK jika Anda mendefinisikan, SERVER BLOCK secara langsung tidak menyertakannya dalam blok HTTP atau HTTPS, dalam file yang terletak di jalur /etc/nginx/conf.d. Juga untuk membuat ini bekerja, Anda perlu memasukkan path dari file ini ke file PRIMARY Config seperti yang terlihat di bawah ini: -

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

Selanjutnya Anda dapat berkomentar dari file PRIMARY Config, baris

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

dan tidak perlu menyimpan File Config apa pun /etc/nginx/sites-available/dan juga tidak perlu SIMBOLIS Tautkan ke /etc/nginx/sites-enabled/, mohon perhatikan ini berfungsi untuk saya - jika ada yang berpikir itu tidak untuk mereka atau konfigurasi semacam ini ilegal dll dll, tolong tinggalkan komentar sehingga saya dapat mengoreksi diri sendiri - terima kasih.

EDIT: - Menurut versi terbaru dari Nginx CookBook Resmi, kita tidak perlu membuat Konfigurasi apa pun di dalamnya - /etc/nginx/sites-enabled/, ini adalah praktik yang lebih lama dan sekarang sudah TIDAK DIGUNAKAN LAGI .

Jadi Tidak perlu INCLUDE DIRECTIVE include /etc/nginx/sites-available/some_file.conf;.

Kutipan dari halaman Buku Cook Nginx - 5.

"Di beberapa repositori paket, folder ini bernama sites-enabled, dan file konfigurasi ditautkan dari folder bernama site-available; konvensi ini dihentikan."


0

Mungkin hanya ada kesalahan ketik di mana saja di dalam file yang diimpor oleh konfigurasi. Misalnya, saya membuat kesalahan ketik jauh di dalam file konfigurasi saya:

loccation /sense/movies/ {
                  mp4;
        }

(loccation bukannya location), dan ini menyebabkan error:

nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-enabled/xxx.xx:1
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.