windows 配置nginx环境变量(玩出新花样)(nginx下载与安装)

1.情景展示

在开发过程中,当我们将nginx放置到windows操作系统下时,如何在黑窗口下使用命令,对nginx服务器进行操作?

2.具体分析

说明:如果你不想看推导过程,可以直接看解决方案,我推出的解决方案是全网独有的,所以说,不看推导过程,这对于个人能力的提升而言没有任何帮助。

当我们从nginx官网上下载下来windows版本,解压后,如何通过命令启动nginx服务器?

打开命令窗口;

输入:nginx,回车执行;

没有nginx这个命令?这才是正常的现象。

我们现在来回想一下:java是如何配置环境变量的?nginx是不是也可以像java那样配置好环境变量直接使用?

说干就干,一起来试一下:

win+r--》输入:sysdm.cpl

高级--》环境变量;

新建--》变量名可设置为:NGINX_HOME(名称随意,但最好遵循见名知意的原则);

变量值设置为:nginx的根目录。

然后,将其引入到系统变量Path当中。

格式:%变量名%

确定;

重新打开黑窗口,运行nginx命令;

我们可以看到:

第一,nginx命令现在可以使用了,但是启动失败;

第二,报错信息是:在C:\Users\Marydon目录下,找不到conf/nginx.conf文件。

这是怎么回事?我们明明将nginx的根目录已经配好了,为啥nginx要去C:\Users\Marydon目录下找nginx的配置文件?不应该是去nginx的根目录下找吗?

原来,Nginx 在启动时需要找到nginx.conf配置文件, conf-path 是根据相对路径来找的,什么意思?

意思就是:在哪个目录下运行nginx命令,nginx就去该目录下找对应的配置文件,这能找到?能找到就见鬼了!

-?,-h,-v,-V这4个基础命令,是可以正常使用的;

剩下的命令都需要用到配置文件,如:start nginx、nginx -s stop/reload/reopen/quit等控制命令无法使用,如何解决?

3.解决方案

方案一:在nginx的根目录下运行

我们来到nginx的安装目录,在路径栏输入:cmd,并按回车键;

将会在此目录下运行cmd并打开命令窗口;

输入:nginx,并按回车键;

或者,输入:nginx.exe,并按回车键;

或者,输入:start nginx,并按回车键。

没有报错信息,说明使用nginx服务器启动成功。

以上3种启动方式,打开的都是nginx.exe

相当于:我们双击运行nginx.exe。

当然,这种方式,适合偶尔使用的情况。

另一种方式,就是:创建nginx.exe的桌面快捷方式,什么时候需要用了,什么时候打开,当然,这种方式只能用于启动nginx服务器。

方案二:配置环境变量和创建bat命令

接着第二步分析继续进行,此时环境变量已经配好。

第一,nginx支持在启动时指定 conf-path 的绝对路径,亦或是重新编译 Nginx 来指定 conf-path。

所以,我们在启动nginx时,可以通过 -p 命令来指定nginx所在的绝对路径。

第二,创建bat命令。

使用 bat 来运行 nginx 命令。

新建一个文本文件,将以下代码粘贴进去:

查看代码
@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 reload
if "%1"=="reopen" goto reopen
if "%1"=="find" goto find
goto error

:help
nginx -v
echo Usage: nginx2 [-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 %NGINX_HOME%
exit /B

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

:reload
nginx -s reload -p %NGINX_HOME%
exit /B

:reopen
nginx -s reopen -p %NGINX_HOME%
exit /B

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

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

保存,将文件重命名为:nginx2.bat;

将其拷贝到nginx根目录下;

 

重新打开cmd命令,启动nginx服务器。

在浏览器输入:localhost进行访问,进入nginx欢迎页。

我们可以使用的命令有:

优点:解决了nginx服务器通过相对路径访问配置文件的问题。

缺点:但是这样虽然可操作nginx服务器,但是,不需要配置文件的常用命令,还需要我们使用nginx的命令来操作;

另外,由于启动、关闭、重启服务器和重新加载配置文件,是我们自定义的命令,一旦我们换台机器,咱们还需要记住原来的操作命令,相当于需要记忆两套命令;

这样一来,其实,与我们的原来目的背道而驰,因为虽然间接实现了,但我们是以丧失原nginx命令为前提的,也就是所谓的:顾此失彼。

虽然,这种方式比较鸡肋,但对于window批处理文件的命令还是值得学习的。

bat命令说明:

第一,@echo off 此命令需要将 @ 和 echo off 分开说明:

@让跟在其后面的命令的执行过程不打印出来;echo off 则让所有命令的执行过程不打印出来。

第二,goto 与 :  这两个命令需要配套使用,: 相当于标签(标签名称不区分大小写),goto 指定跳到那个标签后面执行它下面的内容;

第三,echo 向命令窗口打印一行指定的字符串,举例:echo= 打印空的字符串,结果相当于换行。

第四,exit 该命令是退出程序,并且会关闭命令窗口;

exit /B 表示退出程序后不会关闭命令窗口(退回前一个命令所在窗口)。

第五:在bat文件中可以用百分号来引用环境变量,即:%环境变量%;

第六:获取用户输入的数据,用%+数字接收,多个参数中间用空格加以区分。

第六:bat文件名称是什么,你调用指令的名称就是什么。

4.再次封装

其实,只要,我们学习一下bat命令,那自定义封装实现起来将会得心应手。

基于上面原作者的基础上进行二次封装

查看代码
@echo off
if "%1"=="-?" (goto help) else (if "%1"=="-h" goto help)
if "%1"=="-v" (goto version)
if "%1"=="-V" (goto version2)
if "%1"=="-t" (goto test)
if "%1"=="-T" (goto test2)
if "%1"=="-q" (goto suppress)
if "%1"=="start" goto start
if "%1"=="-s" goto signal
if "%1"=="-p" goto prefix
if "%1"=="-e" goto error
if "%1"=="-c" goto configuration
if "%1"=="-g" goto global
if "%1"=="search" goto search
if "%1"=="kill" goto kill
goto errors

:help
nginx -v
echo Usage: nginx2 [-?,-h] [-v] [-V] [-t] [-T] [-q] [start] [-s signal] [-p prefix] [-e filename] [-c filename] [-g directives] [search] [kill]
echo=
echo Options:
echo   -?,-h           : this help
echo   -v              : show version and exit
echo   -V              : show version and configure options then exit
echo   -t              : test configuration and exit
echo   -T              : test configuration, dump it and exit
echo   -q              : suppress non-error messages during configuration testing
echo   start           : start nginx master process
echo   -s signal       : send signal to a master process: stop, quit, reopen, reload
echo   -p prefix       : set prefix path (default: NONE)
echo   -e filename     : set error log file (default: logs/error.log)
echo   -c filename     : set configuration file (default: conf/nginx.conf)
echo   -g directives   : set global directives out of configuration file
echo   search            : show the nginx master process list(customize include)
echo   kill            : kill all nginx master processes(customize include)
echo=
exit /B

:version
nginx -v
exit /B

:version2
nginx -V
exit /B

:test
nginx -t -p %NGINX_HOME%
exit /B

:test2
nginx -T -p %NGINX_HOME%
exit /B

:suppress
nginx -q -p %NGINX_HOME%
exit /B

:start
start nginx -p %NGINX_HOME%
exit /B

:signal
nginx -s %2 -p %NGINX_HOME%
exit /B

:prefix
nginx -p %2 -p %NGINX_HOME%
exit /B

:error
nginx -e %2 -p %NGINX_HOME%
exit /B

:configuration
nginx -c %2 -p %NGINX_HOME%
exit /B

:global
nginx -g %2 -p %NGINX_HOME%
exit /B

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

:kill
taskkill /F /IM nginx.exe
exit /B

:errors
echo nginx2: invalid option: "%1 %2"
echo=   
exit /B

原生的nginx命令 

 

这样一来,在nginx可以用的原生指令,我们通过封装,也能保证封装后的指令和它基本上完全一致。

与nginx原生指令的区别,在于

第一,启动服务器;

原生:start nginx。

派生:nginx2 start。

第二,新增自定义指令

ngnix2 search:查询nginx服务进程;

ngnix2 kill:杀死所有nginx服务进程。

第三,指令名称不同。 

原生:使用nginx+指令;

派生:使用nginx2+指令。

一次简化

查看代码

@echo off
if "%1"=="-?" (goto help) else (if "%1"=="-h" goto help)
if "%1"=="-v" (goto vVtTq)
if "%1"=="-V" goto vVtTq
if "%1"=="-t" goto vVtTq
if "%1"=="-T" goto vVtTq
if "%1"=="-q" goto vVtTq
if "%1"=="start" goto start
if "%1"=="-s" goto specg
if "%1"=="-p" goto specg
if "%1"=="-e" goto specg
if "%1"=="-c" goto specg
if "%1"=="-g" goto specg
if "%1"=="search" goto search
if "%1"=="kill" goto kill
goto errors

:help
nginx -v
echo Usage: nginx2 [-?,-h] [-v] [-V] [-t] [-T] [-q] [start] [-s signal] [-p prefix] [-e filename] [-c filename] [-g directives] [search] [kill]
echo=
echo Options:
echo   -?,-h           : this help
echo   -v              : show version and exit
echo   -V              : show version and configure options then exit
echo   -t              : test configuration and exit
echo   -T              : test configuration, dump it and exit
echo   -q              : suppress non-error messages during configuration testing
echo   start           : start nginx master process
echo   -s signal       : send signal to a master process: stop, quit, reopen, reload
echo   -p prefix       : set prefix path (default: NONE)
echo   -e filename     : set error log file (default: logs/error.log)
echo   -c filename     : set configuration file (default: conf/nginx.conf)
echo   -g directives   : set global directives out of configuration file
echo   search            : show the nginx master process list(customize include)
echo   kill            : kill all nginx master processes(customize include)
echo=
exit /B

:vVtTq
nginx %1 -p %NGINX_HOME%
exit /B

:start
start nginx -p %NGINX_HOME%
exit /B

:specg
nginx %1 %2 -p %NGINX_HOME%
exit /B

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

:kill
taskkill /F /IM nginx.exe
exit /B

:errors
echo nginx2: invalid option: "%1 %2"
echo=   
exit /B

二次简化(终极版本)

@echo off
if "%1"=="-?" goto help
if "%1"=="-h" goto help
if "%1"=="-v" goto vVtTqspecg
if "%1"=="-V" goto vVtTqspecg
if "%1"=="-t" goto vVtTqspecg
if "%1"=="-T" goto vVtTqspecg
if "%1"=="-q" goto vVtTqspecg
if "%1"=="-s" goto vVtTqspecg
if "%1"=="-p" goto vVtTqspecg
if "%1"=="-e" goto vVtTqspecg
if "%1"=="-c" goto vVtTqspecg
if "%1"=="-g" goto vVtTqspecg
if "%1"=="start" goto start
if "%1"=="search" goto search
if "%1"=="kill" goto kill
goto errors

:help
nginx -v
echo Usage: nginx2 [-?,-h] [-v] [-V] [-t] [-T] [-q]
echo               [-s signal] [-p prefix] [-e filename] [-c filename] [-g directives]
echo               [start] [search] [kill]
echo=
echo Options:
echo   -?,-h           : this help
echo   -v              : show version and exit
echo   -V              : show version and configure options then exit
echo   -t              : test configuration and exit
echo   -T              : test configuration, dump it and exit
echo   -q              : suppress non-error messages during configuration testing
echo   -s signal       : send signal to a master process: stop, quit, reopen, reload
echo   -p prefix       : set prefix path (default: NONE)
echo   -e filename     : set error log file (default: logs/error.log)
echo   -c filename     : set configuration file (default: conf/nginx.conf)
echo   -g directives   : set global directives out of configuration file
echo   start           : start nginx master process(customize include)
echo   search          : show the nginx master process list(customize include)
echo   kill            : kill all nginx master processes(customize include)
echo=
exit /B

:vVtTqspecg
nginx %1 %2 -p %NGINX_HOME%
exit /B

:start
start nginx -p %NGINX_HOME%
exit /B

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

:kill
taskkill /F /IM nginx.exe
exit /B

:errors
echo nginx2: invalid option: "%1 %2"
echo=   
exit /B

将上述内容进行复制,保存成bat文件,双击运行即可。

用了整整12个小时,终于搞定了。

说难吧,也不难,关键是不懂得bat的语法与nginx语法,导致中间走了不少弯路,版本修改和测试了无数次。

这是一条没人走过的路,我做到了。

5.关于配置环境变量后不生效的问题 

2022年3月9日09:23:50

在win10操作系统下,配置好NGINX_HOME后,nginx命令,时而可以使用,时而无法使用。

通过查看path变量,我们可以看到:

path没有将%NGINX_HOME%当成了字符串,而不是引用环境变量。

所以,才会导致nginx命令无法生效,怎么办?

找到path环境变量,选择“编辑文本”;

确定;

我们可以发现:

%NGINX_HOME%末尾多了一个英文封号;。

在win7操作系统下,我们知道:

在往path当中添加环境变量引用的时候,最后一个环境变量末尾是不能加封号的。

同样地,我们也要给win10自动添加的封号去掉就可以啦。

重新打开一个命令窗口,进行测试即可。

2024-05-29 16:38:45

6.nginx下载

下载地址:https://nginx.org/en/download.html

2024-09-26 11:08:24

7.nginx常用命令

前提:已经配置好了nginx的环境变量。

查看是否配置环境变量

echo %NGINX_HOME%

查看nginx版本

nginx -v

查询nginx所在位置

where nginx

 

前提:切换到nginx所在根目录

启动nginx

start nginx

关闭nginx

nginx -s quit

重启加载配置文件

当nginx已经启动,但是,我们又修改了nginx.conf,要想配置文件生效,有两种实现方式:

一种是关闭nginx,再启动;

另一种就是直接使用下面这个命令就可以啦。

nginx -s reload

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2022-02-28 21:56  Marydon  阅读(2460)  评论(2编辑  收藏  举报