• 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
    
    • 1

    环境变量(非必须)

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

    ;C:\manuli\nginx-1.20.2
    
    
    • 1
    • 2

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

    示例

    启动服务

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

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

    查看运行情况

    tasklist /fi "imagename eq nginx.exe"
    
    • 1

    如果查不到进程,说明没有成功启动。
    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

    可能的原因:

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

    解决办法:

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

    执行结果如下:

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    查pid=4的进程

    tasklist | findstr "4"
    
    • 1

    我的查询结果是:

    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
    
    • 1
    • 2
    • 3
    • 4

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

    NET stop HTTP
    
    • 1

    执行结果如下:

    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 服务已成功停止。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    并且把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. 输入名称并单击“完成”。
      在这里插入图片描述

    参考

  • 相关阅读:
    Typora使用教程
    MIPI CSI-2笔记(8) -- Low Level Protocol(同步短包的数据类型编码)
    Vite 设置 build 之后项目的相对路径,而不是绝对路径 base
    flink 查看写入starrocks的数据量 总行数
    java计算机毕业设计家庭财务管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署
    Kafka集群修改单个Topic数据保存周期
    一些前端面试思考
    基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持多实例自定义条件的流程流转
    TinTin Web3 动态精选:以太坊基金会推出 EELS、Arbitrum Stylus 上线
    红海有鱼群,共话医疗器械行业之渠道开发
  • 原文地址:https://blog.csdn.net/lxyoucan/article/details/126898516