From d49ff1446d5dde479b3c3722d3a63f36080611da Mon Sep 17 00:00:00 2001 From: pfy5v82cw <1667039373@qq.com> Date: Sun, 26 Oct 2025 23:02:14 +0800 Subject: [PATCH] Update nginx.conf --- src/DjangoBlog-master/deploy/nginx.conf | 61 +++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/src/DjangoBlog-master/deploy/nginx.conf b/src/DjangoBlog-master/deploy/nginx.conf index 32161d8..5aadcb7 100644 --- a/src/DjangoBlog-master/deploy/nginx.conf +++ b/src/DjangoBlog-master/deploy/nginx.conf @@ -1,50 +1,105 @@ -user nginx; +# 声明使用Nginx服务(配置文件起始标识) +user nginx; + +# 设置工作进程数量,"auto"表示自动根据CPU核心数调整(优化并发处理能力) worker_processes auto; +# 错误日志配置:日志路径为/var/log/nginx/error.log,日志级别为notice(记录警告及以上级别信息) error_log /var/log/nginx/error.log notice; + +# 进程ID文件路径:存储Nginx主进程PID的文件,用于进程管理(如启动/停止服务) pid /var/run/nginx.pid; +# 事件模块配置:控制Nginx处理连接的方式 events { + # 每个工作进程的最大连接数(并发处理能力上限,默认1024,可根据服务器性能调整) worker_connections 1024; } +# HTTP核心模块配置:处理HTTP协议的核心设置,包含所有与HTTP请求相关的配置 http { + # 引入MIME类型映射文件(定义不同文件扩展名对应的Content-Type,如.html对应text/html) include /etc/nginx/mime.types; + + # 默认MIME类型:当无法识别文件类型时,默认按二进制流(application/octet-stream)处理 default_type application/octet-stream; + # 定义日志格式,命名为"main"(后续可通过此名称引用该格式) + # 日志字段说明: + # $remote_addr:客户端IP地址 + # $remote_user:客户端认证用户名(未认证则为空) + # [$time_local]:访问时间(本地时区) + # "$request":完整请求行(如GET /index.html HTTP/1.1) + # $status:HTTP响应状态码(如200、404) + # $body_bytes_sent:发送给客户端的响应体大小(字节) + # "$http_referer":请求来源页面(Referer头信息) + # "$http_user_agent":客户端浏览器/设备信息(User-Agent头) + # "$http_x_forwarded_for":代理链中的客户端真实IP(多代理场景下使用) log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; + # 访问日志配置:使用上述"main"格式,日志路径为/var/log/nginx/access.log access_log /var/log/nginx/access.log main; + # 启用高效文件传输模式(通过内核缓冲区直接发送文件,减少用户态与内核态切换,提升性能) sendfile on; + + # 关闭tcp_nopush(与sendfile配合使用,开启时会累积数据再一起发送,适合大文件;此处关闭则实时发送) #tcp_nopush on; + # 长连接超时时间:客户端与服务器保持连接的最大时长(秒),超时后自动关闭连接 keepalive_timeout 65; + # 关闭gzip压缩(若需启用,取消注释并配置,可压缩响应数据减少传输量) #gzip on; + # 虚拟主机配置:定义一个具体的网站服务(可配置多个server块实现多网站) server { + # 网站根目录:默认请求的文件查找路径(此处指向Django静态文件收集目录) root /code/djangoblog/collectedstatic/; + + # 监听端口:该虚拟主机监听80端口(HTTP默认端口) listen 80; + + # 该虚拟主机的长连接超时时间(覆盖http块中的全局设置,此处为70秒) keepalive_timeout 70; + + # 静态文件路径配置:匹配以/static/开头的请求 location /static/ { + # 静态文件缓存策略:设置为最大缓存时间(浏览器会长期缓存,适合不常变化的静态资源) expires max; + + # 静态文件实际路径:将/static/请求映射到该目录(与root的区别是会替换location路径) alias /code/djangoblog/collectedstatic/; } + + # 主请求处理:匹配所有其他路径的请求(除上述/static/外) location / { + # 设置代理请求头:传递客户端真实IP给后端服务 proxy_set_header X-Real-IP $remote_addr; + + # 设置代理请求头:传递代理链中的客户端IP列表(多代理场景) proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + # 设置代理请求头:传递原始请求的Host头信息(后端服务用于识别域名) proxy_set_header Host $http_host; + + # 自定义代理标识头:后端服务可通过此头判断请求来自Nginx代理 proxy_set_header X-NginX-Proxy true; + + # 关闭代理重定向:禁止Nginx自动修改后端服务返回的Location头 proxy_redirect off; + + # 条件判断:如果请求的文件在本地不存在(!-f表示非文件) if (!-f $request_filename) { + # 反向代理:将请求转发到名为djangoblog的服务的8000端口(通常是Django的uWSGI/Gunicorn服务) proxy_pass http://djangoblog:8000; - break; + # 跳出当前if块,不再执行后续逻辑 + break; } } } -} +} \ No newline at end of file