nginx: [emerg] директива "server" здесь запрещена
Я переконфигурировал nginx, но я не могу его перезапустить, используя следующую конфигурацию:
конф:
server {
listen 80;
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location /robots.txt {
alias /path/to/robots.txt;
access_log off;
log_not_found off;
}
location = /favicon.ico { access_log off; log_not_found off; }
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_read_timeout 30;
proxy_pass http://127.0.0.1:8000;
}
location /static {
expires 1M;
alias /path/to/staticfiles;
}
}
после запуска sudo nginx -c conf -t
чтобы проверить конфигурацию, возвращается следующая ошибка, я не могу понять, в чем действительно проблема
nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-available/config:1
nginx: configuration file /etc/nginx/sites-available/config test failed
Ответы
Ответ 1
Это не файл конфигурации nginx
. Он является частью файла конфигурации nginx
.
Файл конфигурации nginx
(обычно называемый nginx.conf
) будет выглядеть так:
events {
...
}
http {
...
server {
...
}
}
server
блок заключен в блок http
.
Часто конфигурация распределяется между несколькими файлами, используя директивы include
чтобы извлекать дополнительные фрагменты (например, из каталога с sites-enabled
).
Используйте sudo nginx -t
чтобы проверить полный файл конфигурации, который начинается с nginx.conf
и извлекает дополнительные фрагменты с помощью директивы include
. См. Этот документ для получения дополнительной информации.
Ответ 2
Пример действительного nginx.conf для обратного прокси; В случае, если кто-то застрянет как я
events {
worker_connections 4096; ## Default: 1024
}
http {
server {
listen 80;
listen [::]:80;
server_name 10.x.x.x;
location / {
proxy_pass http://10.y.y.y:80/;
proxy_set_header Host $host;
}
}
}
и ты тоже можешь подавать его в докер
docker run --name nginx-container --rm --net=host -v /home/core/nginx/nginx.conf:/etc/nginx/nginx.conf nginx
Ответ 3
Путь к файлу nginx.conf
, который является основным файлом конфигурации для Nginx, который также должен включать Путь для других файлов конфигурации Nginx, как и когда требуется, /etc/nginx/nginx.conf
.
Вы можете открыть и отредактировать этот файл, набрав его в терминале
cd /etc/nginx
/etc/nginx$ sudo nano nginx.conf
Далее в этот файл вы можете включить другие файлы - которые могут иметь директиву SERVER в качестве независимого блока SERVER - которые не обязательно должны находиться в блоках HTTP или HTTPS, как поясняется в принятом ответе выше.
Я повторяю - если вам нужно, чтобы БЛОК СЕРВЕРА определялся в самом файле PRIMARY Config, то этот БЛОК СЕРВЕРА должен быть определен во включающем блоке HTTP или HTTPS в файле /etc/nginx/nginx.conf
, который является основным файлом конфигурации для Nginx.
Также обратите внимание на -its OK, если вы определите, БЛОК СЕРВЕРА, непосредственно не заключающий его в блок HTTP или HTTPS, в файл, расположенный по пути /etc/nginx/conf.d
. Также, чтобы это работало, вам нужно будет включить путь к этому файлу в файл PRIMARY Config, как показано ниже: -
http{
include /etc/nginx/conf.d/*.conf; #includes all files of file type.conf
}
В дополнение к этому вы можете закомментировать из файла PRIMARY Config строку
http{
#include /etc/nginx/sites-available/some_file.conf; # Comment Out
include /etc/nginx/conf.d/*.conf; #includes all files of file type.conf
}
и не нужно хранить какие-либо файлы конфигурации в /etc/nginx/sites-available/
, а также не нужно СИМВОЛИЧЕСКОЕ связывать их с /etc/nginx/sites-enabled/
, учтите, что это работает для меня - на случай, если кто-то сочтет, что это не подходит для них, или этот тип конфигурации является незаконным и т.д. и т.д., пожалуйста, оставьте комментарий, чтобы я мог исправить себя - спасибо.