改完 nginx.conf,在项目目录里敲 ./nginx -t,终端回一句 No such file or directory。文件明明就在服务器上,问题出在当前目录。
./ 指的是当前目录
./nginx 表示执行当前目录下的 nginx 可执行文件。nginx 装在 /usr/local/nginx/sbin 下,人却站在 /www 里,自然找不到。要么先 cd 到 sbin,要么直接写全路径。
/usr/local/nginx/sbin/nginx -t四个参数分清用途
- -t 只检查配置语法,不动正在跑的服务,改完配置第一件事就是它。
- -T 检查并把最终生效的完整配置打印出来,排查 include 有没有读到很管用。
- -c 指定配置文件路径,多环境部署时用。
- -s reload 是给运行中的进程发信号,平滑重载,不掐断连接。
报错怎么读
提示 unknown directive,看它后面那个词,多半是模块没编译进去,或者配置写在了错误的块里。提示 open() failed,是路径问题,日志目录或者 pid 目录不存在。提示 bind() failed,是 80 端口被别的进程占了,用 ss -lntp 看一眼就清楚。
nginx: [emerg] open() 「/var/run/nginx.pid」 failed (2: No such file or directory)这种是编译时指定的 pid 路径在系统里不存在,建好目录或者把配置指到已有路径。检查通过会输出 syntax is ok 和 test is successful 两行,少一行都不算过。