nginx: [एमआरजी] "सर्वर" निर्देश यहां अनुमति नहीं है


100

मैंने nginx को पुन: कॉन्फ़िगर किया है, लेकिन मैं इसे निम्न कॉन्फ़िगरेशन का उपयोग करके पुनः आरंभ नहीं कर सकता:

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 -tकॉन्फ़िगरेशन का परीक्षण करने के लिए चलने के बाद निम्न त्रुटि वापस आ गई है मैं यह पता नहीं लगा सकता कि वास्तव में समस्या क्या है

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

जवाबों:


178

यह एक nginxकॉन्फ़िगरेशन फ़ाइल नहीं है। यह एक कॉन्फ़िगरेशन फ़ाइल का हिस्सा है nginx

nginxविन्यास फाइल (आमतौर पर कहा जाता है nginx.conf) की तरह दिखाई देगा:

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

serverब्लॉक एक के भीतर संलग्न है httpब्लॉक।

अक्सर कॉन्फ़िगरेशन को includeअतिरिक्त टुकड़ों में खींचने के निर्देशों का उपयोग करके ( sites-enabledनिर्देशिका से उदाहरण के लिए ) कई फ़ाइलों में वितरित किया जाता है ।

sudo nginx -tपूर्ण कॉन्फ़िगरेशन फ़ाइल का परीक्षण करने के लिए उपयोग करें , जो निर्देश nginx.confका उपयोग करके अतिरिक्त टुकड़ों में शुरू होता है और खींचता है includeइस दस्तावेज़ को और देखें ।


यह anwser सही है और इसे सही ढंग से उखाड़ा गया है - im आगे स्पष्ट करने की कोशिश कर रहा है, मेरे जैसे अन्य नॉब्स की मदद कर सकता है। इस प्रकार इस सवाल का जवाब नीचे दिया गया है।
रोहित धनखड़

14

रिवर्स प्रॉक्सी के लिए वैध nginx.conf उदाहरण; मामले में कोई मेरी तरह फंस गया है

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

और आप इसे डॉकटर में भी परोस सकते हैं

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

2

के लिए पथ nginx.confफ़ाइल जो Nginx के लिए प्राथमिक विन्यास फ़ाइल है - जो भी फ़ाइल जो अन्य Nginx कॉन्फ़िग फ़ाइलों के लिए पथ शामिल करेगा और जरूरत पड़ने पर है /etc/nginx/nginx.conf

आप इस फ़ाइल को टर्मिनल पर टाइप करके एक्सेस और एडिट कर सकते हैं

cd /etc/nginx

/etc/nginx$ sudo nano nginx.conf

इस फ़ाइल में आगे आप अन्य फ़ाइलों को शामिल कर सकते हैं - जिसमें एक स्वतंत्र सर्वर के रूप में एक सर्वर निर्देश हो सकता है - जिसे HTTP या HTTPS ब्लॉक में नहीं होना चाहिए, जैसा कि ऊपर दिए गए उत्तर में स्पष्ट किया गया है।

मैं दोहराता हूं - अगर आपको PRIMARY कॉन्फ़िग फ़ाइल में परिभाषित होने के लिए एक SERVER BLOCK की आवश्यकता है, तो उस SERVER BLOCK से उस फ़ाइल में एक संलग्न HTTP या HTTPS ब्लॉक के भीतर परिभाषित किया जाना होगा /etc/nginx/nginx.confजो Nginx के लिए प्राथमिक कॉन्फ़िगरेशन फ़ाइल है।

यह भी नोट करें कि यदि आप परिभाषित करते हैं, तो ठीक-ठीक नोट करें, एक सर्वर ब्लॉक सीधे एक HTTP या HTTPS ब्लॉक के भीतर, रास्ते में स्थित फ़ाइल में संलग्न नहीं है /etc/nginx/conf.d। इस काम को करने के लिए आपको इस फ़ाइल के पथ को प्राथमिक विन्यास फ़ाइल में शामिल करना होगा, जैसा कि नीचे देखा गया है: -

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

इसके आगे आप PRIMARY कॉन्फ़िग फ़ाइल, लाइन से टिप्पणी कर सकते हैं

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

और किसी भी विन्यास फाइल को अंदर रखने की आवश्यकता नहीं है /etc/nginx/sites-available/और उन्हें SYMBOLIC से जोड़ने की भी आवश्यकता नहीं है /etc/nginx/sites-enabled/, कृपया मेरे लिए इस काम पर ध्यान दें - यदि कोई यह सोचता है कि यह उनके लिए नहीं है या इस तरह का विन्यास अवैध है आदि आदि, तो pls एक टिप्पणी छोड़ दें ताकि मैं अपने आप को सही कर सकता हूँ - धन्यवाद

EDIT: - आधिकारिक नग्नेक्स कुकबुक के नवीनतम संस्करण के अनुसार, हमें किसी भी कन्फिग को बनाने की आवश्यकता नहीं है - /etc/nginx/sites-enabled/यह पुराना अभ्यास था और अब इसे अलग कर दिया गया है।

इस प्रकार INCLUDE DIRECTIVE के लिए कोई आवश्यकता नहीं है include /etc/nginx/sites-available/some_file.conf;

नेग्नेक्स कुकबुक पेज का उद्धरण - 5

"कुछ पैकेज रिपॉजिटरी में, इस फ़ोल्डर को साइट्स-इनेबल्ड नाम दिया गया है, और कॉन्फ़िगरेशन फ़ाइलों को साइट-उपलब्ध नाम के एक फ़ोल्डर से जोड़ा जाता है; यह कन्वेंशन depre‐ cated है।"


0

किसी फ़ाइल के अंदर कहीं भी एक टाइपो हो सकता है जो कॉन्फिगर द्वारा आयात किया गया हो। उदाहरण के लिए, मैंने अपनी कॉन्फ़िग फ़ाइल के अंदर एक टाइपो गहरा बनाया है:

loccation /sense/movies/ {
                  mp4;
        }

(स्थान के बजाय स्थान), और यह त्रुटि का कारण बनता है:

nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-enabled/xxx.xx:1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.