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

답변:


178

이것은 nginx구성 파일 이 아닙니다 . 그것은이다 부분nginx구성 파일.

nginx(보통라는 구성 파일 nginx.conf)과 같이 표시됩니다

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

server블록은 내에 봉입 http블록.

종종 구성은 include지시문을 사용하여 추가 프래그먼트 (예 : sites-enabled디렉토리에서) 를 가져옴 으로써 여러 파일에 분산 됩니다.

사용 sudo nginx -t에서 시작하는 전체 구성 파일, 테스트 nginx.conf사용하여 추가 조각과 당긴를 include지시합니다. 자세한 내용은 이 문서 를 참조하십시오 .


이 anwser는 정확하고 정당하게 찬성되었습니다-im은 더 명확하게하려고 노력하고 있으며, 저와 같은 다른 멍청이를 도울 수 있습니다. 따라서 아래이 질문에 대답했습니다.
Rohit Dhankar

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 블록 내에있을 필요가없는 다른 파일 (독립 SERVER BLOCK으로 SERVER 지시문을 가질 수 있음)을 포함 할 수 있습니다.

반복합니다-PRIMARY Config 파일 자체에 SERVER BLOCK을 정의해야하는 경우 SERVER BLOCK은 /etc/nginx/nginx.confNginx의 기본 구성 파일 인 파일에 포함 된 HTTP 또는 HTTPS 블록 내에 정의해야합니다 .

또한 경로에있는 파일에서 HTTP 또는 HTTPS 블록 내에서 직접 둘러싸 지 않는 SERVER BLOCK을 정의하면 괜찮습니다 /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 Link도 필요하지 않습니다 /etc/nginx/sites-enabled/. 친절하게도 이것이 저에게 효과적이라는 점에 유의하십시오. 나 자신을 바로 잡을 수 있습니다. 감사합니다.

편집 :-공식 Nginx CookBook의 최신 버전에 따르면, 우리는 어떤 구성을 만들 필요가 없습니다.- /etc/nginx/sites-enabled/이것은 오래된 관행이었고 지금은 폐기되었습니다.

따라서 INCLUDE 지시문이 필요하지 않습니다 include /etc/nginx/sites-available/some_file.conf;.

Nginx CookBook 페이지에서 인용-5.

"일부 패키지 리포지토리에서이 폴더의 이름은 sites-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.