nginx:[emerg]此处不允许使用“server”指令

ryhaxcpt  于 2022-11-02  发布在  Nginx
关注(0)|答案(5)|浏览(276)

我已经重新配置了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
new9mtju

new9mtju1#

这不是nginx配置文件。它是nginx配置文件的 * 部分 *。
nginx配置文件(通常称为nginx.conf)如下所示:

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

server块包含在http块中。
通常,通过使用include指令引入其他片段(例如,从sites-enabled目录),将配置分布到多个文件中。
使用sudo nginx -t测试完整的配置文件,该文件从nginx.conf开始,并使用include指令引入其他片段。有关详细信息,请参阅本文档。

prdp8dxp

prdp8dxp2#

反向代理的有效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 web服务器。这里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
pgvzfuti

pgvzfuti3#

nginx.conf文件的路径是Nginx的主要配置文件,也是应包括其他Nginx配置文件路径的文件,当需要时为/etc/nginx/nginx.conf
您可以通过在终端键入以下内容来访问和编辑此文件
cd /etc/nginx
/etc/nginx$ sudo nano nginx.conf
此外,在此文件中,您可以包括其他文件-这些文件可以将SERVER指令作为独立的SERVER BLOCK -这些文件不需要位于HTTP或HTTPS块中,正如上面已接受的答案中所阐明的。
我重复-如果你需要在主配置文件本身中定义一个服务器块,那么这个服务器块必须在/etc/nginx/nginx.conf文件中的一个封闭HTTP或HTTPS块中定义,/etc/nginx/nginx.conf文件是Nginx的主配置文件。
另请注意-如果您在路径为/etc/nginx/conf.d的文件中直接定义SERVER BLOCK,而不是将其包含在HTTP或HTTPS块中,则可以。此外,要使此工作正常进行,您需要在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/,请注意这对我来说是有效的-如果有人认为这不适合他们或者这种配置是非法的等等,请留下评论,以便我可以更正自己-谢谢。
编辑:-根据最新版本的Nginx官方食谱,我们不需要在-/etc/nginx/sites-enabled/中创建任何配置,这是旧的做法,现在已经过时了。
因此,不需要包含指令include /etc/nginx/sites-available/some_file.conf;
引自Nginx CookBook第5页。
“在某些程序包资料档案库中,此文件夹名为sites-enabled,而配置文件是从名为site-available的文件夹链接的;该约定已失效。”

g0czyy6m

g0czyy6m4#

可能只是在config导入的文件中的某个地方出现了一个错字。例如,我在config文件的深处出现了一个错字:

loccation /sense/movies/ {
                  mp4;
        }

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

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

euoag5mw5#

/etc/nginx/conf.d/.conf文件中的所有文件都被删除。/etc/nginx/conf.d/包含可选的/cpanel代理供应商/.conf;/etc/nginx/conf.d/包含可选的/站点可用的/*.conf;**

相关问题