我是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是父指令。我做错了什么?
答案 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
文件。 (upstream
和server
伪指令未包含在此文件中的任何内容中)
/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
。