服务器环境:
ubuntu 14.04, nginx/1.4.6
执行命令:
sudo nginx -t -c /etc/nginx/conf.d/default.conf
命令目的:查看新修改的nginx是否有错误,避免上线导致服务器出错
执行结果:
nginx: \[emerg\] "server" directive is not allowed here in /etc/nginx/conf.d/default.conf:1
nginx: configuration file /etc/nginx/conf.d/default.conf test failed
default.conf
里面的内容:
server {
listen 80;
server_name localhostmanager.com www.shuizhongyueming.com;
root /var/www/www.shuizhongyueming.com;
location / {
index index.html index.php;
}
# 媒体资源文件
# TODO: 用一个static.hostmanager.com 之类的域名放置
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
}
# 前端代码
# TODO: 用一个fe.hostmanager.com之类的域名放置
location ~ .*.(js|css)$ {
expires 1h;
}
}
一开始以为是语法错误,可是复制了官方文档里面的一个简单PHP站点配置之后,还是报同样的错误,所以基本算排除了语法错误
上网Google的结果,大多说的是server的配置应该放在http里面
可是我的default.conf
是在/etc/nginx/nginx.conf
里面,在http
模块下include
的,不应该有任何的错误才对
最后自己根据网上这些答案猜测,是我进行语法检测的对象有问题。
要检测现有的修改过的Nginx配置是否有错误,不是单单检测那个修改过的扩展的.conf
文件。而是不管任何时候,始终都是去检测主文件/etc/nginx/nginx.conf
,只有这样,才能顺利的在对应的模块加载扩展的.conf
文件。
这样一来保证了配置的前后语境的正确性,二来,这样才是真正的检测(完全和实际运行情况相符)
所以正确的检测修改的Nginx的语法是否错误的命令应该是:sudo nginx -t -c /etc/nginx/nginx.conf
,然后一个欣喜的结果就会是:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
希望这个小的发现能帮助到大家。
原创内容,欢迎转载 😊