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
269483 次浏览

这不是 nginx配置文件,而是 nginx配置文件的 一部分

nginx配置文件(通常称为 nginx.conf)的外观如下:

events {
...
}
http {
...
server {
...
}
}

server块包含在 http块中。

配置通常分布在多个文件中,使用 include指令引入其他片段(例如从 sites-enabled目录)。

使用 sudo nginx -t测试完整的配置文件,该文件从 nginx.conf开始,并使用 include指令拉入其他片段。有关更多信息,请参见 这份文件

反向代理的有效 nginx.conf 示例; 以防有人像我一样被卡住。 其中 10.x.x.x是您运行 nginx 代理服务器的服务器,并且您通过浏览器连接到它,而 10.y.y.y是您真正的 Web 服务器运行的地方

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


如果您想进行 SSL 传递,以下是代码片段。也就是说,如果 10.y.y.y运行的是 HTTPS 网络服务器。这里的 10.x.x.x,或者 nignx 运行的地方正在监听端口443,所有到443的流量都指向您的目标 Web 服务器

events {
worker_connections  4096;  ## Default: 1024
}


stream {
server {
listen     443;
proxy_pass 10.y.y.y:443;
}
}

你也可以把它送到码头

 docker run --name nginx-container --rm --net=host   -v /home/core/nginx/nginx.conf:/etc/nginx/nginx.conf nginx

到达 nginx.conf文件的路径是 Nginx 的主配置文件-也是在需要时包含其他 Nginx 配置文件的路径的文件是 /etc/nginx/nginx.conf

您可以通过在终端键入此文件来访问和编辑此文件

cd /etc/nginx

/etc/nginx$ sudo nano nginx.conf

进一步在这个文件,你可以包括其他文件-可以有一个作为独立的 SERVER 块的 SERVER 指令-这不需要在 HTTP 或 HTTPS 块,正如在上面的接受答案澄清。

我重复一遍——如果你需要在 PRIMARY 配置文件中定义 SERVER BLOCK,那么 SERVER BLOCK 必须在 /etc/nginx/nginx.conf文件中的一个 HTTP 或 HTTPS 块中定义,/etc/nginx/nginx.conf文件是 Nginx 的主配置文件。

还要注意的是,如果你定义了一个 SERVER BLOCK,它没有直接将其封装在路径 /etc/nginx/conf.d的文件中的 HTTP 或 HTTPS 块中。为了实现这个功能,您还需要在 PRIMARY 配置文件中包含这个文件的路径,如下所示:-

http{
include /etc/nginx/conf.d/*.conf; #includes all files of file type.conf
}

除此之外,您可以从 PRIMARYConfig 文件中注释掉

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/,请注意这对我很有用-如果有人认为它不适合他们或者这种配置是非法的等等,请留下评论,以便我可以纠正自己-谢谢。

编辑:-根据官方 Nginx CookBook 的最新版本,我们不需要在 -/etc/nginx/sites-enabled/中创建任何配置,这是较老的做法,现在已经贬值了。

因此不需要头文件。

引自 Nginx 食谱第5页。

”在某些包存储库中,此文件夹命名为已启用站点,并且 配置文件从一个名为 site- 用的文件夹链接; 这个公约已经过时了。”

配置导入的文件中可能只有一个输入错误。例如,我在配置文件的深处输入错误:

loccation /sense/movies/ {
mp4;
}

(location 而不是 location) ,这就导致了错误:

nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-enabled/xxx.xx:1

nginx.conf中的 包括/etc/nginx/conc.d/* . conf;替换为包含 /etc/nginx/conf. d/ 包括-可選/cpanel-agent- * . conf;/etc/nginx/conf. d/ 包括-可選/site-able/* . conf;