执行nginx -t报错‘server指令不允许在此处’,请求排查错误原因
Nginx [emerg] "server" directive is not allowed here 错误原因分析
问题场景
执行nginx -t验证配置时遇到如下错误:
nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-enabled/default:8
对应的/etc/nginx/sites-available/default配置内容:
server { listen 27016; server_name 52.79.70.237; location / { proxy_pass http://127.0.0.1:27016; } server { listen 80 default_server; server_name 52.79.70.237; location / { proxy_redirect off; proxy_pass http://127.0.0.1:3001; } }
错误原因
这个错误的核心是你在一个server块内部嵌套了另一个server块,这直接违反了Nginx的配置语法规则。
Nginx的配置结构里,server块是隶属于http块的顶级配置单元——所有server块必须是平级关系,绝对不能互相嵌套。当Nginx解析到第8行的server指令时,它当前的上下文是在第一个server块内部,而这个层级是不允许出现server指令的,所以直接抛出了emerg级别的错误。
修复方案
把两个server块改成平级独立的结构即可:
server { listen 27016; server_name 52.79.70.237; location / { proxy_pass http://127.0.0.1:27016; } } server { listen 80 default_server; server_name 52.79.70.237; location / { proxy_redirect off; proxy_pass http://127.0.0.1:3001; } }
调整后再次执行nginx -t,配置应该就能顺利通过验证了。
内容的提问来源于stack exchange,提问作者user10353639
相关产品推荐
相关产品推荐

