nginx: [emerg] "সার্ভার" নির্দেশনা এখানে অনুমোদিত নয়


108

আমি এনগিনেক্স পুনরায় কনফিগার করেছি তবে নীচের কনফিগারেশনটি ব্যবহার করে এটি পুনরায় চালু করতে পারি না:

কনফ:

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

উত্তর:


194

এটি কোনও nginxকনফিগারেশন ফাইল নয়। এটি একটি কনফিগারেশন ফাইলের অংশnginx

nginxকনফিগারেশন ফাইল (সাধারণত বলা nginx.conf) -এর মত দেখতে হবে:

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

serverব্লক একটি মধ্যে এইসঙ্গে হয় httpব্লক।

প্রায়শই কনফিগারেশনটি includeঅতিরিক্ত টুকরো টানতে নির্দেশিকা ব্যবহার করে (উদাহরণস্বরূপ sites-enabledডিরেক্টরি থেকে ) একাধিক ফাইল জুড়ে বিতরণ করা হয় ।

ব্যবহার করুন sudo nginx -tসম্পূর্ণ কনফিগারেশন ফাইল, যা শুরু হয় পরীক্ষা করার জন্য nginx.confব্যবহার অতিরিক্ত টুকরা এবং টানাপড়েনে includeনির্দেশ। আরও জন্য এই নথিটি দেখুন।


এই আনসারটি সঠিক এবং যথাযথভাবে উপস্থাপিত হয়েছে - আমি আরও স্পষ্ট করে বলার চেষ্টা করছি, আমার মতো অন্যান্য নুবগুলিকে সহায়তা করতে পারে। এইভাবে নীচে এই প্রশ্নের উত্তর দিয়েছেন।
রোহিত karঙ্কর

15

বিপরীত প্রক্সি জন্য বৈধ nginx.conf উদাহরণ; যদি কেউ আমার মতো আটকে থাকে। যেখানে 10.x.x.xসার্ভার যেখানে আপনি nginx প্রক্সি সার্ভার দৌড়াচ্ছে এবং যা আপনার ব্রাউজারের সাথে সাথে সংযোগ করা হয়, এবং 10.y.y.yযেখানে আপনার আসল ওয়েব সার্ভার চলছে

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

আপনি এসএসএল দিয়ে যেতে চাইলে স্নিপেটটি এখানে। এটি যদি 10.y.y.yএইচটিটিপিএস ওয়েব সার্ভারটি চালাচ্ছে। এখানে 10.x.x.xবা যেখানে nignx চালিত হয় 443 পোর্ট শুনছে, এবং 443-তে সমস্ত ট্র্যাফিক আপনার টার্গেট ওয়েব সার্ভারের দিকে পরিচালিত হবে

events {
  worker_connections  4096;  ## Default: 1024
}

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

এবং আপনি এটি ডকারেও পরিবেশন করতে পারেন

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

4

যে nginx.confফাইলটি এনগিনেক্সের জন্য প্রাথমিক কনফিগারেশন ফাইল - সেই ফাইলের পাথ যা অন্য এনগিনেক্স কনফিগারেশন ফাইলগুলির জন্য প্রয়োজন হিসাবে যখন পাথটি অন্তর্ভুক্ত করবে /etc/nginx/nginx.conf

আপনি টার্মিনাল এ টাইপ করে এই ফাইল অ্যাক্সেস এবং সম্পাদনা করতে পারেন

cd /etc/nginx

/etc/nginx$ sudo nano nginx.conf

এই ফাইলটিতে আরও আপনি অন্য ফাইলগুলি অন্তর্ভুক্ত করতে পারেন - যার একটি স্বতন্ত্র সার্ভার ব্লক হিসাবে সার্ভারের নির্দেশনা থাকতে পারে - যা HTTP বা HTTPS ব্লকের মধ্যে থাকা উচিত নয়, যেমন উপরের স্বীকৃত উত্তরে বর্ণিত হয়েছে।

আমি পুনরায় বলছি - আপনি যদি সার্ভার ব্লকটি /etc/nginx/nginx.confপ্রাইমারি কনফিগারেশন ফাইলের মধ্যেই সংজ্ঞায়িত করতে চান তবে সার্ভারের ব্লকটি ফাইলের একটি এনক্লিজিং এইচটিটিপি বা এইচটিটিপিএস ব্লকের মধ্যে সংজ্ঞায়িত করতে হবে যা এনজিনেক্সের জন্য প্রাথমিক কনফিগারেশন ফাইল।

এছাড়াও -its ঠিক আছে মনে রাখবেন যদি আপনি সংজ্ঞায়িত, একটি সার্ভার ব্লক সরাসরি একটি HTTP বা HTTPS দ্বারা ব্লকের মধ্যে এটি পরিক্ষেপ না পথ এ অবস্থিত একটি ফাইলে, /etc/nginx/conf.d। এছাড়াও এই কাজটি করার জন্য আপনাকে নীচের মত নীচের মত প্রাথমিক কনফিগারেশন ফাইলে এই ফাইলটির পথ অন্তর্ভুক্ত করতে হবে: -

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

এর বাইরে আপনি লাইনটি প্রাথমিক কনফিগারেশন ফাইল থেকে মন্তব্য করতে পারেন

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/কোনও কনফিগার ফাইল রাখার দরকার নেই এবং তাদের সাথে সিবিলিক লিঙ্ক করারও প্রয়োজন নেই /etc/nginx/sites-enabled/, দয়া করে নোট করুন এটি আমার জন্য কাজ করে - যদি কেউ মনে করে যে এটি তাদের জন্য না করে বা এই ধরণের কনফিগারেশন অবৈধ ইত্যাদি ইত্যাদি, তবে পিএলএস একটি মন্তব্য রাখবেন যাতে আমি নিজেকে সংশোধন করতে পারি - ধন্যবাদ

সম্পাদনা: - অফিসিয়াল এনগিনেক্স কুকবুকের সর্বশেষ সংস্করণ অনুসারে আমাদের মধ্যে কোনও কনফিগ তৈরি করার দরকার নেই - /etc/nginx/sites-enabled/এটি ছিল প্রাচীনতম অনুশীলন এবং এখন অবহেলিত।

সুতরাং ইনক্লুড ডাইরেক্টিভের প্রয়োজন নেই include /etc/nginx/sites-available/some_file.conf;

এনগিনেক্স কুকবুক পৃষ্ঠা থেকে উদ্ধৃতি - 5।

"কিছু প্যাকেজ সংগ্রহস্থলগুলিতে এই ফোল্ডারটির নাম দেওয়া হয়েছে সাইট-সক্ষম, এবং কনফিগারেশন ফাইলগুলি সাইট-উপলভ্য নামে একটি ফোল্ডার থেকে লিঙ্ক করা হয়েছে; এই সম্মেলনটি অবচয়যুক্ত।"


3

কনফিগার দ্বারা আমদানি করা কোনও ফাইলের অভ্যন্তরে কেবলমাত্র একটি টাইপো থাকতে পারে। উদাহরণস্বরূপ, আমি আমার কনফিগারেশন ফাইলের ভিতরে একটি টাইপো তৈরি করেছি:

loccation /sense/movies/ {
                  mp4;
        }

(অবস্থানের পরিবর্তে লোকেশন), এবং এর ফলে ত্রুটি ঘটে:

nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-enabled/xxx.xx:1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.