nginx: [khẩn cấp] Lệnh "máy chủ" không được phép ở đây


100

Tôi đã định cấu hình lại nginx nhưng không thể khởi động lại nó bằng cách sử dụng cấu hình sau:

tâm sự:

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

sau khi chạy sudo nginx -c conf -tđể kiểm tra cấu hình, lỗi sau được trả về tôi không thể tìm ra vấn đề thực sự là gì

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

Câu trả lời:


177

Đó không phải là một nginxtệp cấu hình. Nó là một phần của nginxtệp cấu hình.

Tệp nginxcấu hình (thường được gọi nginx.conf) sẽ giống như sau:

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

Các serverkhối được bao bọc trong một httpkhối.

Thường thì cấu hình được phân phối trên nhiều tệp, bằng cách sử dụng các includechỉ thị để lấy thêm các đoạn (ví dụ từ sites-enabledthư mục).

Sử dụng sudo nginx -tđể kiểm tra tệp cấu hình hoàn chỉnh, tệp này bắt đầu nginx.confvà kéo các đoạn bổ sung bằng cách sử dụng lệnh include. Xem tài liệu này để biết thêm.


Anwser này là chính xác và đã được ủng hộ một cách xứng đáng - tôi đang cố gắng làm rõ thêm, có thể giúp những người khác như tôi. Do đó đã trả lời câu hỏi này dưới đây.
Rohit Dhankar

13

Ví dụ nginx.conf hợp lệ cho proxy ngược; Trong trường hợp ai đó bị mắc kẹt như tôi

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

và bạn cũng có thể phục vụ nó trong docker

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

2

Đường dẫn đến nginx.conftệp là tệp Cấu hình chính cho Nginx - cũng là tệp sẽ BAO GỒM Đường dẫn cho các tệp Cấu hình Nginx khác khi được yêu cầu /etc/nginx/nginx.conf.

Bạn có thể truy cập và chỉnh sửa tệp này bằng cách nhập tệp này vào thiết bị đầu cuối

cd /etc/nginx

/etc/nginx$ sudo nano nginx.conf

Ngoài ra, trong tệp này, bạn có thể Bao gồm các tệp khác - có thể có chỉ thị SERVER dưới dạng KHỐI MÁY CHỦ độc lập - không cần nằm trong các khối HTTP hoặc HTTPS, như được làm rõ trong câu trả lời được chấp nhận ở trên.

Tôi nhắc lại - nếu bạn cần một KHỐI MÁY CHỦ được xác định trong chính tệp Cấu hình CHÍNH thì KHỐI MÁY CHỦ đó sẽ phải được xác định trong một khối HTTP hoặc HTTPS bao quanh trong /etc/nginx/nginx.conftệp là tệp Cấu hình chính cho Nginx.

Cũng lưu ý rằng - có thể OK nếu bạn xác định, KHỐI MÁY CHỦ trực tiếp không bao bọc nó trong khối HTTP hoặc HTTPS, trong một tệp nằm ở đường dẫn /etc/nginx/conf.d. Ngoài ra, để thực hiện công việc này, bạn sẽ cần bao gồm đường dẫn của tệp này trong tệp Cấu hình CHÍNH như được thấy bên dưới: -

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

Hơn nữa, bạn có thể nhận xét từ tệp Cấu hình CHÍNH, dòng

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

và không cần giữ bất kỳ Tệp cấu hình nào /etc/nginx/sites-available/và cũng không cần phải LIÊN KẾT HỘI CHỨNG chúng với /etc/nginx/sites-enabled/, vui lòng lưu ý rằng điều này phù hợp với tôi - trong trường hợp có ai nghĩ rằng nó không phù hợp với họ hoặc loại cấu hình này là bất hợp pháp, v.v., xin vui lòng để lại nhận xét để tôi có thể tự sửa - cảm ơn.

CHỈNH SỬA: - Theo phiên bản mới nhất của Nginx CookBook chính thức, chúng tôi không cần tạo bất kỳ Cấu hình nào bên trong - /etc/nginx/sites-enabled/, đây là phương pháp cũ hơn và bây giờ KHÔNG ĐƯỢC SỬ DỤNG.

Vì vậy, không cần TRỰC TIẾP BAO GỒM include /etc/nginx/sites-available/some_file.conf;.

Trích dẫn từ trang Nginx CookBook - 5.

"Trong một số kho lưu trữ gói, thư mục này được đặt tên là hỗ trợ trang web và các tệp cấu hình được liên kết từ một thư mục có tên là trang web có sẵn; quy ước này được mô tả."


0

Có thể chỉ có lỗi đánh máy ở bất kỳ đâu bên trong tệp được cấu hình nhập vào. Ví dụ: tôi đã mắc lỗi đánh máy sâu bên trong tệp cấu hình của mình:

loccation /sense/movies/ {
                  mp4;
        }

(loccation thay vì location), và điều này gây ra lỗi:

nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-enabled/xxx.xx:1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.