首页
直播
壁纸
友链
搜索
1
微信小程序支付全链路实战:JSAPI 下单、调起支付、回调验签与退款
266 阅读
2
微信小程序云开发实战:云函数、云数据库与云存储的正确使用姿势
256 阅读
3
微信小程序自定义 tabBar 实战:custom-tab-bar 从适配到深色模式
255 阅读
4
微信小程序 Skyline 渲染引擎实战:worklet 动画从原理到落地
253 阅读
5
微信小程序分包进阶:独立分包、预下载与分包异步化实战
246 阅读
服务器运维
后端技术
前端技术
梯子
数据库
小程序
登录
搜索
标签搜索
fastadmin
Redis
微信小程序
前端开发
RabbitMQ
Go
服务器
codex
buildadmin
小程序
mysql
Nginx
Docker
Vue3
Node.js
MySQL优化
Linux
TypeScript
JWT
PHP
沿途的风景
累计撰写
74
篇文章
累计收到
0
条评论
首页
栏目
服务器运维
后端技术
前端技术
梯子
数据库
小程序
页面
直播
壁纸
友链
搜索到
6
篇与
» 服务器运维
的结果
2026-03-08
Nginx 反向代理配置详解与性能优化实践
前言Nginx 作为高性能 HTTP 服务器和反向代理,在生产环境中应用极为广泛。本文将系统讲解 Nginx 反向代理的核心配置,并分享实际项目中的性能优化经验。一、反向代理基础配置1.1 基本反向代理server { listen 80; server_name example.com; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }1.2 负载均衡配置upstream backend { server 192.168.1.10:3000 weight=3; server 192.168.1.11:3000 weight=2; server 192.168.1.12:3000 weight=1; keepalive 32; } server { listen 80; location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Connection ""; } }二、性能优化要点2.1 Worker 进程配置worker_processes auto; worker_cpu_affinity auto; events { worker_connections 10240; use epoll; multi_accept on; }2.2 Gzip 压缩gzip on; gzip_min_length 1k; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript text/xml application/xml text/javascript image/svg+xml; gzip_vary on; gzip_proxied any;2.3 静态文件缓存location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ { expires 30d; add_header Cache-Control "public, immutable"; access_log off; }三、SSL/TLS 配置server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d; add_header Strict-Transport-Security "max-age=63072000" always; }四、常见问题排查4.1 502 Bad Gateway通常原因:后端服务未启动、端口不通、网络问题。# 检查后端服务 curl -I http://127.0.0.1:3000 # 查看错误日志 tail -f /var/log/nginx/error.log # 检查端口 ss -tlnp | grep 30004.2 504 Gateway Timeout后端响应超时,适当调大 proxy_read_timeout。五、总结Nginx 反向代理配置看似简单,但要在生产环境中跑出最佳性能,需要在 worker 模型、连接复用、压缩缓存、SSL 优化等多个维度精细调优。建议每次修改配置后用 nginx -t 检查语法,逐步调整观察效果。
2026年03月08日
12 阅读
0 评论
0 点赞
2026-03-07
Docker Compose 多容器编排实战指南
前言Docker Compose 是定义和运行多容器 Docker 应用的工具。本文通过一个完整的 Web 应用示例,讲解 Compose 的核心用法和最佳实践。一、项目结构myapp/ ├── docker-compose.yml ├── nginx/ │ └── default.conf ├── php/ │ └── Dockerfile ├── src/ │ └── index.php └── mysql/ └── init.sql二、完整的 LNMP 编排version: "3.8" services: nginx: image: nginx:1.25-alpine ports: - "80:80" - "443:443" volumes: - ./src:/var/www/html - ./nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - php restart: unless-stopped networks: - app-network php: build: context: ./php dockerfile: Dockerfile volumes: - ./src:/var/www/html environment: - DB_HOST=mysql - DB_NAME=myapp - DB_USER=root - DB_PASS=secret networks: - app-network mysql: image: mysql:8.0 ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: myapp networks: - app-network redis: image: redis:7-alpine ports: - "6379:6379" volumes: - redis-data:/data networks: - app-network volumes: mysql-data: redis-data: networks: app-network: driver: bridge三、常用命令# 启动所有服务 docker-compose up -d # 查看运行状态 docker-compose ps # 查看日志 docker-compose logs -f nginx # 重新构建 docker-compose build --no-cache php # 停止并删除容器 docker-compose down # 停止并删除容器和数据卷 docker-compose down -v四、进阶技巧4.1 健康检查mysql: image: mysql:8.0 healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 3 start_period: 30s4.2 资源限制php: build: ./php deploy: resources: limits: cpus: "2" memory: 512M reservations: memory: 256M4.3 按需启动依赖php: depends_on: mysql: condition: service_healthy redis: condition: service_started五、总结Docker Compose 让多容器应用的定义、运行和管理变得简单。通过合理的目录结构、网络隔离、数据卷管理和健康检查,可以构建出生产级的容器编排方案。
2026年03月07日
10 阅读
0 评论
0 点赞
2026-02-27
网站被 CC 攻击了?别慌,教你几招接地气的防护办法
今天本来想安安静静写个教程的,结果早上起来发现博客访问慢得像老牛拉破车。打开后台一看,好家伙,CC 攻击来了,不要问我哈,我也想知道为啥偏偏挑我这个小破站下手。咱这博客一共就 800 来篇文章,每天正常访问也就几百 IP,也不知道攻击者是咋想的,难道是想测试一下我的服务器抗不抗揍?哈哈哈~~~先说说啥是 CC 攻击吧通俗易懂的解释就是:有一群"机器人"假装成正常用户,不停地刷新你的网站,把你的服务器资源耗光,让真正想访问的人打不开网站。就像你开个小卖部,来了一群人只逛不买,还把过道堵死了,真正想买东西的顾客进不来,是不是这个理儿?我这个"栗子"是不是很恰当,哈哈哈~~~怎么确定是被攻击了?网站访问变慢了,平时打开页面 1 秒以内,今天直接 5 秒+甚至更久。这时就不用怀疑了。还有就是服务器 CPU 飙升,如果你平台有查看运行状态的好习惯就能看出来,毕竟平时 10% 左右,今天直接 90%+,是吧。还可以参考web日志里全是重复请求,这个就需要你回看日志了,打开 access.log 一看,好家伙,同一个 IP 几秒钟请求几百次,不会看也没关系,访问变慢就够了哈。我的应对办法(亲测有效)上 CDN(免费!)这个真的是神器,免费的 CDN 还能防 CC。配置也简单:去 cloudflare.com 注册个账号(不要钱)把你的域名 DNS 改到他们家开启"Under Attack Mode"(攻击模式)开启之后,访问网站会先验证一下是不是真人,机器人基本就拦住了。缺点:国内访问速度可能会慢一丢丢,但总比打不开强吧?当然了,你可以使用国内的CDN,比如腾讯云和阿里云等厂商的"边缘加速",效果很是牛,但是,对嘛肯定有但是的啊,域名必须备案,否则不行。我就在用,你可能会问那为什么用了还被攻击呢?呵呵,你猜呢?有没有可能我正在调试页面代码,不得已暂时关闭了CDN然后恰巧,被攻击了呢?哈哈,编剧都不敢这么写剧本哈!但是我就遇上了。。。WEB服务器 NGINX 限流如果你用的是 Nginx,加上这个配置:当然了如果你不会代码,还是别改了,毕竟配置文件差一个标点都可能崩溃,如果你实在想折腾下,就做好备份吧。# 限制每个 IP 每秒最多 10 个请求 limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; # 在 server 块里应用 location / { limit_req zone=one burst=20 nodelay; # 其他配置... }这段话的意思是:每个 IP 每秒最多允许 10 次请求,超过的就排队,排不上的直接拒绝。可以设置的宽松一点,另外如果你选择了 CDN 那就可以忽略这个配置了,现在的 CDN 基本都有免费的防护,毕竟你能想到了,人家是专业的早就想到了。注意:别设置太严格,不然正常用户也可能被误伤,那就尴尬了。直接封 IP如果攻击规模不大,可以直接在防火墙封掉缺点:攻击者可以换 IP,治标不治本。但是能简单的防一防,仅仅是基本的哈~还是那句话,上了 CDN 基本都解决了,除非大流量攻击,这个是没有办法的需要花费"亿点点"的费用。毕竟免费的流量有限制哈~
2026年02月27日
20 阅读
0 评论
0 点赞
2026-02-24
microsoft store安装codex失败
电脑关闭了自动更新,导致microsoft store无法更新,也下载不了软件。需要在services.msc中找到windows update,原来是禁用了,需要把他改成手动,但是改成手动可能会遇到拒绝访问的提示,需要参考以下方式解决Windows修改启动服务及注册表提示拒绝访问解决方法参考地址:https://blog.csdn.net/jimmyxing001/article/details/140890369安装完成之后,可以使用账号或者中转站key进行登录
2026年02月24日
12 阅读
0 评论
0 点赞
2026-02-04
thinkphp6 消息队列think-queue
1.安装队列依赖composer require topthink/think-queue2.配置文件/config/queue.php<?php return [ 'default' => 'redis', 'connections' => [ 'sync' => [ 'type' => 'sync', ], 'database' => [ 'type' => 'database', 'queue' => 'default', 'table' => 'jobs', ], 'redis' => [ 'type' => 'redis', 'queue' => 'default', 'host' => '127.0.0.1', 'port' => 6379, 'password' => '', 'select' => 0, 'timeout' => 0, 'persistent' => false, ], ], 'failed' => [ 'type' => 'none', 'table' => 'failed_jobs', ], ];3.在项目下新建一个Job目录存放处理消息4.控制器编写逻辑代码 app/controller/index.phpuse think\facade\Queue; public function job(Request $request) { $params = $request->get(); $jobHandlerClassName = 'app\job\Task'; $jobQueueName = 'task'; $orderData = ['order_sn'=>$params['id']]; //Queue::later();//立即执行 $isPushed = Queue::later(10, $jobHandlerClassName, $orderData, $jobQueueName); //这儿的10是指10秒后执行队列任务 if($isPushed !== false){ echo '队列添加成功'; }else{ echo '插入失败了'; } }5.编写对应的消费者类 app\job\task.php<?php namespace app\job; use think\queue\Job; class Task { public function fire(Job $job, $data) { $rt = $this->doJob($data); if($rt){ $job->delete(); return true; } // 重试三次失败 todo... if($job->attempts() == 3){ $job->delete(); return false; } //执行失败10S后重试 $job->release(10); } public function doJob($data) { echo date('Y-m-d H:i:s')."\n"; return false; } }php think queue:listen–queue helloJobQueue \ //监听的队列的名称–delay 0 \ //如果本次任务执行抛出异常且任务未被删除时,设置其下次执行前延迟多少秒,默认为0–memory 128 \ //该进程允许使用的内存上限,以 M 为单位–sleep 3 \ //如果队列中无任务,则多长时间后重新检查–tries 0 \ //如果任务已经超过重发次数上限,则进入失败处理逻辑,默认为0–timeout 60 // work 进程允许执行的最长时间,以秒为单位6.安装守护进程(Supervisor)
2026年02月04日
27 阅读
0 评论
0 点赞
1
2
0:00