如何轻松配置应用?

uWSGI 是一个高性能的 Web 服务器网关接口(WSGI),用于部署 Python Web 应用(如 Django、Flask),以下是详细的配置步骤和命令指南,遵循最佳实践并兼顾安全性与性能:


基础安装与环境准备

  1. 安装 uWSGI

    pip install uwsgi  # 推荐使用虚拟环境
    • 验证安装:uwsgi --version
  2. 准备示例应用
    创建一个测试文件 myapp.py

    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World from uWSGI"]

uWSGI 命令的 4 种配置方式

方式 1:命令行直接运行(测试用)

uwsgi --http :8000 --wsgi-file myapp.py
  • --http:监听 HTTP 端口(生产环境建议用 Nginx 反向代理)
  • --wsgi-file:指定 WSGI 应用入口文件

方式 2:配置文件(推荐生产环境)

创建 myapp.ini 配置文件:

[uwsgi]module = myapp:application  # 应用入口(文件名:应用对象)
master = true               # 启用主进程
processes = 4               # 工作进程数
threads = 2                 # 每个进程的线程数
# 网络与协议
socket = :3031              # 使用 socket 与 Nginx 通信
http = :8000                # 直接 HTTP 访问(调试时启用)
# 资源与日志
chdir = /path/to/your/project  # 项目根目录
vacuum = true               # 退出时清理临时文件
daemonize = /var/log/uwsgi/myapp.log  # 后台运行并记录日志
pidfile = /tmp/uwsgi.pid    # 主进程 PID 文件

启动命令

uwsgi --ini myapp.ini  # 加载配置文件

方式 3:通过 Emperor 模式管理多应用

uwsgi --emperor /etc/uwsgi/vassals/ --daemonize /var/log/uwsgi/emperor.log
  • 将每个应用的配置(如 myapp.ini)放入 /etc/uwsgi/vassals/
  • uWSGI 自动监控配置变化并重启应用

方式 4:环境变量注入

在配置文件中动态读取环境变量:

[uwsgi]
env = DJANGO_SETTINGS_MODULE=myproject.settings.prod  # 设置环境变量

Nginx 反向代理配置

修改 Nginx 站点配置(/etc/nginx/sites-available/myapp):

server {
    listen 80;
    server_name example.com;
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:3031;  # 与 uWSGI socket 端口一致
        uwsgi_read_timeout 300;     # 超时设置
    }
}

重启 Nginx:sudo systemctl restart nginx


安全与性能优化

  1. 安全实践

    • 使用非 root 用户运行:uid = www-data gid = www-data
    • 禁用危险功能:disable-logging = true(关闭冗余日志)
    • 启用 chmod-socket = 660 限制 socket 权限
  2. 性能调优

    processes = $(nproc) * 2  # 按 CPU 核心数调整
    max-requests = 1000       # 防止内存泄漏
    harakiri = 30             # 强制终止超时进程(秒)
    buffer-size = 65536       # 大文件上传支持

常见问题解决

  • 错误:no app loaded
    检查 module 路径是否正确(如 django.core.wsgi:get_wsgi_application())。

  • 502 Bad Gateway
    确保 Nginx 的 uwsgi_pass 端口与 uWSGI 的 socket 一致。

  • 日志排查
    使用 uwsgi --ini myapp.ini --logto /tmp/uwsgi_debug.log 输出详细日志。


系统服务管理(Systemd)

创建服务文件 /etc/systemd/system/uwsgi.service

[Unit]
Description=uWSGI Emperor
After=network.target
[Service]
User=www-data
Group=www-data
ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals
Restart=always
KillSignal=SIGQUIT
Type=notify
[Install]
WantedBy=multi-user.target

启动服务:

sudo systemctl daemon-reload
sudo systemctl start uwsgi
sudo systemctl enable uwsgi

引用说明

  • uWSGI 官方文档:uWSGI Options Documentation
  • Nginx 配置参考:Module ngx_http_uwsgi_module
  • 安全实践依据:OWASP Deployment Security

通过配置文件管理 uWSGI 是生产环境的最佳实践,结合 Nginx 反向代理和 Systemd 守护进程,可构建高可用、安全的 Web 服务,定期检查日志并更新版本以修复漏洞。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9445.html

(0)
酷番叔酷番叔
上一篇 2025年7月31日 14:44
下一篇 2025年7月31日 15:01

相关推荐

  • 电脑执行命令新手怎么操作?

    在电脑上执行命令需打开系统命令行工具:Windows使用“运行”对话框输入cmd或搜索“命令提示符”;macOS/Linux通过“终端”应用访问,打开后直接输入命令并按回车键执行。

    2025年7月9日
    18800
  • 国内OSS云存储备份屡次失败,原因何在?

    多因网络波动、带宽瓶颈、服务商限流或客户端配置错误导致。

    2026年2月26日
    7700
  • 100G高防服务器国内应用优缺点分析?

    优点:防御强,抗大流量攻击稳;缺点:价格贵,需备案,带宽限制多。

    2026年3月5日
    8000
  • IIS服务是否启动如何检查?

    检查 IIS 是否运行:,1. 打开 **Windows 服务管理器**,查找 **World Wide Web Publishing Service (W3SVC)** 状态是否为 **“正在运行”**。,2. 在 **任务管理器** 的 **“服务”** 或 **“详细信息”** 标签页中,查看相关 IIS 进程(如 w3wp.exe)是否存在。,3. 尝试访问服务器上的网站或默认页面(如 http://localhost),看能否打开,任一方法确认即可。

    2025年7月27日
    16000
  • Linux下vi如何删除IP地址?

    vi(或vim)是Linux系统中功能强大的文本编辑器,当需要修改配置文件(如/etc/network/interfaces或/etc/sysconfig/network-scripts/ifcfg-eth0)删除IP地址时,掌握以下方法至关重要,操作前务必备份文件(例如使用cp 原文件 原文件.bak),避免……

    2025年7月13日
    18400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信