Nginx: [ emerg ]“ http”指令不允许出现在/etc/nginx/sites- 启用/默认值: 1中

我是新的 NGINX 和我试图设置最小的工作事项。因此,我尝试用 nginx 和 monitor (通过 这个示例)运行 aiohttp mini-app。但是我无法正确配置 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 是父指令。我做错了什么?

94200 次浏览

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

那么你已经做到了

 http
http
server

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

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

你可以插入一个应该在 http{}区段内的部分到你的 Nginx.conf区段,在 /etc/nginx/sites-available/default区段只留下 server{}区段。

我也有过类似的问题。我需要包括 upstream指令,但我不能触摸的 /etc/nginx/nginx.conf文件中的 http指令定义。我唯一能做的就是替换 /etc/nginx/conf.d/default.conf(云/库伯内特自动化的东西...)

解决方案非常简单,但由于它可能不是显而易见的(对我来说不是) ,这里是如何编写您的 /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;
...
}
}