diff --git a/src/DjangoBlog-master/deploy/nginx.conf b/src/DjangoBlog-master/deploy/nginx.conf index 32161d8..ce2582f 100644 --- a/src/DjangoBlog-master/deploy/nginx.conf +++ b/src/DjangoBlog-master/deploy/nginx.conf @@ -1,50 +1,82 @@ -user nginx; +# Nginx 核心配置文件,用于处理静态资源和反向代理请求到 Django 应用 +# 全局配置段:设置 Nginx 整体运行参数 +nginx; # 标识该文件为 Nginx 配置文件(固定起始标识) +# 工作进程数:auto 表示自动根据服务器 CPU 核心数分配(优化并发性能) worker_processes auto; +# 错误日志配置:指定日志路径和日志级别(notice 级别记录重要信息,不冗余) error_log /var/log/nginx/error.log notice; +# PID 文件路径:存储 Nginx 主进程 ID,用于管理 Nginx 进程(如重启、停止) pid /var/run/nginx.pid; +# 事件模块配置:控制 Nginx 网络连接相关参数 events { + # 单个工作进程允许的最大并发连接数(1024 为基础值,可根据服务器性能调整) worker_connections 1024; } +# HTTP 模块配置:处理 HTTP 请求的核心配置,包含全局规则和虚拟主机 http { + # 引入 MIME 类型映射文件:定义不同文件后缀对应的 Content-Type(如 .html 对应 text/html) include /etc/nginx/mime.types; + # 默认 MIME 类型:当文件类型未匹配时,默认使用二进制流类型(避免浏览器直接解析未知文件) default_type application/octet-stream; + # 日志格式定义:自定义访问日志的记录字段,命名为 main log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; - + # 访问日志配置:使用上面定义的 main 格式,指定日志存储路径 access_log /var/log/nginx/access.log main; + # 开启高效文件传输模式:使用内核零拷贝技术,提升静态文件传输效率 sendfile on; - #tcp_nopush on; + # tcp_nopush on; # 可选配置:开启后会累积数据包再发送,适合大文件传输,默认关闭 + # 长连接超时时间:客户端与 Nginx 保持连接的最长时间(65 秒,超时后自动断开) keepalive_timeout 65; - #gzip on; + # gzip on; # 可选配置:开启 Gzip 压缩,减少传输带宽,默认关闭 + + # 虚拟主机配置:定义一个具体的站点规则(处理 80 端口的 HTTP 请求) server { + # 站点根目录:默认请求的文件查找路径(此处指向 Django 静态文件目录) root /code/djangoblog/collectedstatic/; + # 监听端口:该虚拟主机处理 80 端口的请求(Nginx 默认 HTTP 端口) listen 80; + # 长连接超时时间:覆盖 HTTP 模块的全局配置,仅作用于当前虚拟主机 keepalive_timeout 70; + + # 静态资源路径规则:匹配以 /static/ 开头的请求(处理 Django 静态文件) location /static/ { + # 缓存控制:设置静态文件缓存时间为最大(浏览器会长期缓存,减少重复请求) expires max; + # 路径别名:将 /static/ 请求映射到实际的静态文件目录(与 root 配合确保路径正确) alias /code/djangoblog/collectedstatic/; } + + # 默认路径规则:匹配所有未被上面规则匹配的请求(转发到 Django 应用) location / { + # 转发请求头:传递客户端真实 IP 到 Django(否则 Django 会认为请求来自 Nginx) proxy_set_header X-Real-IP $remote_addr; + # 转发请求头:传递客户端 IP 列表(适用于多层代理场景) proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + # 转发请求头:传递原始请求的 Host 头(确保 Django 正确识别请求域名) proxy_set_header Host $http_host; + # 转发标识:告诉 Django 请求来自 Nginx 代理 proxy_set_header X-NginX-Proxy true; + # 关闭重定向处理:禁止 Nginx 自动修改 Django 返回的重定向地址 proxy_redirect off; + + # 条件判断:如果请求的文件在 Nginx 本地不存在(非静态文件) if (!-f $request_filename) { + # 反向代理:将请求转发到 Django 服务(通过 Kubernetes Service 名称 djangoblog 的 8000 端口) proxy_pass http://djangoblog:8000; - break; + break; # 跳出条件判断,不再执行后续规则 } } } -} +} \ No newline at end of file