Windows 下配置 Nginx 全局使用

前言

在 Windows 下载安装了 Nginx,配置了环境变量全局使用 Nginx。但是 Nginx 在使用时 conf-path 是根据相对路径来找的(可以根据 nginx -V 命令看出来)。这样的话,你进入 cmd 后,要想启动 Nginx(或者其他控制 Nginx 的命令选项),就必须切换到 Nginx 所在目录,或者在启动时指定 conf-path 的绝对路径,亦或是重新编译 Nginx 来指定 conf-path(Linux 下挺方便,Win也可以),不然 cmd 会报错而无法启动 Nginx。这样使用起来并不舒服,毕竟你要打一大串路径字符:( 。由于不想重编译,于是想了另一种方式——使用 bat 文件

注意点:

  • 你需要先配置环境变量来全局使用 nginx 这个命令
  • nginx 的命令选项中,除了需要用到配置文件的 start stop reload 等控制命令在非安装路径下使用时会报错外(前言讲到了),其他都可直接使用。比如 nginx -v 查看版本

解决方案

创建一个 bat 文件(我的是 nginxd.bat),使用 bat 来运行 nginx 命令。创建了之后,就可以使用如下命令:

nginxd [-h,help] [-v,version] [start] [stop] [stop -a] [reload] [reopen] [find]

具体使用 nginxd -h 查看,当然 nginxd 命令根据 bat 文件名来定的。文件位置随意,但是要能全局使用(即指定环境变量)。代码如下:

@echo off
if "%1"=="help" (goto help) else (if "%1"=="-h" goto help)
if "%1"=="version" (goto version) else (if "%1"=="-v" goto version)
if "%1"=="start" goto start
if "%1"=="stop" goto stop
if "%1"=="reload" goto reloadmd
if "%1"=="reopen" goto reopen
if "%1"=="find" goto find
goto error

:help
nginx -v
echo Usage: nginxd [-h,help] [-v,version] [start] [stop] [stop -a] [reload] [reopen] [find]
echo=
echo Options:
echo   help,-h         : this help
echo   version,-v      : show current nginx version
echo   start           : start nginx master process
echo   stop            : stop the newest nginx master process
echo   stop -a         : stop all nginx master processes
echo   reload          : reload configuration
echo   reopen          : reopen nginx
echo   find            : show the nginx master process list
echo=
exit /B

:version
nginx -v
exit /B

:start
start nginx -p D:\Software\nginx
exit /B

:stop
if "%2"=="-a" (taskkill /F /IM nginx.exe) else (if "%2"=="" (nginx -s stop -p D:\Software\nginx) else goto error)
exit /B

:reload
nginx -s reload -p D:\Software\nginx
exit /B

:find
tasklist /fi "imagename eq nginx.exe"
exit /B

:error
echo nginxd: invalid option: "%1 %2"
echo=   
exit /B

简单解释

这是给小白看的,当然还有更好的实现,我也是刚接触,不足之处还请谅解。另外,以下是我自己的理解,可能有出入,请见谅

  1. @echo off:此命令分 @ 和 echo off 看。@让跟在其后面的命令的执行过程不打印出来,echo off 则让所有命令的执行过程不打印出来(自己测试,看结果就明白)。
  2. goto 与 :: 两个命令配套使用,: 相当于标签,goto 则指定跳到那个标签后面执行。
  3. echo:向命令窗口打印一行指定的字符创,echo= 打印空的字符串,结果相当于换行。
  4. exit: 该命令是退出程序,并且会关闭命令窗口(这不是我想要的)。指定 /B 则退出程序后不会关闭命窗口。/B 是说退回前一个命令所在窗口。

推荐阅读更多精彩内容

  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 2,719评论 0 11
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 103,704评论 13 125
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 69,218评论 12 438
  • 1.命令格式:ifconfig [网络设备] [参数] 2.命令功能: ifconfig 命令用来查看和配置网络设...
    Nuuuu阅读 1,765评论 0 11
  • 年前在朋友圈里看了一个分享《有仪式感的过年有多重要》,大约是说“物质的丰富,让我们感受不到新衣裳、年夜饭带来的喜悦...
    大步暖风阅读 278评论 1 6