使用踩坑记录
# Nginx使用踩坑记录
# 文件过大
当在使用Nginx时遇到“413 Request Entity Too Large”错误,通常是因为上传文件的大小超过了Nginx配置中允许的最大值。要解决此问题,可以通过调整Nginx配置文件中的client_max_body_size参数来增加允许上传文件的最大大小。 修改 Nginx 配置
在 Nginx 中,可以通过修改 client_max_body_size
属性来解决这个问题。
找到配置文件,nginx.conf进行设置,以下是几种不同程度的设置,
在 http 节点下(全局设置)
http {
client_max_body_size 20m; # 设置为20MB
}
2
3
在 server 节点下(服务器级别)
server {
client_max_body_size 20m; # 设置为20MB
}
2
3
在 location 节点下(特定路由)
location /upload {
client_max_body_size 20m; # 设置为20MB
}
2
3
修改完配置文件后,重载 Nginx 配置使之生效:
sudo nginx -s reload
注意:当执行
nginx.exe -s reload
后,原本的 Nginx 服务进程数量会增加,是正常现象,具体原因与 Nginx 的平滑重载机制有关。
Nginx 采用 Master-Worker 多进程模型:
- Master 进程:负责管理配置、启动/停止 Worker 进程,以及接收外部信号(如
reload
) - Worker 进程:实际处理请求的子进程。默认配置下,Worker 数量通常与 CPU 核心数一致(例如 2 个) 当执行
nginx -s reload
时,Nginx 会按以下步骤操作:
- Master 进程接收 HUP 信号:触发配置重载流程
- 校验新配置语法:若语法错误,流程终止,旧配置继续生效
- 启动新 Worker 进程:基于新配置生成新的 Worker 进程
- 旧 Worker 进程优雅退出:旧 Worker 停止接收新请求,但会继续处理已建立的连接,直到完成后才退出
# 路径映射问题
写后缀的时候,一定不要写重了。
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
# location /gen {
# root html;
# index index.html index.htm;
# }
location /sky {
root /opt/homebrew/var/www/sky;
index index.html index.htm;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
根据上述例子,请问,访问本机上访问,http://localhost:8080/sky,返回的内容是 /opt/homebrew/var/www/sky/index.html 文件 对吗?
答案:不是的。
在上述例子中,当你访问 http://localhost:8080/sky
时,Nginx 会尝试返回 /opt/homebrew/var/www/sky/sky/index.html
文件,注意,这里是两个sky。
# 修正
如果你希望直接访问 http://localhost:8080/sky
并返回 /opt/homebrew/var/www/sky/index.html
文件,则需要调整 location
块的配置。
你应该使用 alias
而不是 root
,或者修改 location
的路径匹配方式。以下是两种实现方法:
# 1-使用alias
location /sky/ {
alias /opt/homebrew/var/www/sky/;
index index.html index.htm;
}
2
3
4
这种方法中,/sky/
请求会被直接映射到 /opt/homebrew/var/www/sky/
目录下,所以 http://localhost:8080/sky/
会正确地指向 /opt/homebrew/var/www/sky/index.html
。
# 2-调整 location
路径匹配
location /sky {
root /opt/homebrew/var/www;
index index.html index.htm;
}
2
3
4
在这个配置中,Nginx 会把 /sky
请求映射到 /opt/homebrew/var/www/sky
目录下,因此 http://localhost:8080/sky
也会正确地指向 /opt/homebrew/var/www/sky/index.html
。