创建sites-available与sites-enabled的符号链接后,nginx.conf出现无效变量名错误(未修改过该配置文件)
创建sites-available与sites-enabled的符号链接后,nginx.conf出现无效变量名错误(未修改过该配置文件)
兄弟我太懂你这种懵圈的感觉了——明明碰都没碰nginx.conf,就加了个软链接,结果配置校验直接报错,简直离谱!不过别慌,这个报错其实是个“障眼法”,大概率不是主配置文件的问题,而是你刚链接过去的站点配置文件出了语法错误。
为啥会指向nginx.conf第61行?因为那行大概率是include /etc/nginx/sites-enabled/*.conf;——当nginx加载这个目录下的配置时,如果你的站点配置里有变量定义错误,它就会把错误溯源到include这一行,让你误以为是主配置炸了。
给你几个排查步骤,一步步来:
先确认
nginx.conf第61行到底是什么:
跑这个命令看第61行附近的内容:sudo cat -n /etc/nginx/nginx.conf | sed -n '55,65p'不出意外的话,这行就是引入
sites-enabled目录配置的语句。重点检查你刚创建软链接的那个站点配置文件:
比如你链接的是/etc/nginx/sites-available/my-project.conf,直接打开它:sudo nano /etc/nginx/sites-available/my-project.conf找变量相关的代码,nginx的变量规则很严格:
- 必须以
$开头,比如$my_var,不能漏写$ - 变量名只能包含字母、数字和下划线,不能有空格、横杠这类特殊字符,比如
$my-site是错的,得改成$my_site - 常见错误示例:
set my_var "test";(漏了$,正确写法是set $my_var "test";),或者变量名里不小心加了空格
- 必须以
单独校验站点配置文件:
不用每次都跑全量校验,直接单独测这个配置:sudo nginx -t -c /etc/nginx/sites-available/my-project.conf这样能直接定位到站点配置里的错误行,比看主配置的报错清晰多了。
反向验证:
先把sites-enabled里的那个软链接删掉,再跑sudo nginx -t,如果不报错了,那就100%实锤是那个站点配置的问题,再回去仔细抠每一行代码就行。
备注:内容来源于stack exchange,提问作者Mikey
相关产品推荐
相关产品推荐

