nginx:这里不允许[emerg]“server”指令

时间:2017-01-20 14:41:34

标签: nginx

我已经重新配置了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

4 个答案:

答案 0 :(得分:107)

这不是nginx配置文件。它是nginx配置文件的部分

nginx配置文件(通常称为nginx.conf)如下所示:

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

server块包含在http块中。

配置通常分布在多个文件中,方法是使用include指令引入其他片段(例如从sites-enabled目录中提取)。

使用sudo nginx -t测试完整的配置文件,该文件从nginx.conf开始,并使用include指令引入其他片段。有关详情,请参阅this document

答案 1 :(得分:2)

示例有效的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中提供它

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

答案 2 :(得分:0)

nginx.conf文件的路径,该文件是Nginx的主要配置文件-也是必要时,该文件应包含其他Nginx Config文件的路径,/etc/nginx/nginx.conf

您可以通过在终端上键入此文件来访问和编辑该文件

cd /etc/nginx

/etc/nginx$ sudo nano nginx.conf

在此文件中,您还可以包括其他文件-可以具有SERVER指令作为独立的SERVER BLOCK-不必在HTTP或HTTPS块内,如上面接受的答案所阐明的。

我重复一遍-如果您需要在PRIMARY Config文件本身中定义一个SERVER BLOCK,则必须在/etc/nginx/nginx.conf文件中作为主要配置的封闭HTTP或HTTPS块中定义该SERVER BLOCK。 Nginx的文件。

还请注意-如果定义,则可以确定,服务器块直接不将其包含在位于路径/etc/nginx/conf.d的文件中的HTTP或HTTPS块内。另外,要使此工作有效,您将需要在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/,请注意,这对我有用-以防有人认为它不适合他们或此类配置是非法的等,请留下评论,这样我可以纠正自己-谢谢。

编辑:-根据最新版的Nginx官方Cookbook,我们无需在-/etc/nginx/sites-enabled/中创建任何配置,这是较旧的做法,现已弃用。

因此不需要INCLUDE DIRECTIVE include /etc/nginx/sites-available/some_file.conf;

来自Nginx CookBook页面的报价-5。

  

“在某些程序包存储库中,此文件夹被命名为启用站点的,并且   配置文件从名为site-available的文件夹链接;   不赞成使用此约定。”

答案 3 :(得分:0)

在配置导入的文件内的任何地方都可能有错字。例如,我在配置文件中做了一个错字:

loccation /sense/movies/ {
                  mp4;
        }

(位置而不是位置),这会导致错误:

nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-enabled/xxx.xx:1