windows使用nginx探索笔记

2023-05-16

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

参考

  • 《nginx for Windows》
    https://nginx.org/en/docs/windows.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows使用nginx探索笔记 的相关文章

  • 如何在 Visual C++ 中宣传 Bonjour 服务

    我试图弄清楚这是否可能 但是通过 Visual C 宣传 Bonjour 服务的最简单方法是什么 您可以使用DNS服务发现客户 dns sd Windows Bonjour 安装程序把它放进去C Windows system32 dns s
  • Windows 上的 Node.js 和 Express

    今晚 我决定尝试在我的 Windows 7 计算机上使用 Express 构建一个简单的 Node js 应用程序 安装过程还算顺利 但 Express 拒绝配合 以下是我已采取的步骤 使用以下位置提供的 MSI 安装 Node jshtt
  • 如何修复 Nginx 自动 301 重定向到带有尾部斜杠的相同 URL?

    当我尝试将 Web 应用程序的子目录中的索引文件访问到相同的 URL 但附加了斜杠 时 Nginx 出现了不良行为 它正在重新路由请求 我有一个简单的 Web 应用程序 其中设置了一个根目录和其中的许多子目录 每个子目录中都有一个 inde
  • 每个进程每个线程的时间量

    我有一个关于 Windows 和 Linux 中进程和线程的时间量子的问题 我知道操作系统通常为每个线程提供固定的时间量 我知道时间量根据前台或后台线程而变化 也可能根据进程的优先级而变化 每个进程有固定的时间量吗 例如 如果操作系统为每个
  • 64 位大型 malloc

    malloc 失败的原因是什么 尤其是在 64 位中 我的具体问题是尝试在 64 位系统上分配一大块 10GB RAM 该机器有 12GB RAM 和 32GB 交换空间 是的 malloc 是极端的 但是为什么它会成为一个问题呢 这是在带
  • 使用 Windows 命令行连接文本文件,删除前导行

    我需要连接一些相对较大的文本文件 并且更喜欢通过命令行来完成此操作 不幸的是我只有Windows 无法安装新软件 type file1 txt file2 txt gt out txt 允许我几乎得到我想要的 但我不希望 file2 txt
  • Nginx - Heroku Docker - 是否可以在 Heroku 上运行 Nginx 作为反向代理

    我试图弄清楚如何使用 Nginx 在 Heroku 应用程序上构建反向代理 问题是 Heroku 似乎每个应用程序只接受一个容器 但我的应用程序系统至少会使用三个容器 一个用于 Nginx 一个用于我的应用程序前端 一个用于我的业务逻辑服务
  • windows关闭tomcat后保持端口锁定

    我遇到了一个问题 该问题发生在不同站点的 3 台不同服务器上 问题是 当我关闭 Windows 服务器上的 Tomcat 7 和 8 5 版本 服务并尝试重新启动该服务后 该服务将无法启动 因为 tomcat 认为端口仍在使用中 以下是错误
  • 如何获取Windows批处理的父文件夹

    我正在编写一个批处理文件 我需要获取该bat文件的父文件夹 有可能吗 注意 我的意思是批处理文件的父文件夹 而不是调用该批处理的提示的当前目录 Thanks 批处理的父文件夹位于变量中 dp0位于 例子 echo off setlocal
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • 连接被拒绝:当uwsgi和nginx在不同容器中时

    我正在尝试设置两个 docker 容器 是的 无需 docker compose 分开 一个带有 nginx 另一个带有带有基本 Flask 应用程序的 uwsgi 我在 docker 内的同一网络中运行容器我的 nginx 配置已添加 链
  • PHP cURL 在本地工作,在 AWS 服务器上出现错误 77

    最新更新 脚本作为管理员用户通过 SSH shell 作为 php script php 成功运行 当由 nginx 用户运行时 curl 命令无法执行 https 请求 所以我猜测这是nginx用户无法正确使用curl的问题 我已经检查了
  • 防止 WNetAddConnection2 类允许被禁止的用户访问共享文件夹

    我开发了 C windows 应用程序 操作系统是Windows 7 要求 是使用带有凭据的代码访问网络共享文件夹 Test WNetAddConnection2 class 限制 是某些用户可以访问此共享文件夹 测试 但对于其他用户 设置
  • git 认为文件已更改

    我在一台机器上对一个项目做了一些工作 然后推送到 github 在另一台机器上克隆并做了一些工作 然后推送 然后我回到第一台机器并做了一个pull 现在 第一台机器认为项目中最初的所有文件都已更改 我试过了 git checkout f a
  • 什么是WINVER?

    我正在查看一些代码 他们有这一行 define WINVER 0x0501 in stdafx h文件 为什么需要定义WINVER 它如何影响您的代码 有人可以解释一下吗 WINVER 确定构建应用程序所需的最低平台 SDK 这反过来又会在
  • C# WMI 在远程 PC 上运行一个 exe,然后在同一台 PC 上运行另一个 exe,然后在网络路径上调用 Directory.CreateDirectory 并失败

    使用 C WMI 我在另一台计算机上启动一个 exe 该 exe 使用 C 启动另一个 exeProcess班级 最后一个 exe 尝试调用Directory CreateDirectory使用网络路径 又名 comp1 d dir Dir
  • 使用 sed 更新 xml 属性(Windows + cygwin 和 Linux)?

    我需要使用 sed 命令对 xml 文件进行更新 但我在这方面遇到了麻烦 它需要在 Windows 使用 cygwin 和 Linux 上运行 XML 具有以下元素
  • 在高 dpi Windows 平台上自动重新缩放应用程序?

    我正在编写一个需要在高 dpi Windows 192dpi 而不是 96dpi 上运行的 Qt 应用程序 不幸的是 Qt 框架尚不支持高 dpi 至少在 Windows 上 因此我的应用程序及其所有元素看起来只有应有尺寸的一半 有没有办法
  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo

随机推荐

  • mybatis小示例

    一般使用mybatis的环境 xff0c 大多都是别人已经配置好的 直接用就好了 xff0c 如何自己搭建呢 xff1f 其实很简单 看官方的文档就可以解决了 主要为了学习mybatis最基础的配置 我文章中的方法不基于spring 一般很
  • spring boot集成mybatis报错 java.lang.IllegalStateException: No supported DataSource type found

    背景 我参考MyBatis Spring的文档搭建环境 https mybatis org spring zh getting started html 完全按文档上操作 xff0c 还是报以下错误 报错信息 Error starting
  • Spring boot mybatis 简单示例

    我在Spring boot中集成mybatis竟然花了不少时间 xff0c 真没想到 对着官网的文档做 xff0c 竟然还花了这么多时间 所以我把过程尽可能的详细记录下来 xff0c 给有需要的朋友 需求 在spring boot 中使用m
  • spring boot + mybatis+ mysql环境搭建

    最近在尝试从0开始搭建框架 xff0c 结果在mybatis这块就踩了很多坑 于是就决定写篇文章记录一下 要求 尽可能的简单 xff0c 减少依赖 实战 新建spring boot项目 基于spring boot 的 xff0c 所以第一步
  • javascript字符串转对象

    永远不要使用 eval xff01 eval 是一个危险的函数 xff0c 它使用与调用者相同的权限执行代码 如果你用 eval 运行的字符串代码被恶意方 xff08 不怀好意的人 xff09 修改 xff0c 您最终可能会在您的网页 扩展
  • fastjson 属性排序

    fastjson把bean转成json字符串 xff0c 默认的顺序并不是按你实体类属性写的顺序来的 虽然属性顺序一般不会影响功能 xff0c 但是强迫症忍不了 因为java中通过反射机制是无法取到属性的顺序的 xff08 我猜测 xff0
  • 设计模式之【装饰者模式】,实现“穿衣打扮”自由原来这么简单

    文章目录 一 什么是装饰者模式1 装饰者模式原理2 装饰者模式四大角色3 代理 桥接 装饰器 适配器 4 种设计模式的区别4 装饰者模式的应用场景5 装饰者模式和代理模式的对比6 装饰者模式优缺点7 抽象装饰器 xff08 Decorato
  • mysql root允许远程连接

    在开发测试环境 xff0c 有时为了方便我们需要让root用户也可以远程连接 下面就讲一下如何设置 简明教程 连接mysql 不废话3行命令搞定 xff0c 不明白的看下面分步讲解 mysql span class token operat
  • windows http-server 因为在此系统上禁止运行脚本

    我想在windows中运行 http server 安装方法 xff1a span class token function npm span span class token function install span http serv
  • windows开启远程桌面

    现在的远程桌面工具很丰富 xff0c 向日葵 xff0c ToDesk TeamViewer 都是很简单易用的 但是在没有外网的场景下这些软件就不太好用了 今天来简单讲一下如果开启windows自带的远程桌面功能 环境 我这里以window
  • windows局域网传文件5种常用方法

    谈到文件分享 xff0c 在可以连接外网的情况下 xff0c 方法数不胜数 比如 xff1a QQ xff0c 微信 xff0c 邮件等等 那么如果无有外网 xff0c 在局域网下如何传输 远程桌面 在不安装第三方软件的情况下 xff0c
  • windows 11文件夹共享踩坑记录

    在windows 2008R2做文件共享一次就成功了 xff0c 没有什么特别之处 但是我在windows11中做文件共享 xff0c 请求的时候 总是提示 xff1a 登录失败 未知的用户名或错误密码 解决思路 在网上找答案 xff0c
  • SQL Server 2014安装笔记

    最近要部署一个项目 xff0c 需要用到SQL Server 2014 我把安装过程简单记录一下 xff0c 给有需要的朋友吧 下载安装包 在国内微软的官网下载速度还是比较慢的 xff0c 我是从 https msdn itellyou c
  • archlinux安装nodejs版本管理器nvm

    AUR安装 yay S nvm 安装完成以后并不是立马可以使用 xff0c 具体看下面 官方说明如下 xff1a You need to span class token builtin class name source span nvm
  • windows2008 JDK8安装内部错误61003

    在windows 2008 R2服务器上安装JDK8 Update341时 xff0c 出错报错内部错误61003情况 现象 原因分析 没有装visual c 43 43 2015 redistributable 解决办法 安装 visua
  • SQL Server Management Studio 访问远程数据库

    刚拿到这个软件时 xff0c 只会连接本地的数据库 服务器名称下拉框中的数据不知道怎么维护 后来才发现这个远程可能当作输入框使用 输入连接字符串就可以连接了 连接字符串 比如java中的jdbc连接字符串是 xff1a jdbc sqlse
  • SqlServer 导出导入表结构与数据

    在运维和数据备份的时候 xff0c 偶尔会需要导出表结构与数据 那么具体如何操作呢 xff1f 事先说明一下 xff0c 本文写的比较仓促 xff0c 质量一般 xff0c 仅供参考 环境 这里以Microsoft SQL Server M
  • 设计模式之【组合模式】,树形结构的完美解决方案

    文章目录 一 什么是组合模式1 组合模式三大角色2 组合模式应用场景3 组合模式注意事项和细节 二 透明组合模式1 学院院系案例2 透明组合模式总结 三 安全组合模式1 linux目录系统案例2 安全组合模式总结 四 源码中使用的组合模式1
  • Sql Server 脚本创建新的数据库

    基中dbname替换成你的数据库实例名称 D tools SqlServer MSSQL DATA 替换成文件保存的实际路径 span class token comment 创建数据库 span span class token keyw
  • windows使用nginx探索笔记

    在macOS和linux中使用nginx我早已经轻车熟路 突然切到windows的环境中 xff0c 我反而不会用了 于是我就记一下笔记吧 本篇写的比较冗长 xff0c 精简版本见 windows使用nginx https blog csd