windows使用nginx探索笔记

在macOS和linux中使用nginx我早已经轻车熟路。突然切到windows的环境中,我反而不会用了。于是我就记一下笔记吧。

本篇写的比较冗长,精简版本见:
《windows使用nginx》
https://blog.csdn.net/lxyoucan/article/details/126900620

环境

事先说明一下我的测试是在windows 2008R2上完成的,操作系统不同可能会略有不同。

下载windows版本nginx

下载地址:
https://nginx.org/en/download.html
我下载的版本是:
在这里插入图片描述
下载解压放到一个你喜欢的路径中,我放到以下路径:

C:\manuli\nginx-1.20.2

环境变量(非必须)

这一步其实并不是必须的,因为我在linux中习惯了,直接打开终端输入nginx命令执行操作,这样方便一些。
计算机=》右键“属性”=》高级系统设置=》环境变量
在这里插入图片描述
在Path的环境变量的值,末尾增加

;C:\manuli\nginx-1.20.2

在这里插入图片描述
点击[确定]保存。
这时候重新开启一个命令行或者powershell

示例

启动服务

不要直接双击nginx.exe,要在命令行开户服务。

#切换到解压的目录
cd C:\manuli\nginx-1.20.2
start nginx

查看运行情况

tasklist /fi "imagename eq nginx.exe"

如果查不到进程,说明没有成功启动。
nginx-1.20.2\logs\error.log查看报错日志。

报错0.0.0.0:80 failed

因为nginx 默认使得80端口。
报错如下:

2022/09/16 22:23:12 [emerg] 3536#2524: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

可能的原因:

  1. 没有使用80端口的权限,可以尝试用管理员权限启动试试。
  2. 有可能是80端口已经被占用了。

解决办法:

  • 把nginx换成其他端口不要用80端口。
  • 把占用80端口的程序,关掉。
查看占用80端口的进程
netstat -aon|findstr "80"

执行结果如下:

PS C:\manuli\nginx-1.20.2> netstat -aon|findstr "80"
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:49154          0.0.0.0:0              LISTENING       780
  TCP    192.168.3.136:49218    114.118.11.52:80       CLOSE_WAIT      2428
  TCP    192.168.3.136:49288    180.163.242.46:443     ESTABLISHED     3904
  TCP    192.168.3.136:59742    111.13.66.65:80        ESTABLISHED     844
  TCP    192.168.3.136:59753    180.163.252.201:80     ESTABLISHED     844
  TCP    192.168.3.136:59780    180.163.251.24:443     CLOSE_WAIT      3904
  TCP    [::]:80                [::]:0                 LISTENING       4
  TCP    [::]:49154             [::]:0                 LISTENING       780

查pid=4的进程

tasklist | findstr "4"

我的查询结果是:

PS C:\manuli\nginx-1.20.2> tasklist | findstr "4"
System Idle Process              0 Services                   0         24 K
System                           4 Services                   0        364 K
smss.exe                       224 Services                   0      1,016 K

System是系统进程。
最终我在这篇文章中找到解决办法:
https://stackoverflow.com/questions/1430141/port-80-is-being-used-by-system-pid-4-what-is-that
只要执行以下命令就可以结束占用80端口的http服务。

NET stop HTTP

执行结果如下:

PS C:\manuli\nginx-1.20.2> NET stop HTTP
下面的服务依赖于 HTTP 服务。
停止 HTTP 服务也会停止这些服务。

   Windows Remote Management (WS-Management)
   World Wide Web Publishing Service
   Print Spooler
   Function Discovery Provider Host

您想继续此操作吗? (Y/N) [N]: Y
Windows Remote Management (WS-Management) 服务正在停止.
Windows Remote Management (WS-Management) 服务已成功停止。

World Wide Web Publishing Service 服务正在停止.
World Wide Web Publishing Service 服务已成功停止。

Print Spooler 服务正在停止.
Print Spooler 服务已成功停止。

Function Discovery Provider Host 服务正在停止.
Function Discovery Provider Host 服务已成功停止。


HTTP 服务已成功停止。

并且把SQL Server Reporting Services停止
在这里插入图片描述
以上两步操作完成,发现可以正常在80端口启动nginx了。

使用NET stop HTTP确实可以解决80端口被System占用的问题。但是每次重新启动电脑。都要先执行一次这个命令显的很麻烦。
根据经验我猜测可能是Windows自带的iis占用了80端口。

禁用iis服务

其实我本想把iis开机自启禁用掉,按网上的说明把IIS Admin Services禁用掉就行了,可是我没有找到这个服务啊。难道windows 2008R2中不叫这个服务名?
后来发现服务名叫World Wide Web Publishing Service
在这里插入图片描述

防火墙允许80端口

假如搞完发现其他电脑无妨访问,则有可能是因为防火墙没允许80端口。设置方法如下:

  1. 点击开始->控制面板->Windows防火墙

  2. 单击 Windows 防火墙左侧面板中的“高级设置”
    在这里插入图片描述

  3. 点击高级设置左侧面板中的“入站规则”

  4. 单击右侧“操作”面板中的“新建规则…”
    在这里插入图片描述

  5. 选择“端口”并单击“下一步>”
    在这里插入图片描述

  6. 选择“TCP”,然后选择“特定本地端口:”(应该已经选择)

  7. 在框中输入 80(只是数字),然后单击“下一步>”
    在这里插入图片描述

  8. 选择“允许连接”并单击“下一步>”

  9. 选中所有配置文件,然后单击“下一步>”

  10. 输入名称并单击“完成”。
    在这里插入图片描述

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值