nginx:[emerg]「server」ディレクティブはここでは許可されていません


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

回答:


177

これはnginx構成ファイルではありません。これは、ある一部nginx設定ファイル。

nginx(通常と呼ばれる設定ファイルはnginx.conf)次のようになります。

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

serverブロック内に封入されているhttpブロック。

多くの場合、includeディレクティブを使用して追加のフラグメントを(たとえばsites-enabledディレクトリから)プルすることにより、構成は複数のファイルに分散されます。

を使用sudo nginx -tnginx.confて、includeディレクティブを使用して追加のフラグメントから開始してプルする完全な構成ファイルをテストします。詳細については、このドキュメントを参照してください。


このanwserは正しく、正しく賛成されています-私はさらに明確にすることを試みていますが、私のような他の初心者を助けるかもしれません。したがって、以下のこの質問に答えています。
Rohit Dhankar、

13

リバースプロキシの有効な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.confNginxのプライマリ構成ファイルであるファイルへのパス-これは、必要に応じて、他のNginx構成ファイルのパスを含めるファイルでもあります/etc/nginx/nginx.conf

端末でこれを入力して、このファイルにアクセスして編集できます

cd /etc/nginx

/etc/nginx$ sudo nano nginx.conf

さらにこのファイルには、他のファイルを含めることができます-独立したSERVER BLOCKとしてSERVERディレクティブを持つことができます-上記の受け入れられた回答で明らかにされているように、HTTPまたはHTTPSブロック内にある必要はありません。

繰り返しますが、PRIMARY Configファイル自体の中でサーバーブロックを定義する必要がある場合、そのサーバーブロック/etc/nginx/nginx.confは、Nginxのプライマリ構成ファイルであるファイル内のHTTPまたはHTTPSブロック内で定義する必要があります。

また、-OKを定義した場合、SERVER BLOCKは、パスにあるファイル内のHTTPまたはHTTPSブロック内に直接含まないことに注意してください/etc/nginx/conf.d。また、これを機能させるには、以下に示すように、このファイルのパスをPRIMARY Configファイルに含める必要があります。

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

さらに、PRIMARY Configファイルから次の行をコメントアウトできます。

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がコメントを残すので、私は自分を正すかもしれません-ありがとう。

編集:-公式Nginxクックブックの最新バージョンによると、-内に構成を作成する必要はありません/etc/nginx/sites-enabled/。これは古いプラクティスであり、現在は廃止されています。

したがって、INCLUDEディレクティブは必要ありません include /etc/nginx/sites-available/some_file.conf;

Nginx CookBookページからの引用-5。

「一部のパッケージリポジトリでは、このフォルダーの名前はsite-enabledであり、構成ファイルはsite-availableという名前のフォルダーからリンクされています。この規則は非推奨です。」


0

設定によってインポートされたファイル内のどこかにタイプミスがあるだけかもしれません。たとえば、設定ファイルの奥深くにタイプミスを作りました。

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.