nginx: [emerg] Директива "сервер" тут не дозволена


100

Я переконфігурував nginx, але не можу перезапустити його за допомогою такої конфігурації:

конф:

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директиви. Докладніше дивіться цей документ .


Цей вісник правильний і був справедливо підтверджений - я, намагаючись уточнити далі, може допомогти іншим ноббі, як я. Таким чином, відповіли на це питання нижче.
Рохіт Данкар

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 Config, як і коли потрібно /etc/nginx/nginx.conf.

Ви можете отримати доступ до цього файла та відредагувати його, ввівши його в терміналі

cd /etc/nginx

/etc/nginx$ sudo nano nginx.conf

Далі в цей файл ви можете включити інші файли - які можуть мати директиву SERVER як самостійний БЛОК СЕРВЕРА - які не обов’язково повинні бути в межах блоків HTTP або HTTPS, як це пояснюється у прийнятій відповіді вище.

Я повторюю - якщо вам потрібен SERVER BLOCK, який буде визначений у самому файлі PRIMARY Config, ніж цей SERVER BLOCK повинен бути визначений у блоці HTTP або HTTPS, що вкладається у /etc/nginx/nginx.confфайл, який є основним файлом конфігурації для Nginx.

Також зауважте, що це нормально, якщо ви визначите, що БЛОК СЕРВЕРА безпосередньо не включає його в блок 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
}

і не потрібно зберігати файли Config, /etc/nginx/sites-available/а також не потрібно SYMBOLIC Посилати їх на /etc/nginx/sites-enabled/, будь ласка, зверніть увагу, що це працює для мене - якщо хтось вважає, що це не для них, або такий тип конфігурації є незаконним і т. д., pls залишайте коментар, щоб я можу виправити себе - спасибі.

РЕДАГУВАТИ: - Згідно з останньою версією Офіційного Nginx CookBook, нам не потрібно створювати жодні налаштування всередині - /etc/nginx/sites-enabled/, це була давня практика і ВІДМОВЛЕНО зараз.

Таким чином, немає потреби в ВКЛЮЧЕННІ ДИРЕКТИВІ include /etc/nginx/sites-available/some_file.conf;.

Цитата зі сторінки Nginx CookBook - 5.

"У деяких сховищах пакунків ця папка має ім'я сайти з підтримкою сайтів, а файли конфігурації пов'язані з папки з іменем site-available; ця умова застаріла."


0

Тут може бути просто помилка друку у файлі, імпортованому конфігурацією. Наприклад, я зробив друкарську помилку глибоко всередині свого конфігураційного файлу:

loccation /sense/movies/ {
                  mp4;
        }

(локація замість розташування), і це спричиняє помилку:

nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-enabled/xxx.xx:1
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.