|
|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|