nginx: [появляется] Директива http не разрешена здесь в /etc/nginx/sites-enabled/default: 1
Я новичок в NGINX, и я пытаюсь настроить минимальную работу. Поэтому я пытаюсь запустить мини-приложение aiohttp с nginx и supervisor (в этом примере). Но я не могу правильно настроить 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 - родительская директива. Что я делаю неправильно?
Ответы
Ответ 1
Я предполагаю, что у вас есть http
в вашем файле /etc/nginx/nginx.conf, который затем сообщает nginx include sites-enabled/*;
Итак, у вас есть
http
http
server
Поскольку директива http должна произойти только однажды, просто удалите директиву http из файлов конфигурации с поддержкой сайтов.
Ответ 2
Вы можете вставить часть, которая должна находиться в разделе http{}
в ваш nginx.conf и в /etc/nginx/sites-available/default
оставить только server{}
.
Ответ 3
Таким образом, на самом деле проблема была во втором ключевом слове server
. Я использовал пример из aiohttp docs и выглядит так, как будто они ошибочно ссылаются на "server example.com" вместо server_name example.com
.