|
|
|
|
@ -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; # 跳出条件判断,不再执行后续规则
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|