进行 PHP 开发时,一般会用到 Apache 或者是 nginx 去作为 web server。

我是在 Windows 环境下进行开发的,使用 Apache 的时候,我会把 Apache 的 bin 目录加入到环境变量中去,这样我只要打开 Powershell 就能直接使用 httpd 命令来启动 Apache 了;又或者我会将它注册成服务,这样使用 net start apache2.4 也可以快速启动,很方便。

后来使用到了 nginx,我也尝试同样的方法——将 nginx 目录加入到环境变量,重启 Powershell(以管理员身份运行),直接执行 nginx 命令,发现报错了:

PS C:\Users\Yian> nginx
nginx: [alert] could not open error log file: CreateFile() "logs/error.log" failed (3: The system cannot find the path specified)
2017/09/15 00:35:03 [emerg] 9408#9120: CreateFile() "C:\Users\Yian/conf/nginx.conf" failed (3: The system cannot find the path specified)

似乎是 nginx 读取不到配置文件,然后 cd 到 nginx 的目录下,再次执行 nginx,发现它是能够正常启动的。
这样子的话,每次启动 nginx 的时候都要在它的目录下进行操作,似乎挺麻烦的啊,于是我翻文档,想把它注册成服务,然而很遗憾,在官方文档里看到如下:

Possible future enhancements

  • Running as a service.

nginx 目前是还不支持在 Windows 下以服务的形式运行的。
网上也有说可以借助第三方工具来实现注册成服务,但是这种方法有点麻烦,遂放弃,最终写了两个简单的 .bat 脚本,用来实现启动和停止 nginx,具体脚本如下:

start-nginx.bat

@echo off
D:
cd \Env\nginx\
tasklist /fi "imagename eq nginx.exe" |find ":" > nul
if errorlevel 1 nginx -s stop
start nginx

其中,第二第三行是先切换到 nginx 所在的目录(例如我是放在 D:\Env\nginx 里),然后判断当前是否存在 nginx 的进程,如果存在,则先杀死,最后启动 nginx。

同样的,停止的脚本(stop-nginx.bat)先判断 nginx 是否在运行,如果运行,则将其停止:

@echo off
D:
cd \Env\nginx\
tasklist /fi "imagename eq nginx.exe" |find ":" > nul
if errorlevel 1 nginx -s stop

最后为了方便,我就直接将这两个文件放在了 nginx 的根目录(这个目录已经加入了环境变量)下,这时候我们在 Powershell 里直接使用命令 start-nginxstop-nginx 就可以轻松启动和停止 nginx 了

标签: php, windows, nginx

添加新评论