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

匿名 (未验证) 提交于 2019-12-03 02:56:01

问题:

I'm new to NGINX and I'm trying to setup minimal working thing. So I trying to run aiohttp mini-app with nginx and supervisor (by this example). But I can't configure Nginx right and getting the following error:

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

Here is full default.conf file:

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;     }   }  } 

It looks correct. server directive is in http as it should be. And http is parent directive. What I'm doing wrong?

回答1:

I am assuming that you have http in your /etc/nginx/nginx.conf file which then tells nginx to include sites-enabled/*;

So then you have

 http     http        server 

As the http directive should only happen once just remove the http directive from your sites-enabled config file(s)



回答2:

You may insert a part which should be inside http{} section into your nginx.conf and in /etc/nginx/sites-available/default leave just server{} section.



回答3:

So, actually the problem was in the second server keyword. I used an example from aiohttp docs, and looks like they mistyped with "server example.com" instead of server_name example.com.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!