nginx: [acil] "sunucu" yönergesine burada izin verilmez


113

Nginx'i yeniden yapılandırdım ancak aşağıdaki yapılandırmayı kullanarak yeniden başlatamıyorum:

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

sudo nginx -c conf -tYapılandırmayı test etmek için çalıştırdıktan sonra aşağıdaki hata döndürüldü, sorunun gerçekten ne olduğunu anlayamıyorum

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

Yanıtlar:


198

Bu bir nginxyapılandırma dosyası değil . Öyle parçası bir bir nginxyapılandırma dosyası.

nginx(Genellikle adı verilen bir yapılandırma dosyası nginx.conf) gibi görünecektir:

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

serverBlok, içinde kapalı olan httpblok.

Genellikle yapılandırma, includeek parçaları (örneğin sites-enableddizinden) çekmek için yönergeler kullanılarak birden çok dosyaya dağıtılır .

Yönergeyi kullanarak ek parçalarda sudo nginx -tbaşlayan nginx.confve bunları çeken tam yapılandırma dosyasını test etmek için kullanın include. Daha fazlası için bu belgeye bakın .


Bu cevaplayıcı doğru ve haklı olarak oy verildi - daha fazla açıklığa kavuşturmaya çalışıyorum, benim gibi diğer noob'lara yardımcı olabilir. Böylece aşağıdaki soruyu yanıtlamış oldunuz.
Rohit Dhankar

15

Örnek ters proxy için geçerli nginx.conf; Birinin benim gibi sıkışması durumunda. nerede 10.x.x.xsen nginx proxy sunucusu çalıştıran ve hangi tarayıcının ile bağlanıyorsanız sunucusudur ve 10.y.y.ygerçek bir web sunucusu çalışıyor nerede

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

SSL geçişi yapmak istiyorsanız, burada pasaj. Yani 10.y.y.ybir HTTPS web sunucusu çalıştırılıyorsa. Burada 10.x.x.xveya nignx'in çalıştığı yerde 443 numaralı bağlantı noktasını dinliyor ve 443'e giden tüm trafik hedef web sunucunuza yönlendiriliyor

events {
  worker_connections  4096;  ## Default: 1024
}

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

ve bunu docker'da da sunabilirsiniz

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

7

nginx.confNginx için birincil Konfigürasyon dosyası olan dosyanın yolu - bu aynı zamanda diğer Nginx Konfigürasyon dosyalarının Yolunu gerektiği gibi ve gerektiğinde İÇERECEK olan dosyadır /etc/nginx/nginx.conf.

Bu dosyaya terminalde yazarak erişebilir ve düzenleyebilirsiniz.

cd /etc/nginx

/etc/nginx$ sudo nano nginx.conf

Ayrıca bu dosyaya, yukarıdaki kabul edilen yanıtta açıklandığı gibi, HTTP veya HTTPS blokları içinde olması gerekmeyen, bağımsız bir SERVER BLOCK olarak bir SERVER yönergesine sahip olabilen diğer dosyaları da dahil edebilirsiniz.

Tekrar ediyorum - PRIMARY Config dosyasında tanımlanacak bir SUNUCU BLOKUNA ihtiyacınız varsa, bu SUNUCU BLOĞU, /etc/nginx/nginx.conf BLOĞU Nginx için birincil Yapılandırma dosyası olan dosyadaki .

Ayrıca, bir SUNUCU BLOKUNU doğrudan bir HTTP veya HTTPS bloğunun içine, yolda bulunan bir dosyaya dahil etmeyen bir SUNUCU BLOĞU tanımlarsanız, Tamam'a dikkat edin /etc/nginx/conf.d. Ayrıca bunun çalışması için bu dosyanın yolunu PRIMARY Config dosyasına aşağıda görüldüğü gibi eklemeniz gerekir: -

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

Buna ek olarak, PRIMARY Config dosyasından yorum yapabilirsiniz.

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

ve herhangi bir Yapılandırma Dosyasını saklamanıza /etc/nginx/sites-available/ve ayrıca bunları SEMBOLİK'e bağlamanıza gerek yoktur./etc/nginx/sites-enabled/ , lütfen bunun benim için işe yaradığını unutmayın - herhangi birinin kendileri için olmadığını düşünmesi veya bu tür bir yapılandırmanın yasadışı olması vb. durumunda, lütfen bir yorum bırakın, böylece kendimi düzeltebilirim - teşekkürler.

DÜZENLEME: - Resmi Nginx CookBook'un en son sürümüne göre, içinde herhangi bir Yapılandırma oluşturmamıza gerek yoktur - /etc/nginx/sites-enabled/bu eski uygulamaydı ve şimdi KULLANIMDAN KALDIRILMIŞTIR.

Böylece DAHİL ETME YÖNERGESİNE gerek yoktur include /etc/nginx/sites-available/some_file.conf;.

Nginx CookBook sayfasından alıntı - 5.

"Bazı paket depolarında, bu klasöre siteler etkin olarak adlandırılır ve yapılandırma dosyalarına site-available adlı bir klasörden bağlantı verilir; bu kural geçersizdir."


3

Yapılandırma tarafından içe aktarılan bir dosyanın herhangi bir yerinde yalnızca bir yazım hatası olabilir. Örneğin, yapılandırma dosyamın derinliklerinde bir yazım hatası yaptım:

loccation /sense/movies/ {
                  mp4;
        }

(konum yerine konum) ve bu, hataya neden olur:

nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-enabled/xxx.xx:1
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.