当前位置: 首页 > news >正文

Nginx 生产配置文件

nginx 代理 负载均衡项目配置

Flask 项目

在生产环境中,使用 Nginx 和 Gunicorn 部署 Flask 项目是一种常见的架构。Nginx 作为反向代理服务器,负责处理客户端请求并将其转发给 Gunicorn 。

1、Nginx 配置文件

# 全局块
user www-data; # 设置运行 Nginx 的用户
worker_processes auto; # 自动设置工作进程数(等于 CPU 核心数)
error_log /var/log/nginx/error.log warn; # 错误日志路径和级别
pid /var/run/nginx.pid; # 主进程 PID 文件# Events 块
events {worker_connections 1024; # 每个工作进程的最大连接数multi_accept on; # 同时接受多个连接use epoll; # 使用高效的事件模型(适用于 Linux)
}# HTTP 块
http {include /etc/nginx/mime.types; # 包含 MIME 类型定义default_type application/octet-stream; # 默认 MIME 类型# 日志格式log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main; # 访问日志路径和格式sendfile on; # 启用高效文件传输模式tcp_nopush on; # 合并小包发送,提升性能tcp_nodelay on; # 禁用 Nagle 算法,减少延迟keepalive_timeout 65; # 长连接超时时间client_max_body_size 20M; # 限制客户端上传文件的最大大小gzip on; # 启用 GZIP 压缩gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;gzip_vary on; # 向客户端声明支持 GZIP 压缩# Server 块server {listen 80; # 监听 HTTP 请求server_name example.com www.example.com; # 绑定的域名# SSL 配置(如果启用了 HTTPS)listen 443 ssl http2; # 监听 HTTPS 请求ssl_certificate /etc/nginx/ssl/example.com.crt; # SSL 证书路径ssl_certificate_key /etc/nginx/ssl/example.com.key; # SSL 私钥路径ssl_protocols TLSv1.2 TLSv1.3; # 支持的 SSL 协议版本ssl_ciphers HIGH:!aNULL:!MD5; # 加密算法ssl_prefer_server_ciphers on; # 优先使用服务端加密算法# 根目录和索引文件root /var/www/flask_app; # Flask 应用的静态文件目录index index.html;# 处理静态文件location /static/ {alias /var/www/flask_app/static/; # 静态文件路径expires 30d; # 设置缓存时间}# 反向代理到 Gunicornlocation / {proxy_pass http://127.0.0.1:8000; # Gunicorn 的监听地址proxy_set_header Host $host; # 转发主机头proxy_set_header X-Real-IP $remote_addr; # 转发真实 IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 转发代理链 IPproxy_set_header X-Forwarded-Proto $scheme; # 转发协议类型proxy_read_timeout 90; # 设置读取超时时间proxy_redirect off; # 禁用重定向}# 错误页面error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html; # 错误页面路径}}
}

2、Gunicorn 配置文件

Gunicorn 是一个 WSGI HTTP 服务器,用于 Flask 应用,以下是一个 配置文件 (gunicorn_config.py)

# 绑定地址和端口
bind = "127.0.0.1:8000"# 工作进程数(建议为 CPU 核心数的 2-4 倍)
workers = 4# 工作进程类型(推荐使用 gthread 或 sync)
worker_class = "gthread"# 每个线程池中的线程数
threads = 2# 超时时间(秒)
timeout = 30# 最大请求数(防止内存泄漏)
max_requests = 1000
max_requests_jitter = 200# 日志配置
accesslog = "/var/log/gunicorn/access.log"
errorlog = "/var/log/gunicorn/error.log"
loglevel = "info"# 进程名称
proc_name = "flask_app"# 是否启用守护进程模式
daemon = True# 用户和组
user = "www-data"
group = "www-data"

Django 项目

在生产环境中,使用 Nginx 和 uWSGI 部署 Django 是一种常见的架构。Nginx 作为反向代理服务器,负责处理客户端请求并将其转发给 uWSGI 。

1、Nginx 配置文件

# 全局块
user www-data; # 设置运行 Nginx 的用户
worker_processes auto; # 自动设置工作进程数(等于 CPU 核心数)
error_log /var/log/nginx/error.log warn; # 错误日志路径和级别
pid /var/run/nginx.pid; # 主进程 PID 文件# Events 块
events {worker_connections 1024; # 每个工作进程的最大连接数multi_accept on; # 同时接受多个连接use epoll; # 使用高效的事件模型(适用于 Linux)
}# HTTP 块
http {include /etc/nginx/mime.types; # 包含 MIME 类型定义default_type application/octet-stream; # 默认 MIME 类型# 日志格式log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main; # 访问日志路径和格式sendfile on; # 启用高效文件传输模式tcp_nopush on; # 合并小包发送,提升性能tcp_nodelay on; # 禁用 Nagle 算法,减少延迟keepalive_timeout 65; # 长连接超时时间client_max_body_size 20M; # 限制客户端上传文件的最大大小gzip on; # 启用 GZIP 压缩gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;gzip_vary on; # 向客户端声明支持 GZIP 压缩# Server 块server {listen 80; # 监听 HTTP 请求server_name example.com www.example.com; # 绑定的域名# SSL 配置(如果启用了 HTTPS)listen 443 ssl http2; # 监听 HTTPS 请求ssl_certificate /etc/nginx/ssl/example.com.crt; # SSL 证书路径ssl_certificate_key /etc/nginx/ssl/example.com.key; # SSL 私钥路径ssl_protocols TLSv1.2 TLSv1.3; # 支持的 SSL 协议版本ssl_ciphers HIGH:!aNULL:!MD5; # 加密算法ssl_prefer_server_ciphers on; # 优先使用服务端加密算法# 根目录和索引文件root /var/www/django_app; # Django 应用的静态文件目录index index.html;# 处理静态文件location /static/ {alias /var/www/django_app/static/; # 静态文件路径expires 30d; # 设置缓存时间}# 处理媒体文件location /media/ {alias /var/www/django_app/media/; # 媒体文件路径expires 30d; # 设置缓存时间}# 反向代理到 uWSGIlocation / {include uwsgi_params; # 包含 uWSGI 参数uwsgi_pass unix:/var/run/uwsgi/django_app.sock; # uWSGI 的 Unix Socket 路径uwsgi_read_timeout 90; # 设置读取超时时间}# 错误页面error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html; # 错误页面路径}}
}

2、uWSGI 是一个 应用服务器,以下是一个配置文件实例 (uwsgi.ini)

[uwsgi]
# 项目相关配置
chdir = /var/www/django_app # Django 项目的根目录
module = django_app.wsgi:application # WSGI 模块路径
home = /var/www/django_app/venv # Python 虚拟环境路径# 进程和线程配置
master = true # 启用主进程
processes = 4 # 工作进程数(建议为 CPU 核心数的 2-4 倍)
threads = 2 # 每个进程的线程数
enable-threads = true # 启用线程支持# Socket 配置
socket = /var/run/uwsgi/django_app.sock # 使用 Unix Socket
chmod-socket = 660 # 设置 Socket 文件权限
vacuum = true # 进程退出时清理 Socket 文件# 日志配置
logto = /var/log/uwsgi/django_app.log # 日志文件路径# 性能优化
buffer-size = 32768 # 增大缓冲区大小
harakiri = 60 # 超时时间(秒)
max-requests = 1000 # 最大请求数(防止内存泄漏)
max-requests-jitter = 200 # 随机化最大请求数# 用户和组
uid = www-data # 运行用户
gid = www-data # 运行用户组# 守护进程模式
daemonize = /var/log/uwsgi/django_app_daemon.log # 后台运行日志

http://www.mrgr.cn/news/97353.html

相关文章:

  • 数据分析-Excel-学习笔记Day1
  • TYUTJava阶段测试
  • 新一代AI架构实践:数字大脑AI+智能调度MCP+领域执行APP的黄金金字塔体系
  • java发送http请求
  • k8s 1.23升级1.24
  • k8s之Ingress讲解
  • TDengine 从入门到精通(2万字长文)
  • 线程池/内存池/mysql连接池
  • 15分钟完成Odoo18.0安装与基本配置
  • Nginx 常见面试题
  • 现代Web表单验证的终极解决方案:构建可扩展的企业级验证系统
  • sentinel新手入门安装和限流,热点的使用
  • 003集——《利用 C# 与 AutoCAD API 开发 WPF 随机圆生成插件》(侧栏菜单+WPF窗体和控件+MVVM)
  • Gerapy二次开发:用户管理专栏页面样式与功能设计
  • 2024 天梯赛——工业园区建设题解
  • C++ 内存访问模式优化:从架构到实践
  • 协同控制与分布式控制 —— 理论、案例与交互式 GUI 实现
  • 进程内存分布--之理论知识
  • 从零实现本地大模型RAG部署
  • 小刚说C语言刷题——第16讲 switch语句