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

    参考

  • 相关阅读:
    PTA 浙大版《C语言程序设计(第4版)》题目集 参考答案(编程题)
    SCM供应链管理系统解决方案:助力企业采购流程高效运行,全面降低供应链风险
    集成腾讯乐享连接更多应用
    9、软件包管理
    getattr,hasattr,setattr什么作用
    成绩判定(C++)
    利率浮动值60BP什么意思,利率上浮50bp是什么意思
    家用厨房安全新篇章:煤气安全阀结构与校验知识普及
    基于 ByteHouse 构建实时数仓实践
    基于Vue+SpringBoot的大学计算机课程管理平台 开源项目
  • 原文地址:https://blog.csdn.net/lxyoucan/article/details/126898516