Windows 上装 Nginx 是「解压」,不是「安装」。 真正要动脑的是把 worker 数与连接上限算清楚。
10.1 讲了 Nginx 的架构,这一节开始动手装。 Windows 这条路最短,适合先在本地把配置摸熟。
一、三步就装完
① 下载:官网给的是 zip 包,选 stable 那个。
② 解压:放到一个没有中文、没有空格的路径。
比如 D:\nginx,别放 C:\Program Files。
③ 启动:在解压目录里 start nginx。
命令行一闪就没了,那是正常的——它转后台了。
验证方法:浏览器打开 http://localhost,
看到 Welcome to nginx 那一页就成了。
看不到就去看 logs/error.log,里面写得很清楚。
二、它不是 Windows 服务
这一点最容易让人误判:
start nginx 之后,关掉命令行窗口它不会停,
但重启机器就没了。
想要开机自启,得自己把它注册成服务——要么用 nssm 这类工具包一层,
要么用任务计划程序。
直接扔进「启动」文件夹是最糙但也能用的办法。
停和重载各有专门命令:
nginx -s stop 立刻停,nginx -s quit 等处理完再停,
nginx -s reload 平滑重载配置。
直播用 quit 和 reload,别用 stop。
三、worker 数与连接上限要算
worker_processes auto 到底等于几?
等于 CPU 逻辑核数。
这个值是算出来的,不是拍脑袋定的。
最大连接数 = worker_processes × worker_connections。 但这只是理论上限,实际会被两样东西压住:文件句柄与内存。
Linux 上默认一个进程只能开 1024 个句柄,
所以 worker_connections 写 65535 也没用,
必须同时改系统限制与 worker_rlimit_nofile。
这是「明明配了却上不去」的标准答案,Windows 上也有类似的句柄限制。
还有一个常被忽略的: Nginx 做反向代理时,一个客户端连接要用掉两个连接额度——一个对客户端,一个对后端。 所以理论值再打个对折,才是安全区。
四、动手 Demo:Windows 下装 Nginx——解压即用,容量得自己算
真测本机几个核、80 端口在不在, 再按公式把最大连接数算出来。
import os, socket
def free(p):
s = socket.socket()
try:
s.bind(("0.0.0.0", p))
return True
except OSError:
return False
finally:
s.close()
cores = os.cpu_count()
conn = 1024
print("逻辑 CPU 核数 %d" % cores)
print("worker_processes %d" % cores)
print("worker_connections %d" % conn)
print("理论最大连接 %d" % (cores * conn))
print("80 端口能用吗 %s" % ("能" if free(80) else "被占"))
print("8080 端口能用吗 %s" % ("能" if free(8080) else "被占"))
实跑输出:
--------------------------------------------------------------------
Windows 下装 Nginx——解压即用,容量得自己算
--------------------------------------------------------------------
**① Windows 上装 Nginx 是「解压」,不是「安装」**
**下载下来是个 zip,解压到一个没有空格的路径就完事了。**
**启动用 `start nginx`,停用 `nginx -s stop`,改完配置用 `nginx -s reload`。**
**三个必须知道的点:**
**① 路径不能有中文和空格**,**否则会出现莫名其妙的路由失败。**
**② 它不是 Windows 服务**,**关掉命令行窗口不会停,但重启机器就没了。**
**③ 端口 80 常被占用**,**IIS、Skype、某些驱动都会抢。**
**② 真测:80 端口在不在,本机几个核**
**`worker_processes auto` 到底等于几,取决于 CPU 核数。**
**这个值是算出来的,不是拍脑袋。**
项 实测值
--------------------------------------
逻辑 CPU 核数 8
worker_processes auto 8
worker_connections 默认 1024
理论最大连接 8192
80 端口能用吗 能
8080 端口能用吗 能
**8 个 worker 乘 1024 就是 8192 个连接,这是理论上限。**
**实际达不到,因为还要受两样东西压着:文件句柄与内存。**
**Linux 上默认一个进程只能开 1024 个句柄,**
**所以 `worker_connections` 写再大也没用,**
**必须同时改 `ulimit -n` 与 `worker_rlimit_nofile`。**
**这是「明明配了 65535 却还是上不去」的标准答案。**
**③ 一份最小配置,先看结构**
**把这份配置摊开,只有四个块:**
worker_processes auto;
events {
worker_connections 1024;
}
http {
server {
listen 80;
location / {
root html;
index index.html;
}
}
}
**`worker_processes` 在最外层,`events` 与 `http` 是它的两个兄弟。**
**`server` 在 `http` 里,`location` 在 `server` 里。**
**这个层级关系决定了指令能写在哪——写错层直接启动失败。**
**10.4 会专门把这件事讲透。**
auto 就是核数,这台机器上是 实测值 个。
理论上限要乘出来看,不是拍一个 65535 就好。
80 端口是最容易被抢的,IIS、Skype、某些驱动都会占。
被占了就改 8080,配置里 listen 8080; 一行就够。
30 秒实验
- 把
worker_connections改成 65535,算理论上限——核数乘 65535,看着很大,但句柄跟不上就是空话。 - 把
worker_processes写死成 2,想想什么场景该这么干——机器上还跑着别的吃 CPU 的服务,得给它留核。 - 把 80 改成 8080,看访问地址怎么变——
http://localhost:8080,端口不能省。
常见误区
- 「装 Nginx 要点下一步」——Windows 上是解压,没有安装向导。
- 「start 之后关窗口就停了」——它转后台了,得 nginx -s stop。
- 「worker_connections 越大越好」——句柄不放开,配多大都白配。
自测三问(点开对答案)
1. `worker_processes auto` 等于几? —— **等于 CPU 逻辑核数。** 2. 为什么 `worker_connections` 不能只看配置? —— **还受文件句柄上限压着**,两处都要改。 3. 平滑重载配置用哪个命令? —— **`nginx -s reload`**,不断连接。- ☐ (本节完,下一节 10.2.2 Windows 10 下安装 OpenSSL)