Python技巧
daphne+nginx+channels+redis 在Ubuntu 24.04布署流程
ubuntu24设置uwsgi和nginx开机自启动(设置并开启service)
如何在Ubuntu 24.04上使用uwsgi+django+Nginx来部署python3应用程序
开启nginx 开机自启动服务
网站建设
linux ubuntu centos 清理垃圾
在nginx 里 配置跨域访问控制
MYSQL数据库常用操作命令
将MYSQL数据库从一台服务器移植到另一台服务器
向Mysql插入Emoji表情时失败了,python代码报以下异常:InternalError: 1366
Centos7+nginx下为域名免费安装ssl证书
Centos7,Centos8防火墙相关的命令
Centos7.5+nginx布署python3+django WEB服务器
js/jQuery技巧
VPS推荐
如何在 本地win11 安装 Rclone,并使用Rclone上传文件到Cloudflare
域名申请
111111
NameSilo域名注册的流程
构建安卓APP
Android Studio 如何修改 Package Name
Android使用WebView将H5网站打包成apk,如何去掉标题,如何更换应用图标
Android使用WebView加载网站,无法上传图片的解决方法
linux ubuntu centos 清理垃圾
在 Cloudflare 后面出现 502 Bad Gateway,用一句通俗的话来解释就是:Cloudflare(作为网关)成功接到了用户的请求,但在它试图联系你的源站服务器(Origin Server,比如 Nginx/Apache)时,你的服务器返回了一个无效的/错误的响应,或者直接断开了连接。 简单来说,Cloudflare 是健康的,但你的后端服务器或应用顶不住了/出错了。
一,为什么磁盘满了会触发 502? Nginx 作为反向代理,在接收后端 uwsgi(Django/Python)返回的数据时,如果返回的内容比较大,Nginx 会先把它当作临时文件缓存到磁盘的 /var/cache/nginx/uwsgi_temp/ 路径下。 现在你的磁盘一滴空间都不剩了(No space left on device),Nginx 无法写入缓存,也无法写入 access.log 访问日志,导致整个转发流程直接崩溃,最终只能给 Cloudflare 回应 502 错误。
二,第一步:确认磁盘占用情况 在终端输入以下命令,看看是哪个挂载点满了(通常是 / 根目录): df -h 第二步:紧急释放空间(删掉无用的大文件) 由于 Nginx 的日志已经因为写不进去而报警,通常首要的大头就是日志文件或者缓存文件。 清空 Nginx 的大日志(不要直接 rm,用 > 清空): ls -lh /var/log/nginx/ # 如果发现 access.log 或 error.log 很大(比如好几个G),直接运行下面这行清空它: > /var/log/nginx/access.log > /var/log/nginx/error.log
三,为了防止过几天又被塞爆,建议做两件事: 关闭 Nginx 没必要的缓存或限制大小: 如果 uwsgi 返回的是大文件或高频动态内容,在 Nginx 的 location / 块中,可以适当调整或关闭不必要的临时文件写入,或者限制大小。 开启日志轮转(Logrotate)或直接关闭 access_log: 如果这个站点目前正在遭受疯狂的爬虫扫描,而你不需要统计这些垃圾访问,可以直接在 Nginx 配置中把该站点的 access_log 关掉: server { ... access_log off; # 彻底关闭访问日志,防止塞爆磁盘 error_log /var/log/nginx/error.log crit; # 只记录严重错误 } 修改完配置后记得 nginx -t 检查,然后 nginx -s reload 生效。
四,抓到大贼了!就是这个名叫 --ini 的文件 这是一个什么文件?可以删除吗? 可以清空,但千万不要直接在 FTP 里右键删除(Delete)! 第一步:在终端(SSH)中运行命令清空它 回到你的命令行工具(连接到 [root@chinase finaldh]# 的那个窗口),确保当前在 /home/finaldh 目录下,执行以下命令强行将它清零: > /home/finaldh/--ini (注意:前面有一个大括号方向的 > 符号,这代表清空文件内容而不删文件。) 执行完后,立刻输入 df -h 检查,你会发现 /dev/vda2 的使用率瞬间从 100% 掉到 20% 左右!空间瞬间释放!
五,如果你既想让网站在后台安全运行(不影响线上访问),又想随时能像以前一样实时查看请求和调试,这里有两种最常用的专业调试方案: 方案一:后台运行 + 实时追踪日志(最推荐) 这是最标准的做法。你让 uWSGI 把日志写进一个文件里(在后台默默运行),然后你用 tail -f 命令去“盯着”这个文件。 1. 启动后端(正确地让它去后台运行,并指定日志为 uwsgi.log): uwsgi -d uwsgi.log --ini finaldh.ini 2. 需要调试时,运行这行命令: tail -f uwsgi.log 妙处: tail -f 会把这个日志文件实时动态地刷在屏幕上。这时你去浏览器访问网站、刷新页面,屏幕上就会源源不断地滚出请求和返回信息,效果和你以前在前台运行一模一样! 退出调试: 随时按 Ctrl + C 退出。这只会关闭你的看日志状态,绝对不会影响网站的运行。
六,如果放任不管,uwsgi.log 同样会像以前的 --ini 一样,迟早有一天会把磁盘再次撑满。 但是,对于“能不能直接用 rm -rf uwsgi.log 删除它”,答案是:绝对不行!千万不要直接 rm。 正确的 3 种“续命”和清理方案 为了不让 uwsgi.log 塞爆磁盘,你以后可以采用以下三种方法: 方法一:安全清空法(最简单,不影响网站运行) 如果你发现 uwsgi.log 已经涨到几个 G 了,想给它瘦身,不要删,要清空。在终端执行这条命令: > /home/finaldh/uwsgi.log 一个大括号方向的 > 符号,意思是“把文件内容清空,但保留这个文件”。uWSGI 进程不会报错,磁盘空间瞬间 100% 释放。 方法二:一劳永逸法——直接彻底关闭 uWSGI 的日志 看你之前的日志,你的网站正遭受大量的爬虫扫描。如果你觉得天天看这些请求很烦,而且你不需要通过 uWSGI 来看调试信息了,你大可彻底关闭它的日志记录。 修改你的 finaldh.ini 配置文件,在里面加上一行 disable-logging = true
七,方法三:Linux 正规军做法——配置 Logrotate(日志轮转) 1. 创建 uWSGI 的 Logrotate 配置文件 Linux 的 Logrotate 配置文件都统一放在 /etc/logrotate.d/ 目录下。我们为你的项目单独创建一个配置文件。 在终端输入以下命令(需要 root 权限): vi /etc/logrotate.d/uwsgi_finaldh 把下面这段标准的配置粘贴进去(请确保里面的 /home/finaldh/uwsgi.log 路径与你实际的日志路径完全一致): /home/finaldh/uwsgi.log { daily rotate 7 missingok notifempty compress delaycompress sharedscripts copytruncate }
八,手动测试,立刻生效 配置好后,Logrotate 默认会每天深夜自动执行。如果你现在就想测试一下,看看它能不能正常工作,可以运行这条命令强行触发一次: logrotate -f /etc/logrotate.d/uwsgi_finaldh 执行完后,你去你的项目目录 /home/finaldh/ 下执行 ls -lh 看看,你会发现: 原来的 uwsgi.log 变成了 0 字节(或者只有几 KB 的新日志)。 旁边多出了一个叫 uwsgi.log.1 的文件。 编辑好内容后,就可以了!完全不需要重启 uwsgi,网站也完全不会断网。 这就是使用 Logrotate 的最大优势。因为我们在配置里使用了 copytruncate 参数,它的运作机制非常聪明: 每天深夜,系统的 Logrotate 服务会自动过来看一眼你的 uwsgi.log。 它会先把 uwsgi.log 复制一份出来(重命名为 uwsgi.log.1)。 紧接着,它在原地瞬间清空原 uwsgi.log 的内容(使其变成 0 字节)。
九,做成一个“一键重启脚本” 天天复制粘贴四行命令不仅容易出错,还容易遇到上面这种抢端口的问题。最正规、最省心的方法是把它们写进一个 Shell 脚本 堆里。 创建脚本 在服务器终端运行: vi /home/aavideo/restart.sh 粘贴以下干净、规范的代码 按 i 进入编辑模式,把下面这段干净的代码粘进去(已经帮你加了延迟和清理):
十,#!/bin/bash echo "1. 正在重新加载 Nginx 配置..." nginx -s reload echo "2. 正在强杀旧的 uWSGI 进程..." pkill -f aavideo.ini -9 # 关键:让系统睡 1 秒钟,等待端口彻底释放 sleep 1 echo "3. 正在启动新的 uWSGI 服务..." cd /home/aavideo uwsgi -d uwsgi.log --ini aavideo.ini echo "⚙️ 服务重启完成!"
十一,粘贴完后,按 Esc,输入 :wq 保存退出。 赋予脚本执行权限 chmod +x /home/aavideo/restart.sh 以后怎么一键重启? 以后网站需要重启时,你再也不用复制那四行命令了。直接登录 SSH,闭着眼睛输入这一行命令回车即可: /home/aavideo/restart.sh 这样脚本会自动帮你优雅地完成 Nginx 重载、安全杀死旧进程、休眠等待、启动新进程的全套动作,绝对不会再出现 502 或者需要输入两次的情况!
删除文章
展示文章
友情链接
跳后域名2