nginx:[emerg]“http”指令在/ etc / nginx / sites-enabled / default中不允许:1

时间:2017-04-26 20:21:39

标签: nginx

我是NGINX的新手,我正在尝试设置最小的工作量。所以我尝试使用nginx和supervisor运行aiohttp mini-app(通过this示例)。但我无法正确配置Nginx并收到以下错误:

nginx: [emerg] "http" directive is not allowed here in /etc/nginx/sites-enabled/default:1

这是完整的default.conf文件:

http {
  upstream aiohttp {
    # Unix domain servers
    server unix:/tmp/example_1.sock fail_timeout=0;
    server unix:/tmp/example_2.sock fail_timeout=0;
    server unix:/tmp/example_3.sock fail_timeout=0;
    server unix:/tmp/example_4.sock fail_timeout=0;
  }

  server {
    listen 80;
    client_max_body_size 4G;

    server example.com;

    location / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_redirect off;
      proxy_buffering off;
      proxy_pass http://aiohttp;
    }
  }

}

看起来很正确。 server指令应该在http中。 http是父指令。我做错了什么?

4 个答案:

答案 0 :(得分:31)

我假设你的/etc/nginx/nginx.conf文件中有http,然后告诉nginx include sites-enabled/*;

那么你有

 http
    http
       server

由于http指令应该只发生一次,只需从启用站点的配置文件中删除http指令

答案 1 :(得分:9)

您可以将http{}部分内的部分插入 nginx.conf ,然后/etc/nginx/sites-available/default只留下server{}部分。

答案 2 :(得分:1)

我一直有类似的问题。我需要包含upstream指令,但是无法触摸定义了/etc/nginx/nginx.conf指令的http文件。我唯一能做的就是更换/etc/nginx/conf.d/default.conf(云/ kubernetes自动化工具...)

解决方案非常简单,但是由于它可能并不明显(对我而言不是),因此,如果需要包含/etc/nginx/conf.d/default.conf规范,可以通过以下方法编写upstream文件。 (upstreamserver伪指令未包含在此文件中的任何内容中)

/etc/nginx/conf.d/default.conf

upstream api {
    server ...;
}

server {
    listen              80;
    server_name         example.com;
    ...

    location / {
        proxy_pass      http://api;
        ...
    }
}

答案 3 :(得分:0)

所以,实际上问题出现在第二个server关键字中。我使用了aiohttp文档中的一个示例,看起来他们输错了" server example.com"而不是server_name example.com