• [技术干货] Nginx 入门实战(2)--简单使用
    本文主要介绍 Nginx 的实际使用,文中所使用到的软件版本:Centos 7.9.2009、Nginx 1.22.1。1、环境准备这里主要演示使用 Nginx 代理 Http 及 TCP 应用,环境信息如下:主机用途Http 端口TCP 端口10.49.196.30部署 Http、TCP 应用8080909010.49.196.31部署 Http、TCP 应用8080909010.49.196.33部署 Nginx  2、Http 应用配置代理时都新建新的配置文件 conf/http.conf,然后在主配置文件 conf/nginx.conf 中引入该文件:http { include mime.types; default_type application/octet-stream; ... include http.conf; ...}2.1、静态文件server { listen 8080; server_name localhost-8080; access_log logs/access-8080.log; location / { root /home/mongo/mysite; index index.html; }}站点地址为:http://10.49.196.33:8080。2.2、普通代理server { listen 8081; server_name localhost-8081; access_log logs/access-8081.log; location /myapp { proxy_pass http://10.49.196.30:8080/myapp; } location / { proxy_pass https://www.baidu.com; }}代理地址为:http://10.49.196.33:8081/myapp,被代理地址为:http://10.49.196.30:8080/myapp;根地址代理百度网站。2.3、负载均衡upstream cluster { server 10.49.196.30:8080 weight=1; server 10.49.196.31:8080 weight=1; round-robin;}server { listen 8082; server_name localhost-8082; access_log logs/access-8082.log; location /myapp { proxy_pass http://cluster/myapp; }}Nginx 支持三种负载均衡算法:round-robin:轮询(默认算法)least-connected:下一个请求将分配给当前拥有最少活跃连接数的服务器,对应的 Nginx 指令为 least_connip-hash:同一 ip 的请求分配到同一个服务器,对应的 Nginx 指令为 ip_hashNginx 还支持通过指定服务器的权重(weight) 来影响负载均衡算法,上面的配置意味着两台服务器在特定负载均衡算法上具有相同的资格。2.4、配置文件服务器server { listen 8083; server_name localhost-8083; access_log logs/access-8083.log; location / { autoindex on; autoindex_exact_size on; autoindex_localtime on; charset utf-8; root /mnt/centos7; }}2.5、启用 Nginx Statusserver { listen 8083; server_name localhost-8083; access_log logs/access-8083.log; location /nginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; } ...}2.6、限流2.6.1、限制访问频率limit_req_zone $binary_remote_addr zone=peripZone:10m rate=100r/m;server { listen 8081; server_name localhost-8081; access_log logs/access-8081.log; location /myapp { limit_req zone=peripZone burst=5 nodelay; proxy_pass http://10.49.196.30:8080/myapp; }}limit_req_zone 定义了一个名为 peripZone 的共享内存区域,大小为 10M,最大访问速率为:每分钟 100 个请求;该区域以“客户端地址”为 key 来保存状态信息。limit_req 设置使用的共享内存区域,burst 定义了过量请求的缓存队列大小,超过访问速率的请求将保存该队列中;如果缓存队列也慢了将直接返回 503;nodelay 表示缓存队列中请求将不会被延迟处理(虽然超过了请求速率,缓存队列中请求也立即被处理),也可通过 delay=number 来设置缓存队列中请求被延迟处理的个数。2.6.2、限制并发连接数limit_conn_zone $server_name zone=perserverZone:10m;server { listen 8081; server_name localhost-8081; access_log logs/access-8081.log; location /myapp { limit_conn perserverZone 5; proxy_pass http://10.49.196.30:8080/myapp; }}limit_conn_zone 定义了一个名为 perserverZone 的共享内存区域,大小为 10M;该区域以“虚拟服务器名称”为 key 来保存状态信息。limit_conn 设置使用的共享内存区域,并定义最大并发连接数。2.7、配置 Https2.7.1、生成证书启用 Https,需要使用 OpenSSL 创建证书。A、生成根证书openssl genrsa -out ca.keyopenssl req -new -key ca.key -out ca.csropenssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.pemB、生成服务端证书openssl genrsa -out server.keyopenssl req -new -key server.key -out server.csropenssl ca -days 3650 -in server.csr -cert ca.pem -keyfile ca.key -out server.pemC、生成客户端证书openssl genrsa -des3 -out client.key 1024openssl req -new -key client.key -out client.csropenssl ca -days 1500 -in client.csr -cert ca.pem -keyfile ca.key -out client.pemopenssl pkcs12 -export -clcerts -in client.pem -inkey client.key -out client.p12使用 OpenSSL 创建证书的详细说明可参考:OpenSSL 介绍(5)--数字证书;这里生成的证书假设都存放在 /home/mongo/ssl 目录下。2.7.2、Nginx 中配置 Httpsserver { listen 4430 ssl; server_name localhost-8084; access_log logs/access-8084.log; ssl_certificate /home/mongo/ssl/server.pem; ssl_certificate_key /home/mongo/ssl/server.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; ssl_client_certificate /home/mongo/ssl/ca.pem; ssl_verify_client on; location /myapp { proxy_pass http://10.49.196.30:8080/myapp; }}上述配置开启了客户端验证,客户端访问时需要使用客户端证书(client.p12)来访问;浏览器访问导入该证书即可,Java 客户端的访问可参考:Java调用Http/Https接口(2)--HttpURLConnection/HttpsURLConnection调用Http/Https接口。如果不需要客户端验证,注释掉如下配置即可:ssl_client_certificate /home/mongo/ssl/ca.pem; ssl_verify_client on;3、TCP 应用配置代理时都新建新的配置文件 conf/tcp.conf,然后在主配置文件 conf/nginx.conf 最后该文件:...include tcp.conf;3.1、普通代理stream { server { listen 9090; proxy_pass 10.49.196.30:9090; }}代理地址为:10.49.196.33:9090,被代理地址为:10.49.196.30:9090。3.2、负载均衡stream { upstream tcp3031 { server 10.49.196.30:9090; server 10.49.196.31:9090; } server { listen 9091; proxy_pass tcp3031; }} 
  • Nginx 入门实战(1)--简介及安装
    本文介绍的 Nginx 为开源版本 Nginx,官网地址为:https://nginx.org/en/,如需了解商业版本,可访问商业版官网:https://www.nginx-cn.net/;文中所使用到的软件版本:Nginx 1.22.1、pcre 8.43、opnessl 1.1.1s、zlib 1.2.11、CentOS 7.9.2009。1、简介nginx [engine x] 是一款 Http 和反向代理服务器、邮件代理服务器和通用TCP / UDP 代理服务器。其将源代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。Nginx 可以在大多数 Unix Linux OS 上编译运行,并有 Windows 移植版。Nginx 具有如下功能。1.1、HTTP 基础功能 提供静态和索引文件服务,自动索引; 打开文件描述符缓存;通过缓存加速反向代理; 负载均衡和容错;通过缓存 FastCGI、uwsgi、SCGI 和 服务器来提高访问速度;负载均衡和容错;模块化架构。过滤器包括 gzipping、字节范围、分块响应、XSLT、SSI 和图像转换过滤器。如果由代理服务器或 FastCGI/uwsgi/SCGI 服务器处理请求,单个页面中的多个 SSI 可以并行处理;支持SSL和TLS SNI;支持基于权重和依赖的优先级的 HTTP/2。1.2、其他 HTTP 功能基于名称和 IP 的虚拟服务器;支持 Keep-alive 和管线化连接;访问日志格式、缓冲日志写入、快速日志轮换和 syslog 日志记录;3xx-5xx 错误代码重定向;重写模块:使用正则表达式更改 URI;根据客户端地址执行不同的功能;基于客户端 IP 地址、密码(HTTP基本认证)和子请求结果的访问控制;验证 HTTP Referer;PUT、DELETE、MKCOL、COPY 和 MOVE 方法;FLV 和 MP4 流媒体;响应速率限制;限制来自一个地址的并发连接或请求数量;基于 IP 的地理位置;A/B 测试;请求镜像;嵌入式 Perl;njs 脚本语言。1.3、邮件代理功能用户通过外部 HTTP 身份验证服务器重定向到 IMAP 或 POP3 服务器;使用外部 HTTP 身份验证服务器进行用户身份验证,并将连接重定向到内部 SMTP 服务器;认证方法:  POP3:USER/PASS、APOP、AUTH LOGIN/PLAIN/CRAM-MD5;  IMAP:LOGIN、AUTH LOGIN/PLAIN/CRAM-MD5;  SMTP:AUTH LOGIN/PLAIN/CRAM-MD5;SSL支持;STARTTLS 和 STLS支持。1.4、TCP/UDP 代理功能通用 TCP 和 UDP 代理;支持 SSL 和 TLS SNI 的 TCP;负载均衡和容错;基于客户端地址的访问控制;根据客户端地址执行不同的功能;限制来自一个地址的并发连接数量;访问日志格式,缓冲日志写入,快速日志轮换和 syslog 日志记录;基于 IP 的地理位置;A/B 测试;njs 脚本语言。2、安装2.1、下载源码nginx 源码:https://nginx.org/en/download.htmlpcre 源码:http://www.pcre.org/openssl 源码:https://www.openssl.org/source/zlib 源码:http://www.zlib.net/下载后解压:tar zxvf nginx-1.22.1.tar.gzunzip pcre-8.43.ziptar zxvf openssl-1.1.1s.tar.gztar zxvf zlib-1.2.11.tar.gz2.2、编译安装cd nginx-1.22.1./configure --prefix=/home/mongo/soft/nginx-1.22.1 --with-pcre=/home/mongo/installfile/pcre-8.43 --with-http_stub_status_module --with-http_ssl_module --with-openssl=/home/mongo/installfile/openssl-1.1.1s --with-zlib=/home/mongo/installfile/zlib-1.2.11 --with-mail --with-streammakemake install常用编译参数说明:更多参数说明可参考官网:https://nginx.org/en/docs/configure.html。2.3、启动Nginx 默认配置了一个端口为 80 Http 服务器,使用普通用户启动需要修改该端口;编辑 conf/nginx.conf 文件:http { include mime.types; default_type application/octet-stream; ... server { listen 8080; ...执行启动命令:sbin/nginx启动后访问 8080 端口:2.4、停止及重启sbin/nginx -s stop #停止sbin/nginx -s reload #重启2.5、sbin/nginx 命令详解使用 sbin/nginx -h 查看用法:nginx [-?hvVtTq] [-s signal] [-p prefix] [-e filename] [-c filename] [-g directives]参数说明:转载自https://www.cnblogs.com/wuyongyin/p/17282547.html
  • [技术干货] Nginx 性能优化
    Nginx 作为高性能 Web 服务器和反向代理,其性能优化涉及多个层面的配置和系统调整。以下是针对不同场景的优化方案,按优先级和影响程度排序。一、核心配置优化1. Worker 进程配置worker_processes auto; # 自动匹配CPU核心数(推荐) # 或显式指定:worker_processes 4; # 通常设为CPU核心数或其倍数 worker_rlimit_nofile 65535; # 单进程最大文件描述符数 原理:Nginx 通过多进程模型处理请求,worker_processes 决定并发处理能力。验证方法:grep -c 'processor' /proc/cpuinfo 查看CPU核心数。2. 事件模型调优events { worker_connections 10240; # 单进程最大连接数 use epoll; # Linux下最佳事件模型 multi_accept on; # 一次性接收所有新连接 } 关键指标:worker_connections × worker_processes ≈ 最大并发连接数计算示例:4核CPU × 10240 = 40960 并发连接二、连接与超时设置1. Keepalive 优化http { keepalive_timeout 65s; # 保持连接时长 keepalive_requests 1000; # 单连接最大请求数 tcp_nodelay on; # 禁用Nagle算法(减少延迟) tcp_nopush on; # 启用TCP_CORK(优化小文件传输) } 适用场景:高并发短连接(如API服务)可降低 keepalive_timeout,长连接服务(如WebSocket)需延长。2. 超时控制client_header_timeout 15s; # 读取请求头超时 client_body_timeout 15s; # 读取请求体超时 send_timeout 30s; # 发送响应超时 风险控制:避免恶意连接占用资源,需根据业务响应时间调整。三、缓存与压缩优化1. 静态资源缓存location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { expires 30d; # 浏览器缓存30天 access_log off; # 静态资源不记录日志 add_header Cache-Control "public"; } 效果:减少后端压力,提升页面加载速度(CDN同理)。2. Gzip 压缩gzip on; gzip_min_length 1k; # 最小压缩阈值 gzip_comp_level 6; # 压缩级别(1-9) gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_vary on; # 添加Vary头 平衡点:comp_level=6 在CPU占用和压缩率间取得较好平衡。四、反向代理优化1. 后端连接池upstream backend { server 192.168.1.100:8080 max_fails=3 fail_timeout=30s; server 192.168.1.101:8080 backup; # 备用服务器 keepalive 32; # 保持到上游的长连接数 } 关键参数:keepalive 值需根据后端服务器处理能力调整(通常32-256)。2. 代理超时配置location / { proxy_connect_timeout 5s; # 连接后端超时 proxy_send_timeout 10s; # 发送请求超时 proxy_read_timeout 60s; # 读取响应超时 proxy_buffering on; # 启用代理缓冲 proxy_buffers 16 4k; # 缓冲区大小 proxy_busy_buffers_size 8k; # 忙缓冲区大小 } 监控重点:通过 proxy_timeout 避免上游慢响应拖垮Nginx。五、高级性能优化1. SSL/TLS 优化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; # 10MB缓存约4万会话 ssl_session_timeout 1h; 性能影响:启用 TLSv1.3 可减少握手延迟(比TLSv1.2快30%)。2. 系统级优化# 调整系统限制(需root权限) echo "* soft nofile 65535" >> /etc/security/limits.conf echo "* hard nofile 65535" >> /etc/security/limits.conf sysctl -w net.ipv4.tcp_tw_reuse=1 # 快速回收TIME_WAIT连接 sysctl -w net.core.somaxconn=65535 # 监听队列长度 关键指标:通过 ss -s 监控 TIME_WAIT 连接数。六、监控与调优工具实时监控:# 连接数统计 ss -antp | grep nginx | wc -l # 进程资源占用 top -H -p $(pgrep -d, nginx) 日志分析:# 请求延迟分布 awk '{print $7}' access.log | awk -F'?' '{print $1}' | awk -F'/' '{print $NF}' | sort | uniq -c | sort -nr | head -20压力测试:# 使用wrk进行基准测试 wrk -t12 -c400 -d30s http://yourdomain.com/七、典型场景优化方案场景核心配置高并发API服务worker_processes auto; worker_connections 20480; keepalive_timeout 10s;静态文件服务器sendfile on; tcp_nopush on; open_file_cache max=1000 inactive=20s;大文件下载sendfile on; tcp_nopush on; client_max_body_size 10G;微服务网关proxy_buffer_size 16k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k;八、性能优化避坑指南误区1:盲目增加 worker_processes❌ 错误做法:8核CPU设为 worker_processes 32✅ 正确做法:通过 top -H 观察CPU使用率,通常80%左右最佳误区2:过度压缩❌ 错误做法:gzip_comp_level 9 + 压缩所有内容✅ 正确做法:仅压缩文本资源,压缩级别4-6即可误区3:忽视系统限制❌ 错误现象:Nginx报错 too many open files✅ 解决方案:ulimit -n 65535 并持久化配置九、终极优化检查清单[ ] 确认 worker_processes 与CPU核心数匹配[ ] 验证 worker_connections × worker_processes > 预期并发数[ ] 静态资源启用 expires 和 gzip[ ] 反向代理配置了合理的 keepalive 和超时[ ] 系统文件描述符限制已提升[ ] 已通过压力测试验证配置有效性通过以上系统化的优化,Nginx 在典型场景下可实现:QPS 提升 300%-500%延迟降低 40%-60%资源利用率提升 50%-80%建议通过逐步调优和AB测试确定最佳配置,避免一次性修改过多参数导致问题难以排查。
  • [技术干货] Nginx 日志切割
    Nginx 默认不会自动切割日志文件,长期运行会导致日志文件过大,影响性能和可管理性。以下是几种常用的 Nginx 日志切割方法:方法一:使用 logrotate(推荐)logrotate 是 Linux 系统自带的日志管理工具,可以方便地实现日志切割、压缩和删除。1. 创建 logrotate 配置文件在 /etc/logrotate.d/ 目录下创建 nginx 文件:sudo nano /etc/logrotate.d/nginx添加以下内容(根据实际路径调整):/var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript }参数说明:daily: 每天切割日志missingok: 如果日志文件不存在,忽略错误rotate 14: 保留14天的日志文件compress: 使用gzip压缩旧日志delaycompress: 延迟压缩前一个日志文件(与compress配合使用)notifempty: 如果日志为空,则不进行切割create 0640 www-data adm: 创建新日志文件并设置权限和所有者sharedscripts: 在所有日志文件处理后执行一次postrotate脚本postrotate: 切割后通知Nginx重新打开日志文件2. 测试配置sudo logrotate -d /etc/logrotate.d/nginx # 测试配置 sudo logrotate -f /etc/logrotate.d/nginx # 强制执行切割 方法二:使用 cron 定时任务 + mv 命令如果不想使用 logrotate,可以手动创建脚本:1. 创建切割脚本sudo nano /usr/local/bin/nginx_logrotate.sh添加以下内容:#!/bin/bash LOG_PATH=/var/log/nginx DATE=$(date +%Y%m%d) # 切割访问日志 mv ${LOG_PATH}/access.log ${LOG_PATH}/access_${DATE}.log # 切割错误日志 mv ${LOG_PATH}/error.log ${LOG_PATH}/error_${DATE}.log # 通知Nginx重新打开日志文件 kill -USR1 $(cat /var/run/nginx.pid) 2. 设置可执行权限sudo chmod +x /usr/local/bin/nginx_logrotate.sh3. 添加定时任务sudo crontab -e添加以下内容(每天午夜执行):0 0 * * * /usr/local/bin/nginx_logrotate.sh方法三:使用 Nginx 模块Nginx 有一个商业版模块 ngx_http_log_rotate_module 可以实现日志切割,但大多数情况下使用上述方法更为常见。注意事项权限问题:确保 Nginx 进程有权限写入新创建的日志文件磁盘空间:定期检查日志文件是否被正确切割和删除日志分析:如果使用日志分析工具,确保切割后工具能识别新日志文件多实例:如果运行多个 Nginx 实例,需要为每个实例单独配置日志切割日志文件命名建议推荐的日志文件命名格式:access_YYYYMMDD.logerror_YYYYMMDD.log这样可以方便按日期排序和查找特定日期的日志。通过以上方法,您可以有效地管理 Nginx 日志文件,避免单个日志文件过大带来的问题。
  • [技术干货] 【开发者空间实践指导】搭建WordPress博客平台
    概述案例介绍WordPress是一款个人博客系统,也可以把 WordPress当作一个内容管理系统(CMS)来使用,它是使用PHP语言和MySQL数据库开发的,用户可以在支持PHP和MySQL数据库的服务器上搭建自己的博客。本案例借助开发者空间提供的免费云上资源环境,直观地展示如何在开发者空间部署一套个人博客系统。通过实际操作,让大家深入了解如何通过命令在开发者空间进行资源搭建的流程方法,体验其在应用开发中的优势。适用对象企业个人开发者高校学生案例时间本案例总时长预计60分钟。案例流程说明:用户开通开发者空间;下载WordPress软件包到开发者空间;在开发者空间上构建LNMP环境并运行WordPress网站。资源总览本案例预计花费总计0元。资源名称规格单价(元)时长(分钟)开发者空间—云主机2 vCPUs | 4 GB RAM免费60GitCode服务免费免费60开发者空间搭建WordPress博客平台云主机申请本案例中,使用开发者空间为环境搭建平台,开发者空间为开发者提供的免费云上资源环境,方便开发者进行环境搭建和项目部署。登录开发者空间页面,点击“配置云主机”进行云主机申请。搭建LNMP应用运行环境WordPress博客系统最新版本需要PHP7.4和MySQL 8.0或者MariaDB 10.5以上的版本来进行运行, 因此本次操作实战决定采用经典架构环境LNMP,L代表Linux,N代表Nginx,M代表MySQL或者MariaDB,P代表PHP。从官方建议网页中可知,虽然还是可以安装低一点版本的PHP和数据库版本,但官方提示担心各种漏洞而受到威胁,因此肯定按着官方建议,安装所要求的版本。安装Nginx登录云主机之后,在云主机桌面单击鼠标右键,选择“Open Terminal Here”,打开终端。本文章以 root 用户来执行操作命令。云主机登录默认账户为developer,所以理论上在每条命令前使用 sudo才有root权限执行,所以我们可使用命令 sudo -i 直接登录到 root 用户。在终端中输入:sudo -i回车,即可切换到root账户。然后在终端中输入:yum -y install nginx回车,进行nginx安装,待终端出现Complete表示 Nginx 安装完成。以下命令进行启动并设置开机自启动:systemctl start nginxsystemctl enable nginx在云主机的浏览器访问地址http://127.0.0.1/,若Nginx 安装成功,则会显示如下页面。安装MySQL在终端中输入:yum -y install mysql-server回车,待终端出现Complete表示 mysql 安装完成。然后输入:systemctl start mysqld启动mysql。在mysql 8.0的后续版本中,初次安装完成后可使用空密码来登录,输入:mysql -uroot -p回车,在“Enter password”时按回车即可登录。登录mysql后,再执行:ALTER USER 'root'@'localhost' IDENTIFIED BY 'Huawei@123';来修改数据库root账户的密码。(本案例使用Huawei@123,开发者可自定义)然后执行:flush privileges;quit刷新并退出mysql。最后在终端中执行:systemctl enable mysqld将数据库设置为开机自启动,然后执行:systemctl status mysqld查看mysql数据库状态显示如下即完成mysql的安装和配置,按ctrl+c退出。安装PHP在终端中输入以下命令:yum -y install php php-tidy php-common php-devel php-pdo php-mysql* php-gd php-ldap php-mbstring php-fpm来安装 PHP 和一些所需的 PHP 扩展,显示如下即表示安装成功。输入:php -v可查看php的版本,然后执行:systemctl start php-fpmsystemctl enable php-fpm来启动php,并将其设置为开机自启动。如果想查看php的监听端口,可通过执行:netstat -l | grep php来查看,执行:grep -v ";\|^$" /etc/php-fpm.d/www.conf | grep listen可从配置文件中可查出具体侦听配置。默认在安装旧的PHP版本后,需要在Nginx中配置好对应的PHP支持,但云主机集成的高版本的yum源安装后,会自动安装好对应的配置支持文件,因此开发者无需自行配置。通过执行:cat /etc/nginx/conf.d/php-fpm.confcat /etc/nginx/default.d/php.conf即可查看对应的配置文件,显示如下。最后测试LNMP的PHP支持,在终端输入:echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/index.php来编辑PHP测试页面,修改完后输入:systemctl reload nginx来对php服务进行重载。使用浏览器访问http://127.0.0.1/index.php,显示如下图页面,说明PHP安装成功。数据库数据初始化登录数据库并创建WordPress系统所用的数据库wordpress和对应的用户wordpressuser,并使用密码Huawei@123。在终端输入:mysql -uroot -p在Enter password处输入root的密码“Huawei@123”,登录数据库后,执行:create database wordpress;创建数据库wordpress,执行:create user 'wordpressuser'@'localhost' identified by 'Huawei@123';创建用户wordpressuser并设置密码为Huawei@123,然后执行:grant all privileges on wordpress.* to 'wordpressuser'@'localhost';来进行授权,最后执行:flush privileges;quit刷新退出即可。然后输入:mysql -uwordpressuser -p回车,使用我们新建的wordpressuser账户登录数据库,密码为“Huawei@123”,登录成功后,输入:show databases;显示如下即完成了数据库的初始化配置。输入:quit退出,至此,WordPress所需要的运行环境已经搭建完毕,接下来可以进行WordPress博客系统的安装。安装并配置WordPress打开WordPress官网的下载页面:https://cn.wordpress.org/download/ ,下载wordpress-6.7.1软件包至本地。跳转到软件包目录。然后输入:cp -a /home/developer/下载/wordpress-6.7.1-zh_CN.zip .将软件包复制到当前目录,然后执行:unzip wordpress-6.7.1-zh_CN.zip来解压zip包,然后执行:mv wordpress /usr/share/nginx/html/chown -R apache:apache /usr/share/nginx/html/wordpress/将解压出来的项目目录移动至nginx页面目录下,并设置目录权限。接下来进行WordPress配置。首先执行:cd /usr/share/nginx/html/wordpress进入到WordPress 项目目录,然后执行:cp -a wp-config-sample.php wp-config.php将wp-config-sample.php文件复制名为wp-config.php的文件用作配置文件,并保留示例配置文件以作备份。然后开始编辑WordPress的配置文件,输入:vim wp-config.php按 “i”进入编辑模式来编辑配置文件,按照下图把DB_NAME(数据库名称)、DB_USER(数据库用户名)、DB_PASSWORD(数据库密码)更改为之前所配置的设置,参数如下:/** The name of the database for WordPress */define( 'DB_NAME', 'wordpress' );/** Database username */define( 'DB_USER', 'wordpressuser' );/** Database password */define( 'DB_PASSWORD', 'Huawei@123' );修改完后,按Esc,输入“:wq”,回车,保存并退出配置文件,然后执行:grep -n "^[a-z]\|^[A-Z]" wp-config.php来查看修改是否成功,显示如下即可。接下来进行安装WordPress。在浏览器地址栏输入http://127.0.0.1/wordpress,即可跳转至安装页面,然后按照提示填写对应的表单信息后,即可点击安装WordPress。若WordPress安装完成,会如下图所示,然后点击登录,输入用户名和密码,即可登录wordpress管理台,可在页面见到网站仪表盘,如下图所示。在浏览器输入http://127.0.0.1/wordpress 即可查看wordpress主页.可以在管理界面选择想要的主题和插件,可使用在线安装的方式进行安装,也可以在线更新各种插件(PS:前提是设置好此前所说的访问权限,不然会弹出授权界面)。安装完成后,点击启用即可使用,并可在已安装插件中查看。至此,已完成整个WordPress项目的部署。更多案例,点击案例中心查看~
  • [技术干货] Nginx性能调优5招35式不可不知的策略实战
    Nginx是一个高性能的HTTP和反向代理服务器,它在全球范围内被广泛使用,因其高性能、稳定性、丰富的功能以及低资源消耗而受到青睐。今天V哥从5个方面来介绍 Nginx 性能调优的具体策略,希望对兄弟们有帮助,废话不多说,马上开整。1. 系统层面:调整内核参数:例如,增加系统文件描述符的限制、TCP连接队列的大小等。网络优化:可以使用TCP Fast Open、选择更高效的网络协议等。2. Nginx配置:Worker进程数:通常设置为等于服务器的CPU核心数。连接数:通过调整worker_connections参数,可以增加每个Worker进程可以打开的连接数。使用HTTP/2:HTTP/2提供了更好的性能,包括头部压缩和服务器推送等功能。3. 缓存利用:启用文件缓存:Nginx可以将静态文件缓存在服务器本地,减少磁盘I/O操作。使用代理缓存:例如,使用Nginx作为反向代理服务器时,可以缓存后端服务器的响应内容。4. 压缩:启用Gzip压缩可以减少数据传输量,提高响应速度。5. 负载均衡策略:根据服务器的性能和负载情况,选择合适的负载均衡策略,如轮询、最少连接数、IP哈希等。下面 V 哥针对每个点结合业务场景来详细介绍,老铁们坐稳了,要发车了。1. 系统层面Nginx性能调优可以从多个层面进行,这里我们重点讨论系统层面的调优步骤。系统层面的调优主要是对操作系统进行优化,以更好地支持Nginx的高并发处理能力。1. 内核参数调整内核参数的调整可以通过修改/etc/sysctl.conf文件来实现,这些参数会影响网络栈的行为。net.core.somaxconn:这个参数设置了一个系统范围内所有监听Socket的未完成连接队列的最大长度。调高这个值可以避免在高峰期出现"connection refused"的错误。sysctl -w net.core.somaxconn=65535net.ipv4.tcp_max_syn_backlog:这个参数设置了TCP连接建立时,SYN队列的最大长度。在高负载情况下,增加这个值可以防止SYN洪水攻击。sysctl -w net.ipv4.tcp_max_syn_backlog=65535net.ipv4.ip_local_port_range:这个参数定义了本地端口范围,增加这个范围可以允许更多的并发连接。sysctl -w net.ipv4.ip_local_port_range="1024 65535" net.ipv4.tcp_fin_timeout:这个参数决定了系统回收TCP连接的时间。减小这个值可以加快回收速度,释放资源。sysctl -w net.ipv4.tcp_fin_timeout=30net.ipv4.tcp_tw_reuse 和 net.ipv4.tcp_tw_recycle:这两个参数控制了TCP连接的TIME_WAIT状态。开启它们可以更快地重用和回收处于TIME_WAIT状态的连接。sysctl -w net.ipv4.tcp_tw_reuse=1 sysctl -w net.ipv4.tcp_tw_recycle=12. 文件描述符限制增加系统允许的文件描述符数量,以便Nginx可以打开更多的连接。用户级限制:修改/etc/security/limits.conf文件,增加Nginx用户(通常是www-data或nginx)的nofile限制。nginx soft nofile 65535 nginx hard nofile 65535系统级限制:修改/proc/sys/fs/file-max文件,增加整个系统的最大文件描述符数。echo 65535 > /proc/sys/fs/file-max3. 网络栈优化禁用Syn Cookies:在高峰期,可以临时禁用Syn Cookies,以提高TCP连接的建立速度。sysctl -w net.ipv4.tcp_syncookies=0调整TCP Keepalive:通过调整net.ipv4.tcp_keepalive_time等参数,可以优化长连接的管理。sysctl -w net.ipv4.tcp_keepalive_time=6004. 硬件和架构优化使用SSD存储:使用固态硬盘可以显著提高I/O性能,尤其是对于需要频繁读写文件的Nginx服务器。网络硬件:使用高带宽和低延迟的网络硬件,如万兆以太网,可以提高数据传输速度。负载均衡:如果服务器面临极高的负载,可以考虑使用硬件负载均衡器来分担Nginx的压力。5. 操作系统选择和优化选择合适的操作系统:不同的操作系统对网络性能的支持不同,选择一个适合高并发网络服务的操作系统是很有帮助的。关闭不必要的系统服务:减少系统运行的进程和服务,可以释放更多的系统资源给Nginx使用。在进行系统层面的调优时,需要注意平衡性能提升和系统稳定性之间的关系。过度的优化可能会导致系统不稳定,甚至出现资源耗尽的情况。因此,建议在调优过程中进行充分的测试,并根据服务器的具体情况进行调整。2. Nginx配置Nginx的性能调优可以通过修改其配置文件nginx.conf来实现。以下是一些具体的调优步骤和建议:1. Worker进程数Nginx使用多进程模型,通常情况下,Worker进程的数量应该设置为等于服务器的CPU核心数。这样可以最大化利用多核CPU的性能。worker_processes auto; # 或者指定具体的进程数,如 worker_processes 4; 2. Worker连接数每个Worker进程可以同时处理的最大连接数由worker_connections指令设置。这个值应该根据服务器的内存大小和系统负载来合理设置。events { worker_connections 4096; # 根据服务器能力适当调整 }3. 使用HTTP/2如果客户端支持,可以启用HTTP/2,它提供了更好的性能,包括头部压缩和服务器推送等功能。listen 443 ssl http2;4. 文件描述符限制增加Nginx可以打开的文件描述符数量,以处理更多的并发连接。worker_rlimit_nofile 65535;5. 启用Gzip压缩压缩可以减少数据传输量,提高响应速度。gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;6. 缓存配置配置浏览器缓存,减少重复请求。location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control "public"; }7. 静态资源处理对于静态资源,可以使用sendfile快速传输文件。location /static/ { sendfile on; tcp_nopush on; tcp_nodelay off; }8. 负载均衡如果有多台后端服务器,可以使用Nginx的负载均衡功能。upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; keepalive 64; # 保持活动的连接数 } server { location / { proxy_pass http://backend; } }9. 优化SSL/TLS如果使用SSL/TLS,可以优化相关配置以提高性能。ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;10. 日志配置减少不必要的日志记录,可以减少磁盘I/O和CPU使用。access_log off; # 或者将日志写入内存文件系统 在进行Nginx配置调优时,应该逐步进行,每次更改后都要进行测试,以确保更改确实提高了性能,并且没有引入新的问题。此外,不同的应用场景可能需要不同的优化策略,因此最好根据实际情况进行调整。3. 缓存利用Nginx缓存利用是提高性能的重要手段,它可以通过减少服务器负载、降低响应时间和减少网络带宽使用来显著提升用户体验。以下是缓存利用的具体调优步骤:1. 启用Nginx内置缓存Nginx内置了多种缓存机制,如文件系统缓存、内存缓存等。可以通过配置nginx.conf来启用这些缓存。文件系统缓存(HTTP缓存)在HTTP模块中,可以使用proxy_cache指令启用代理缓存。http { # 定义缓存区域 proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { location / { proxy_cache my_cache; # 使用定义的缓存区域 proxy_cache_valid 200 302 10m; # 对200和302响应缓存10分钟 proxy_cache_valid 404 1m; # 对404响应缓存1分钟 proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; # 在指定情况下使用过期缓存 } } }内存缓存(FastCGI缓存)如果使用FastCGI(如与PHP-FPM配合),可以使用fastcgi_cache指令启用缓存。http { # 定义FastCGI缓存区域 fastcgi_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m; server { location ~ \.php$ { fastcgi_cache my_cache; # 使用定义的缓存区域 fastcgi_cache_key $request_uri; # 定义缓存键 fastcgi_cache_valid 200 30m; # 对200响应缓存30分钟 } } }2. 配置浏览器缓存通过设置HTTP头,可以指示浏览器缓存静态资源。location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; # 设置资源的过期时间 add_header Cache-Control "public"; # 指示资源可以被浏览器和代理缓存 }3. 使用CDN内容分发网络(CDN)可以缓存静态资源,并将其分发到全球各地的节点,用户可以从最近的节点获取内容,从而减少延迟。4. 配置反向代理缓存如果Nginx作为反向代理服务器,可以配置它来缓存后端服务器的响应。location / { proxy_pass http://backend; proxy_cache my_cache; # 使用定义的缓存区域 proxy_cache_valid 200 30m; # 对200响应缓存30分钟 }5. 监控和调整缓存性能使用Nginx的统计模块(如ngx_http_stub_status_module)来监控缓存命中率和缓存大小。根据监控数据调整缓存大小和过期时间,以优化性能。6. 清理缓存定期清理缓存,以释放空间和提高缓存效率。可以使用Nginx的缓存清理功能或编写脚本来实现。在进行缓存调优时,需要注意以下几点:缓存大小和过期时间需要根据实际情况进行调整,以找到最佳平衡点。监控缓存命中率,以确保缓存配置有效地提高了性能。确保缓存内容的一致性,特别是在动态内容缓存时。通过合理利用缓存,可以显著提高Nginx的性能,减少服务器负载,并提高用户体验。4. 压缩Nginx中的压缩功能可以通过Gzip模块来实现,它可以在服务器端对响应数据进行压缩,以减少传输数据的大小,从而提高加载速度,尤其是在带宽有限的情况下。以下是压缩的具体调优步骤:1. 启用Gzip压缩首先,确保在Nginx中启用了Gzip模块。这通常是通过在nginx.conf文件的http块中添加以下指令来完成的:http { gzip on; # 启用Gzip压缩 }2. 设置压缩级别gzip_comp_level指令用于设置压缩级别,级别越高,压缩率越大,但CPU消耗也越高。通常设置为1到9之间的值,其中1是最快的压缩,9是最高压缩率。推荐设置为6,这是一个性能和压缩率的平衡点。http { gzip_comp_level 6; # 设置压缩级别 }3. 选择要压缩的内容类型使用gzip_types指令指定要压缩的MIME类型。通常,文本文件(如HTML、CSS、JavaScript)和XML文件可以从压缩中受益。http { gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; }4. 设置最小压缩大小使用gzip_min_length指令设置触发压缩的最小文件大小。对于小文件,压缩可能不会带来太多好处,而且会增加CPU负担。http { gzip_min_length 256; # 只有大于256字节的响应才会被压缩 }5. 禁用IE6的压缩老版本的IE浏览器(IE6及以下)可能不支持Gzip压缩,可以通过gzip_disable指令禁用对这些浏览器的压缩。http { gzip_disable "MSIE [1-6]\."; # 禁用IE6及以下版本的Gzip压缩 }6. 配置浏览器缓存虽然压缩可以减少服务器带宽使用,但它会增加CPU负载。为了减轻服务器压力,可以配置浏览器缓存,让浏览器存储压缩后的内容,减少重复请求。location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; # 设置资源的过期时间 add_header Cache-Control "public"; # 指示资源可以被浏览器和代理缓存 }7. 测试和监控在应用这些配置后,使用工具如curl或在线Gzip检测服务来测试压缩是否生效。监控服务器的CPU使用情况和响应时间,以确保压缩带来的性能提升大于CPU负载的增加。通过合理配置Gzip压缩,可以在不显著增加服务器负载的情况下,显著减少网络传输数据的大小,提高用户体验。在进行压缩调优时,需要根据服务器的CPU能力和网络条件来平衡压缩级别和最小压缩大小,以达到最佳的性能。5. 负载均衡策略Nginx作为高性能的HTTP和反向代理服务器,提供了多种负载均衡策略,可以帮助分散流量,提高网站的可用性和性能。以下是负载均衡策略的具体调优步骤:1. 选择合适的负载均衡策略Nginx支持多种负载均衡策略,包括:轮询(Round Robin):这是默认的策略,请求按时间顺序逐一分配到不同的服务器,如果服务器宕机,自动剔除。最少连接(Least Connections):分配到当前连接数最少的服务器。IP哈希(IP Hash):根据请求的来源IP地址,将请求分配到固定的服务器,可以在一定程度上保持用户的会话状态。权重(Weight):指定不同服务器的权重,权重越高,分配的请求越多。在nginx.conf的upstream块中定义负载均衡策略:upstream backend { server backend1.example.com weight=3; server backend2.example.com; server backend3.example.com backup; # 备用服务器 ip_hash; # 使用IP哈希策略 }2. 配置健康检查使用health_check模块可以对后端服务器进行健康检查,以确保流量只被定向到健康的服务器。server { location / { proxy_pass http://backend; health_check interval=10 fails=3 passes=2; } }3. 使用持久连接对于HTTP/1.1客户端,可以使用持久连接(Keepalive)来减少建立和关闭连接的次数。upstream backend { server backend1.example.com; keepalive 32; # 保持活动的连接数 }4. 调整超时时间适当调整超时时间,以确保Nginx能够快速响应后端服务器的变化。proxy_connect_timeout 5s; # 设置与后端服务器建立连接的超时时间 proxy_read_timeout 60s; # 设置从后端服务器读取响应的超时时间 proxy_send_timeout 5s; # 设置向后端服务器发送请求的超时时间 5. 限制连接数为了避免单个客户端占用过多资源,可以限制每个客户端的连接数。limit_conn_zone $binary_remote_addr zone=mylimit:10m; limit_conn mylimit 5; # 每个IP地址最多允许5个同时连接 6. 监控和调整使用Nginx的统计模块(如ngx_http_stub_status_module)来监控负载均衡的性能。根据监控数据调整负载均衡策略和服务器权重,以优化性能。7. 考虑使用第三方负载均衡解决方案对于大型应用或需要更多高级功能的场景,可以考虑使用商业负载均衡器或云服务提供的负载均衡解决方案。通过合理配置负载均衡策略,可以有效分散流量,提高网站的可用性和性能。在进行负载均衡调优时,需要根据服务器的具体情况和实际需求来选择合适的策略,并进行持续的监控和调整转载自https://www.cnblogs.com/wgjava/p/18289926
  • [技术干货] Nginx搭建自己的CDN服务器的方法步骤【转】
    nginx安装12sudo apt updatesudo apt install nginxnginx配置文件/etc/nginx/nginx.conf或/etc/nginx/sites-available/default设置缓存在Nginx配置中启用缓存,这样可以缓存CDN服务器上的静态内容,以提高性能和速度。1234567891011121314151617181920212223http {    # 在http段下设置缓存路径    proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;                     # 设置缓存的过期时间    proxy_cache_valid 200 302 10m;    proxy_cache_valid 404 1m;     # 设置代理缓存使用的密钥和缓存的最大大小    proxy_cache_key "$scheme$request_method$host$request_uri";     server {        # 其他服务器设置        location / {            # 使用代理缓存            proxy_cache my_cache;//启用缓存            proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;            proxy_cache_bypass $http_cache_control;//http头            proxy_ignore_headers Cache-Control;            proxy_pass http://backend_server;//后端数据源服务器        }    }}正向代理(Forward Proxy)和反向代理(Reverse Proxy)是网络通信中两种常见的代理服务器类型:方向:正向代理面向客户端,反向代理面向服务器。位置:正向代理位于客户端旁边,反向代理位于服务器旁边。作用:正向代理用于客户端访问控制和匿名访问,反向代理用于负载均衡和安全性。目的:正向代理帮助客户端“前进”访问互联网,反向代理帮助服务器“反向”处理外部请求。设置域名为你的CDN服务器配置域名并确保域名正确解析到你的服务器,你需要按照以下步骤操作:步骤1:域名注册和购买选择一个域名注册商,如GoDaddy、Namecheap、阿里云等。搜索你想要注册的域名,确保它是可用的。完成购买流程并支付相应的费用。步骤2:DNS管理登录你的域名注册商的控制面板。找到DNS管理或域名管理的部分。步骤3:设置DNS记录A记录:创建一个A记录将域名指向你的CDN服务器的公网IP地址。例如,如果你的CDN服务器IP是1.2.3.4,创建一个A记录,将yourdomain.com指向1.2.3.4。CNAME记录:如果需要将子域名重定向到CDN服务器,可以创建CNAME记录。例如,cdn.yourdomain.com可以CNAME到yourdomain.com。步骤4:在CDN服务器上配置Web服务器确保你的CDN服务器上安装了Web服务器软件,如Nginx或Apache。配置Web服务器,使其能通过你的域名来提供服务。例如,在Nginx中,你需要配置一个server块来监听80端口(HTTP)或443端口(HTTPS):123456789server {    listen 80;    server_name www.yourdomain.com;    root /path/to/your/web/root;    index index.html index.htm;    location / {        try_files $uri $uri/ =404;     } }如果你使用了SSL/TLS证书,确保配置了HTTPS并监听443端口。步骤5:部署SSL/TLS证书(推荐)如果你想启用HTTPS,可以通过Let’s Encrypt获取免费的SSL/TLS证书。安装并配置证书,使Web服务器使用SSL/TLS加密。步骤6:测试域名解析等待DNS更改全球生效,这可能需要一些时间(通常是几分钟到48小时)。使用命令行工具如ping或nslookup来检查域名是否已经指向了正确的IP地址。步骤7:验证配置在Web浏览器中输入你的域名,看是否能够成功访问你的CDN服务器上的内容。检查Web服务器的访问日志,确认有来自不同地区的访问记录。步骤8:监控和维护定期检查域名的DNS记录和CDN服务器的状态,确保一切正常运行。完成以上步骤后,你的域名就应该正确地指向你的CDN服务器,并且用户可以通过该域名访问你的网站内容了。记得在进行任何更改时,都要仔细检查配置文件的语法,并在保存更改后重新启动Web服务器。启用Gzip压缩:启用Nginx的Gzip压缩功能,以减小传输内容的大小,提高网站的加载速度。你可以在Nginx配置文件中添加以下内容:1234http {    gzip on;    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;}设置内容源:配置Nginx以从你的源服务器(通常是你的网站服务器)获取内容。你可以使用proxy_pass指令将请求转发到源服务器。12345678910proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g;server {    ...    location / {        proxy_pass http://backend;        proxy_cache my_cache;        proxy_cache_bypass $http_cache_control;        ...    }}测试和调优:完成上述配置后,测试你的CDN服务器,确保它按预期工作。你可能需要根据实际情况对配置进行调整以优化性能。常见如何调优CDN:调优CDN(内容分发网络)通常需要综合考虑多种因素,包括缓存策略、节点选择、网络优化等。以下是一些具体的调优步骤和例子:1. 缓存策略调优:例子:如果你的网站有大量的静态资源,如图片、CSS和JavaScript文件,可以通过设置更长的`Cache-Control`头部值来提高缓存命中率。例如,可以在Nginx中设置:123location ~* \.(jpg|jpeg|png|gif|js|css)$ {        expires 30d;    }2. 节点选择优化:例子:使用CDN提供商的地理DNS或任意cast DNS功能,将用户定向到最近的服务器节点,减少延迟。例如,在阿里云CDN中,可以配置DNS解析策略,确保用户就近访问。3. 内容预热:例子:在新产品发布前,使用CDN的内容预热功能,提前将资源分发到各个边缘节点,避免在高流量时段对源站造成压力。4. 动态内容优化:例子:对于频繁变动的内容,可以配置CDN缓存为较短的过期时间或使用“no-cache”指令,以确保用户获取最新数据。5. HTTPS优化:例子:启用SSL/TLS加速功能,如使用SPDY或HTTP/2协议,减少HTTPS握手时间。同时,确保CDN支持OCSP Stapling,减少SSL证书验证时间。6. 网络连接优化:例子:如果`traceroute`显示用户到CDN节点的路由路径不理想,可以联系CDN提供商优化路由策略。7. 资源压缩:例子:启用Gzip压缩,减少传输数据的大小。在Nginx中可以设置:123location ~* \.(html|css|js|json|xml|ld\+json|ejs|svg|png|jpg|jpeg|gif|ico)$ {         gzip on;     }8. HTTP/2 启用:例子:在支持HTTP/2的CDN节点上启用该协议,利用其多路复用、服务器推送等特性提高性能。9. 图片优化:例子:使用CDN的图片处理功能,自动进行图片压缩和格式转换,如将JPG转换为WebP格式。10. 性能监控与日志分析:例子:定期检查CDN日志,分析错误码、访问模式和性能指标,使用工具如GoAccess或AWStats进行日志分析。11. 定制化配置:例子:根据网站特性,定制CDN的配置。例如,对于视频网站,可以配置CDN以支持视频流的平稳传输。12. 使用性能测试工具:例子:使用WebPageTest或阿里云的云拨测产品,定期测试CDN性能,分析不同条件下的性能表现。13. 故障排查:例子:如果发现某些资源加载缓慢,检查资源URL是否被CDN正确缓存,确认没有因为意外的查询字符串导致缓存失效。14. 用户行为分析:例子:分析用户访问模式,识别热门内容和高流量时段,据此调整CDN策略,如增加热门内容的缓存或在高峰时段增加带宽。通过上述调优步骤,可以显著提升CDN的性能,改善网站加载速度和用户体验。调优是一个持续的过程,需要定期进行性能测试和配置调整。对于视频网站,可以配置CDN以支持视频流的平稳传输。对于视频网站,确保视频内容的平稳传输是提升用户体验的关键。以下是一些具体的配置步骤和例子:1. 视频内容的缓存策略:例子:在Nginx中配置视频文件的缓存时间,使用`proxy_cache_valid`指令为不同类型的视频内容设置不同的缓存时间。12345location ~* \.(mp4|avi|mov)$ {        proxy_cache my_cache;        proxy_cache_valid 200 1h;        proxy_cache_valid 404 1m;    }2. 视频切片和分块传输:例子:使用Apple HLS(HTTP Live Streaming)或DASH(Dynamic Adaptive Streaming over HTTP)技术,将视频切分为多个小片段,允许客户端按需加载视频的不同部分。配置CDN以支持这些协议,确保客户端可以有效地从最近的节点请求视频切片。3. 自适应比特率流:例子:在视频服务器上启用自适应比特率流,允许客户端根据当前网络条件选择最合适的视频质量。这通常通过HLS或DASH实现。4. 内容预热:例子:对于即将发布的热门视频内容,使用CDN的内容预热功能,提前将视频内容分发到各个边缘节点,减少发布时的源站压力。5. 视频编码和压缩:例子:使用FFmpeg工具对视频进行压缩和转码,生成不同分辨率和比特率的视频流,以适应不同用户的带宽条件。1ffmpeg -i input.mp4 -c:v libx264 -crf 24 -preset veryfast -c:a aac -b:a 128k -movflags +faststart output.mp46. 启用HTTP/2:例子:在服务器上启用HTTP/2,利用其多路复用特性减少连接数,提高视频传输效率。1234567server {    listen 80;    listen 443 ssl http2;    server_name example.com;    ...    http2_push_preload on;}7. 负载均衡和故障转移:例子:在CDN配置中设置负载均衡策略,如轮询、最少连接或IP哈希,确保视频请求均匀分配到各个节点。同时,配置故障转移机制,以便在节点故障时自动切换。8. 视频播放器配置:例子:使用支持自适应比特率流的播放器,如Video.js或JW Player,并配置播放器以从CDN节点获取视频流。9. 监控和日志分析:例子:利用CDN提供商的监控工具,如AWS CloudFront的日志分析,监控视频流的性能,如请求量、错误率和传输速度。10. 带宽预留和QoS:例子:在CDN上为视频流预留足够的带宽,并设置优先级,确保在高流量时段也能保持视频传输的质量。11. 使用QUIC协议:例子:如果CDN支持QUIC协议,可以启用它以减少连接建立时间,并提高视频传输的稳定性。12. 客户端适配:例子:在视频播放器中实现网络条件自动检测,根据用户的带宽和设备性能自动选择最合适的视频质量。通过上述配置,可以显著提高视频网站的性能,减少缓冲和中断,提供更加流畅的视频观看体验。这些措施需要根据具体的CDN提供商和视频网站需求进行调整和优化。测试123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354测试CDN(内容分发网络)性能通常涉及以下几个步骤: 1. **选择测试工具**:   - 使用在线工具如WebPageTest、GTmetrix或Google PageSpeed Insights进行初步测试。   - 例子:访问WebPageTest网站,输入你的网站URL,并选择不同的测试位置和网络条件进行测试。 2. **性能基准测试**:   - 在实施任何CDN配置更改之前,进行性能基准测试,以便于后续比较优化效果。   - 例子:记录下初始的加载时间、TTFB(首字节时间)、缓存命中率等关键指标。 3. **全球性能测试**:   - 使用全球分布式的测试工具,如Akamai's CloudTest或Gomez,测试不同地理位置下的性能。   - 例子:使用CloudTest从北美、亚太和欧洲等多个地区测试网站的加载时间和响应时间。 4. **资源加载测试**:   - 使用工具如Apache JMeter或Siege模拟高并发请求,测试CDN对资源加载的处理能力。   - 例子:在JMeter中配置多个线程组模拟用户并发访问,测试CDN的负载均衡和响应能力。 5. **视频和流媒体测试**:   - 如果网站包含视频内容,使用视频特定的测试工具,如Wireshark或Nagios,监控视频流的稳定性和质量。   - 例子:使用Wireshark捕获视频流传输过程中的数据包,分析延迟和丢包情况。 6. **SSL/TLS测试**:   - 对于使用HTTPS的网站,使用SSL Labs的SSL Test工具测试CDN服务器的SSL/TLS配置。   - 例子:输入网站URL进行测试,获取SSL/TLS配置的评级和改进建议。 7. **缓存策略测试**:   - 检查CDN是否正确地实现了缓存策略,如验证`Cache-Control`和`Expires`头部。   - 例子:使用curl命令测试资源的HTTP头部信息:     ```bash     curl -I https://www.example.com/image.jpg     ``` 8. **DNS解析测试**:   - 使用`dig`或`nslookup`命令测试CDN的DNS解析速度和准确性。   - 例子:执行`dig example.com`查看DNS解析结果和时间。 9. **监控和日志分析**:   - 利用CDN提供商的监控系统,分析实时性能数据和日志文件。   - 例子:在AWS CloudFront中查看实时日志,分析请求量、错误率和流量模式。 10. **用户体验测试**:    - 使用Real User Monitoring (RUM) 工具收集真实用户的性能反馈。    - 例子:集成New Relic或Google Analytics的RUM功能,追踪实际用户的性能体验。 11. **故障转移测试**:    - 模拟网络故障,测试CDN的故障转移机制是否有效。    - 例子:使用网络模拟器如Clumsy中断连接,看CDN是否能够自动切换到健康节点。 12. **性能调优测试**:    - 根据测试结果调整CDN配置,如修改缓存时间、负载均衡策略等,然后重新测试以验证改进效果。    - 例子:在Nginx中调整缓存策略后,再次使用WebPageTest进行测试,比较前后性能差异。 通过上述步骤,你可以全面地测试CDN的性能,识别瓶颈,并根据测试结果进行调优。记住,CDN测试和调优是一个持续的过程,需要定期进行以适应网站流量和内容的变化。多路复用多路复用(Multiplexing)是一种通信方式,允许多个数据流共享单一的物理链路,通过不同的标识符区分不同的数据流。在网络协议中,多路复用计数通常指的是在多路复用上下文中,可以同时传输的独立数据流的数量。在HTTP/2协议中,多路复用是一个核心特性,它允许客户端和服务器在单一的TCP连接上同时发送多个请求和响应,从而减少了连接的建立和关闭的开销,提高了传输效率。多路复用计数的一些关键点:并行传输:在HTTP/2中,多路复用允许在同一个TCP连接上并行传输多个请求和响应,而不是像HTTP/1.x那样需要为每个请求/响应建立和关闭一个连接。流ID:每个HTTP/2的请求或响应流都被分配一个唯一的流ID,用于区分不同的数据流。性能提升:多路复用减少了连接的建立和关闭时间,减少了HTTP头部信息的冗余传输,从而提高了网页的加载速度。流优先级:HTTP/2支持流的优先级和权重,允许客户端和服务器控制不同流的传输顺序。头部压缩:HPACK算法用于压缩HTTP头部,进一步减少了数据传输量。流量控制:HTTP/2使用流控制窗口来控制数据的发送速率,避免网络拥塞。例子:假设一个网页需要加载多个资源,如HTML、CSS、JavaScript文件和图片。在HTTP/1.x中,这些资源可能需要通过多个TCP连接顺序加载。而在HTTP/2中,所有这些资源可以同时在单一的TCP连接上加载,每个资源分配一个流ID,客户端和服务器通过流ID来区分和管理这些并行的传输流。例如,客户端可能发送如下的HTTP/2请求:123456HEADERS (stream_id=1): :method: GET                   :scheme: https                   :path: /css/style.css                  :authority: www.example.com                 :priority: 1BLOCK (stream_id=1): [data for stream 1]123456HEADERS (stream_id=3): :method: GET                   :scheme: https                   :path: /js/script.js                  :authority: www.example.com                 :priority: 3BLOCK (stream_id=3): [data for stream 3]在这个例子中,流1和流3是两个独立的请求,它们通过不同的流ID进行区分,并且可以同时在单一的TCP连接上传输。总的来说,多路复用计数指的是在多路复用连接中可以打开的流的数量,它是衡量多路复用能力的一个指标。在HTTP/2中,多路复用允许更高效的数据传输,减少了网页加载时间,改善了用户体验。
  • Nginx 与 Node.js 的集成-转载
    Nginx 与 Node.js 的集成在现代 Web 开发中,Nginx 和 Node.js 是两种非常流行且高效的技术。Nginx 作为一个高性能的 Web 服务器和反向代理服务器,广泛应用于静态资源的处理、负载均衡、反向代理等场景。而 Node.js 则是一个基于事件驱动的 JavaScript 运行环境,适合构建高并发、实时的网络应用。将 Nginx 与 Node.js 集成,利用 Nginx 的反向代理功能将请求转发到 Node.js 应用中,可以有效地提升 Web 应用的性能、可扩展性和安全性。一、Nginx 和 Node.js 集成的优势1.1 高性能反向代理Nginx 是一个高效的反向代理服务器,具有出色的并发处理能力。当将 Node.js 应用部署在 Nginx 后面时,Nginx 可以作为前端的反向代理,将来自客户端的请求转发给 Node.js。这样,Nginx 负责处理静态资源(如图片、CSS、JavaScript 文件),并将动态请求(如 API 请求)转发给 Node.js 应用进行处理,减少了 Node.js 的负担。1.2 静态资源处理与负载均衡Nginx 在处理静态资源(如图像、CSS、JavaScript 等)方面的性能非常强大。它能够高效地处理大量并发请求,而 Node.js 更适合处理动态请求。将静态资源的处理交给 Nginx,可以减少 Node.js 的负担,充分发挥 Nginx 的优势。此外,Nginx 还可以作为负载均衡器,将客户端的请求按轮询、加权等方式分发到多个 Node.js 实例,提高系统的扩展性和容错能力。1.3 安全性与 HTTPS 支持Nginx 提供了非常强大的安全性功能,如访问控制、防火墙设置、请求过滤等。通过将 Nginx 作为反向代理,还可以将 HTTPS 配置和证书管理的责任交给 Nginx,而不需要将其集成到 Node.js 应用中,从而简化了 Node.js 应用的配置。1.4 WebSocket 和长连接支持Node.js 的事件驱动模型非常适合处理 WebSocket 和长连接。而 Nginx 也可以很好地支持 WebSocket 协议。通过 Nginx 转发 WebSocket 请求到 Node.js 应用,可以使得 Node.js 更专注于处理实时通信,而 Nginx 负责转发和管理连接。二、Nginx 和 Node.js 集成的工作原理在将 Nginx 与 Node.js 集成时,Nginx 作为反向代理服务器,负责接收来自客户端的请求。具体工作流程如下:客户端请求:客户端发送请求到 Nginx,通常是通过 HTTP 或 HTTPS 协议。Nginx 处理静态资源:Nginx 会处理静态资源(如 HTML、图片、CSS、JavaScript 文件),如果请求的是动态内容,则将请求转发给 Node.js。反向代理到 Node.js:Nginx 将动态请求转发到 Node.js 应用,Node.js 处理请求并返回响应。响应返回客户端:Nginx 将 Node.js 返回的响应发送给客户端,完成整个请求的处理过程。2.1 基本的反向代理设置Nginx 通过 proxy_pass 指令将请求转发到后端的 Node.js 应用。基本配置如下:server {    listen 80;    server_name example.com;    # 处理静态文件    location /static/ {        root /var/www/html;    }    # 转发 API 请求到 Node.js 应用    location /api/ {        proxy_pass http://localhost:3000;  # 假设 Node.js 应用运行在 3000 端口        proxy_http_version 1.1;  # 使用 HTTP/1.1        proxy_set_header Upgrade $http_upgrade;  # 支持 WebSocket        proxy_set_header Connection 'upgrade';        proxy_set_header Host $host;        proxy_cache_bypass $http_upgrade;    }}在上述配置中,Nginx 会将 /static/ 路径下的请求交给自己处理,而将以 /api/ 为前缀的请求转发到 Node.js 应用。proxy_pass 指令将请求转发到运行在 3000 端口的 Node.js 应用。2.2 支持 WebSocketNode.js 常用于实时应用(如聊天应用、实时通知等),这类应用通常使用 WebSocket 协议。Nginx 需要进行特别配置,才能正确地转发 WebSocket 请求。server {    listen 80;    server_name example.com;    # WebSocket 代理    location /ws/ {        proxy_pass http://localhost:3000;  # Node.js WebSocket 服务运行在 3000 端口        proxy_http_version 1.1;  # 使用 HTTP/1.1        proxy_set_header Upgrade $http_upgrade;  # 支持 WebSocket        proxy_set_header Connection 'upgrade';  # 允许升级协议        proxy_set_header Host $host;        proxy_cache_bypass $http_upgrade;    }}在 WebSocket 的配置中,Upgrade 和 Connection 头部的设置至关重要,Nginx 需要通过这些头部告知 Node.js,客户端希望通过 WebSocket 建立长连接。2.3 HTTPS 配置在生产环境中,为了保证安全性,通常会启用 HTTPS。可以将 SSL/TLS 配置留给 Nginx 处理,而 Node.js 只需处理 HTTP 请求。Nginx 配置 HTTPS 的基本方法如下:server {    listen 443 ssl;    server_name example.com;    ssl_certificate /etc/nginx/ssl/example.com.crt;    ssl_certificate_key /etc/nginx/ssl/example.com.key;    location / {        proxy_pass http://localhost:3000;  # 将请求转发给 Node.js 应用        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    }}在 Nginx 配置中,ssl_certificate 和 ssl_certificate_key 指定了 SSL 证书和私钥的路径。然后,Nginx 会将所有的 HTTPS 请求转发到 Node.js 应用。三、部署 Node.js 应用在将 Nginx 与 Node.js 集成时,Node.js 应用通常需要运行在某个端口上。为保证 Node.js 在生产环境中能够高效稳定运行,通常会将其部署在后台并使用进程管理工具(如 PM2)来管理应用。3.1 使用 PM2 启动 Node.js 应用PM2 是一个功能强大的 Node.js 进程管理工具,它能够确保 Node.js 应用在崩溃后自动重启,并支持日志管理、负载均衡等功能。使用 PM2 启动 Node.js 应用的基本命令如下:pm2 start app.js  # 启动 Node.js 应用pm2 save  # 保存进程配置pm2 startup  # 配置系统开机自启123通过 PM2 启动 Node.js 应用后,Nginx 可以将请求转发到对应的端口(例如 3000 端口)。3.2 配置 Nginx 与 PM2 协同工作在 Nginx 中配置反向代理时,确保将请求转发到 PM2 管理的 Node.js 应用。例如,如果应用运行在 3000 端口,那么 Nginx 配置中的 proxy_pass 应指向 http://localhost:3000。四、常见问题与解决方案4.1 反向代理时 WebSocket 连接失败WebSocket 协议需要特殊处理,确保 Nginx 在代理时能正确地升级 HTTP 协议到 WebSocket 协议。检查以下 Nginx 配置是否正确:location /ws/ {    proxy_pass http://localhost:3000;    proxy_http_version 1.1;    proxy_set_header Upgrade $http_upgrade;    proxy_set_header Connection 'upgrade';    proxy_set_header Host $host;    proxy_cache_bypass $http_upgrade;}确保 Upgrade 和 Connection 头部被正确传递,且 WebSocket 请求的路径(如 /ws/)在 Nginx 配置中被正确匹配。4.2 Node.js 应用负载均衡如果有多个 Node.js 实例运行在不同的端口上,可以通过 Nginx 配置负载均衡,合理分配客户端请求:upstream node_app {    server 127.0.0.1:3000;    server 127.0.0.1:3001;    server 127.0.0.1:3002;}server {    listen 80;    server_name example.com;    location / {        proxy_pass http://node_app;  # 使用负载均衡        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    }}Nginx 会将客户端请求按照轮询或加权的方式分配到多个 Node.js 实例,提升整体性能和可用性。4.3 处理 SSL 证书错误如果在配置 SSL 时遇到证书错误,可以使用 openssl 工具检查证书链是否完整。确保证书文件和私钥文件的路径正确,并且证书链包含所有中间证书。openssl s_client -connect example.com:4431通过上述命令,可以验证 SSL 证书是否配置正确。五、总结将 Nginx 与 Node.js 集成,能够充分发挥 Nginx 在静态资源处理、负载均衡和安全性上的优势,同时利用 Node.js 在动态请求和实时应用中的高效性。通过合理的配置,Nginx 可以高效地代理 Node.js 应用,优化性能并提升系统的可靠性和扩展性。————————————————                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                        原文链接:https://blog.csdn.net/Flying_Fish_roe/article/details/144523159
  • Nginx的功能模块
    Nginx是一个高性能的HTTP和反向代理服务器,同时支持IMAP/POP3/SMTP/TCP(1.9或更高版本)代理服务。Nginx的功能强大且多样,这主要得益于其丰富的模块系统。以下是对Nginx的一些主要功能和模块的详细展开:核心模块ngx_http_core_module:Nginx的核心模块,提供了HTTP服务的基本功能。它负责处理HTTP请求和响应,并包含丰富的配置指令。例如,可以定义HTTP服务器的监听端口、访问日志、错误日志等,配置请求的解析和响应的处理,如请求头和响应头的处理,还可以设置客户端请求的限速和连接超时等。代理模块ngx_http_proxy_module:Nginx的代理模块,用于将客户端请求转发到后端服务器。它实现了反向代理功能,支持HTTP、HTTPS和WebSocket协议。通过配置代理缓存,可以减少后端服务器的负载。此外,它还可以将客户端请求分发到多个后端服务器,实现负载均衡。重写模块ngx_http_rewrite_module:Nginx的重写模块,用于修改客户端请求的URL。它可以根据特定的规则对请求进行重写或重定向,支持正则表达式的使用,实现灵活的URL重写规则。URL重写功能可以将旧的URL重写为新的URL,实现网站的伪静态化。路径重定向功能则可以根据不同的请求条件,将请求重定向到不同的页面或服务器。SSL模块ngx_http_ssl_module:Nginx的SSL模块,用于支持HTTPS协议,提供加密传输和安全认证功能。它支持SSL证书的管理,对客户端和服务器之间的数据进行加密处理,提供安全的HTTPS连接,保障数据的安全性和完整性。在需要加密传输和安全认证的场景中,如电子商务、银行等,可以使用HTTPS协议保护客户端和服务器之间的通信。压缩模块ngx_http_gzip_module:Nginx的压缩模块,用于对HTTP响应数据进行压缩,减少数据传输量,提高访问速度。它支持多种压缩算法和级别,可以根据需要调整压缩效果。在带宽有限或网络延迟较高的场景中,使用压缩模块可以减少数据传输时间,提高用户体验。在提供大量静态资源的场景中,压缩文件大小可以减少服务器带宽消耗。流模块ngx_stream_core_module:Nginx的流模块,用于处理TCP和UDP协议的流量,实现四层负载均衡功能。它提供了高性能和可扩展的解决方案,适用于游戏服务器、实时通信等场景。例如,在游戏服务器场景中,可以使用流模块处理玩家与服务器之间的TCP和UDP流量,实现游戏的稳定运行。在实时通信场景中,可以使用流模块处理音视频流的传输,保证通信的质量和稳定性。负载均衡模块ngx_http_upstream_module:Nginx的负载均衡模块,用于配置后端服务器列表和负载均衡策略。它可以配置后端服务器列表,定义服务器的地址和权重等。同时,它支持多种负载均衡算法,如轮询、IP哈希等。在高并发场景中,使用负载均衡模块可以将请求分发到多个后端服务器,提高系统的并发处理能力。在多服务器部署场景中,使用负载均衡模块可以实现故障转移和故障恢复,提高系统的可用性。其他常用模块http_cache_purge_module:用于清除缓存。http_auth_basic_module:用于基本认证。http_limit_req_module:用于限制请求速率,防止恶意请求或过载。http_limit_conn_module:用于限制连接数,保护服务器资源。http_log_module:用于日志记录,可以记录访问日志和错误日志,帮助管理员监控和分析服务器的运行状况。http_geo_module:用于基于IP地址的地理位置信息,可以根据客户端的IP地址判断其地理位置,并基于地理位置进行访问控制或内容分发等。综上所述,Nginx凭借其丰富的功能模块和强大的性能,在企业级应用中发挥着重要的作用。在实际应用中,可以根据业务需求选择合适的模块和配置,以达到最佳性能。
  • [技术干货] Nginx配置缓存和清缓存
    Nginx不仅可以作为Web服务器,还可以作为缓存服务器使用。通过Nginx缓存,可以对一些静态资源或者数据更新频率较低的后端服务做缓存,降低静态资源或后端服务的响应时间,同时也会降低后端的负载。以下将介绍Nginx配置缓存和清除缓存的方法。Nginx配置缓存要配置Nginx缓存,可以按照以下步骤进行:修改Nginx配置文件:在http上下文中使用proxy_cache_path指令创建keys zone,即创建一块共享内存空间,用于存储缓存数据的active key。同时,指定一个目录,用于存储缓存的数据。在http、server、location上下文中,使用proxy_cache指令,指定要使用的keys zone。在http、server、location上下文中,使用proxy_cache_valid指令,指定针对哪些返回码的响应做缓存,以及缓存多长时间。示例配置:假设要对一个6081端口的后端服务做缓存,Nginx配置示例如下:# 创建keys zone——test-cache,并设置1MB的共享内存空间 # 指定缓存数据保存在/tmp/nginx-cache目录下 proxy_cache_path /tmp/nginx-cache keys_zone=test-cache:1m use_temp_path=off; server { listen 12345; location / { proxy_cache test-cache; # 使用test-cache缓存zone # 只缓存状态码是200的响应,缓存时间为10分钟 proxy_cache_valid 200 10m; proxy_pass http://localhost:6081; # 代理后端服务 } }此外,如果需要缓存POST请求的响应,可以在http、server、location上下文中使用proxy_cache_methods指令指定POST参数,并使用proxy_cache_key指令在参数中添加$request_body变量。应用配置:将上述Nginx配置文件放到/etc/nginx/conf.d/目录下,并重新加载nginx服务使配置生效。清除Nginx缓存要清除Nginx的缓存,可以采取以下几种方法:手动删除缓存文件:Nginx默认的缓存路径是在/var/cache/nginx目录下(路径可能因安装方式或配置不同而有所差异)。可以通过命令sudo rm -rf /var/cache/nginx/*来删除所有缓存文件。但请注意,这种方法会删除所有缓存,可能会影响到正在被缓存的内容的访问。使用Nginx的proxy_cache_purge模块:如果Nginx配置了proxy_cache模块来进行缓存,可以使用proxy_cache_purge模块来清除指定URL的缓存。需要在Nginx配置文件中添加相应的配置,然后使用curl命令来发起清除缓存的请求。配置示例如下:location ~ /purge(/.*) { allow 127.0.0.1; # 只允许本地访问 deny all; proxy_cache_purge cache_zone_name $1; # 替换cache_zone_name为实际的缓存zone名称 }然后使用curl命令来清除缓存:curl -X PURGE http://example.com/purge/url_to_purge其中url_to_purge是要清除缓存的URL路径。重新加载Nginx配置:重新加载Nginx配置也会导致所有缓存文件被删除。但这种方法比较粗暴,通常不建议作为常规操作来使用。可以在需要完全清除缓存时考虑使用。重新加载Nginx配置的命令如下:sudo systemctl reload nginx使用缓存管理工具:有些Nginx的缓存管理工具可以帮助管理和清除缓存,例如ngx_cache_purge模块等。这些工具通常提供更丰富的功能和更灵活的操作方式,但需要根据具体需求进行选择和配置。注意事项在清除Nginx缓存之前,请确保已经备份了重要的数据或缓存内容,以防止误操作导致数据丢失。清除缓存可能会影响到正在被缓存的内容的访问速度和性能,因此请在进行清除操作之前评估其对业务的影响。在配置和使用Nginx缓存时,请务必根据实际需求进行合理的配置和优化,以提升系统的性能和可靠性。综上所述,Nginx配置缓存和清除缓存的方法相对简单且灵活,可以根据实际需求进行选择和配置。通过合理的配置和优化,可以充分利用Nginx的缓存功能来提升系统的性能和用户体验。
  • [问题求助] ASM 是否可以替代cce场景下的NGINX Ingress
    当前在我们项目的cce环境中,为了实现pod之间的通信,采用ingress维护了一个pod的路由配置,想询问是否可以替换成ASM实现一样的能力。找了一圈也没看到有开发的指导,这个ASM是否只可用于pod之间通信的监控,并不能进行路由信息的配置呢?
  • [技术干货] Nginx实现404页面的配置方法的两种方法【转】
    一个网站项目,肯定是避免不了404页面的,通常使用Nginx作为Web服务器时,有以下集中配置方式,一起来看看。第一种:Nginx自己的错误页面Nginx访问一个静态的html 页面,当这个页面没有的时候,Nginx抛出404,那么如何返回给客户端404呢?看下面的配置,这种情况下不需要修改任何参数,就能实现这个功能。123456789server {    listen      80;    server_name  www.example.com;    root   /html;    index  index.html index.htm;    location / {    }}定义错误页面码,如果出现相应的错误页面码,转发到那里。1error_page  404 403 500 502 503 504  /404.html;承接上面的location。1location = /404.html {放错误页面的目录路径。1root   /usr/share/nginx/html;第二种:反向代理的错误页面如果后台Tomcat处理报错抛出404,想把这个状态叫Nginx反馈给客户端或者重定向到某个连接,配置如下:123456789101112131415upstream www {    server 192.168.1.201:7777  weight=20 max_fails=2 fail_timeout=30s;    ip_hash;}server {    listen       80;    server_name www.example.com;    root   /html;    index  index.html index.htm;    location / {        if ($request_uri ~* ‘^/$') {            rewrite .*   http://www.example.com/index.html redirect        }    }}关键参数:这个变量开启后,我们才能自定义错误页面,当后端返回404,nginx拦截错误定义错误页面123456789proxy_intercept_errors on;proxy_pass      http://www;proxy_set_header HOST   $host;proxy_set_header X-Real-IP      $remote_addr;proxy_set_header X-Forwarded-FOR $proxy_add_x_forwarded_for;error_page    404  /404.html;location = /404.html {    root   /usr/share/nginx/html;}AI专家指定一个url地址:12error_page 404  /404.html;error_page 404 = http://www.example.com/404.html;
  • [技术干货] nginx 部署前端vue项目-转载
     一、什么是nginx? Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡。 优点:  支持海量高并发:采用IO多路复用epoll。官方测试Nginx能够支持5万并发链接,实际生产环境中可以支撑2-4万并发连接数。 内存消耗少 可商业化 配置文件简单 除了这些优点还有很多,比如反向代理功能,灰度发布,负载均衡功能等 二、nginx 部署前端vue项目步骤 2.1 安装nginx 2.1.1 windows环境安装 到nginx官方下载系统相关的nginx版本安装  启动命令:  cd F:\nginx-1.19.4 start nginx 2.1.2 linux环境安装 通常情况下很少使用windows来作为nginx的服务器,一般使用linux。对于linux安装nginx有两种方式,一种是使用官方已经编译好的包来安装,一种是使用源码构建安装。  第一种方式参考官方地址https://nginx.org/en/linux_packages.html#stable  第二种方式参考官方地址https://nginx.org/en/docs/install.html中的Building from Sources片段,这种实际上就是下一个tar.gz包仍到linux服务去自己编译。  在linux服务上和window环境上使用nginx部署vue项目并没有太大差异,把构建好的vue项目dist上传到linux服务上,通用修改nginx服务器中的root来指向dist就ok了,然后使用  # centos 7 systemctl restart nginx.service # centos 6 service nginx restart # 或者是平滑重启 service nginx reload 2.2 打包vue项目 执行命令  npm run build 1  2.3 配置nginx 修改nginx配置文件,配置文件为conf下的nginx.conf,修改nginx.conf中的server配置片段  server {         listen       80;#默认端口是80,如果端口没被占用可以不用修改         server_name  localhost;         root        E:/vue_project/my_project/dist;#vue项目的打包后的dist          location / {             try_files $uri $uri/ @router;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404             index  index.html index.htm;         }         #对应上面的@router,主要原因是路由的路径资源并不是一个真实的路径,所以无法找到具体的文件         #因此需要rewrite到index.html中,然后交给路由在处理请求资源         location @router {             rewrite ^.*$ /index.html last;         }         #.......其他部分省略   }  完成nginx配置后重新加载配置文件  nginx -s reload 1 nginx -s reload 浏览器中访问:http://localhost 测试是否部署成功 ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/qq_28419035/article/details/141822578 
  • [问题求助] 请问L实例上websocket服务协议是不是默认关闭的?
    前端通过const ws = new WebSocket('ws://websocket'); 访问后端,返回失败,直接进入onerrorusted: truebubbles: falsecancelBubble: falsecancelable: falsecomposed: falsecurrentTarget: WebSocket {url: 'ws://websocket', readyState: 3, bufferedAmount: 0, onopen: ƒ, onerror: ƒ, …}defaultPrevented: falseeventPhase: 0returnValue: truesrcElement: WebSocket {url: 'ws://websocket', readyState: 3, bufferedAmount: 0, onopen: ƒ, onerror: ƒ, …}target: WebSocket {url: 'ws://websocket', readyState: 3, bufferedAmount: 0, onopen: ƒ, onerror: ƒ, …}timeStamp: 203.5type: "error"
  • [技术干货] Nginx实现灰度发布的常见方法小结【转】
    一、什么是灰度发布想象一下,你有一家生意火爆的餐厅,想要尝试推出一道新的招牌菜。但你又担心这道菜万一不受欢迎,会影响整个餐厅的声誉和生意。于是,你决定先只在一部分餐桌上提供这道新菜,观察顾客的反应。如果反响不错,再逐步推广到所有餐桌;如果反响不佳,就有时间对菜品进行调整和改进。在软件开发中,灰度发布的概念与此类似。它是一种逐步将新版本的应用或功能推送给部分用户,在收集反馈和验证稳定性后,再决定是否全面推广的策略。通过灰度发布,可以降低新版本上线带来的风险,及时发现并解决可能出现的问题,保障用户体验和业务的连续性。二、Nginx 在灰度发布中的角色Nginx 就像是一个智能的交通指挥员,它位于用户请求和后端服务之间,负责对请求进行分发和管理。在灰度发布中,Nginx 可以根据我们设定的规则,将请求有针对性地路由到不同的版本的服务上,从而实现对灰度流量的精确控制。三、Nginx 实现灰度发布的常见方法(一)基于权重的灰度发布这就好比是在一个水果摊上,苹果和香蕉的受欢迎程度不同,摊主会根据经验给它们分配不同的摆放面积(权重)。在 Nginx 中,我们可以为不同版本的服务设置不同的权重,来控制请求被分配到各个版本的比例。假设我们有两个版本的服务,旧版本(V1)和新版本(V2)。我们希望先将 20%的请求分配到新版本进行测试,那么可以在 Nginx 的配置中进行如下设置: upstream backend {     server v1.example.com weight=80;     server v2.example.com weight=20; }  server {     listen 80;     location / {         proxy_pass http://backend;     } } 在上述配置中,Nginx 会按照 80:20 的比例将请求分发到旧版本(V1)和新版本(V2)的服务上。随着新版本的表现越来越稳定,我们可以逐步增加新版本的权重,直到最终将所有请求都切换到新版本。(二)基于 Cookie 的灰度发布这就像是给用户发放了一张特殊的“入场券”,只有持有特定“入场券”的用户才能体验到新的服务。在 Nginx 中,我们可以通过读取用户请求中的 Cookie 信息,来决定将请求路由到哪个版本的服务。首先,在应用端设置一个标识用户是否参与灰度测试的 Cookie,例如 is_gray=1 表示参与,is_gray=0 表示不参与。然后在 Nginx 中进行如下配置: upstream backend {     server v1.example.com;     server v2.example.com; }  map $http_cookie $backend_version {     default v1.example.com;     "~*is_gray=1" v2.example.com; }  server {     listen 80;     location / {         proxy_pass http://$backend_version;         proxy_cookie_path / /;     } } 当用户的请求中带有 is_gray=1 的 Cookie 时,Nginx 会将请求路由到新版本(V2)的服务;否则,请求将被路由到旧版本(V1)的服务。(三)基于请求头的灰度发布这类似于在机场安检时,工作人员根据乘客的登机牌上的特殊标记来决定其通行路线。在 Nginx 中,我们可以根据请求头中的特定字段来实现灰度发布。假设我们在应用端设置了一个请求头 X-Gray-User: 1 来标识参与灰度测试的用户。在 Nginx 中,可以这样配置: upstream backend {     server v1.example.com;     server v2.example.com; }  map $http_x_gray_user $backend_version {     default v1.example.com;     "1" v2.example.com; }  server {     listen 80;     location / {         proxy_pass http://$backend_version;     } } 如果请求头 X-Gray-User 的值为 1,Nginx 会将请求路由到新版本(V2)的服务;否则,请求将被路由到旧版本(V1)的服务。(四)基于 IP 地址的灰度发布这有点像小区门口的保安,根据居民的门牌号(IP 地址)来决定是否允许其进入特定区域。在 Nginx 中,我们可以根据用户的 IP 地址来控制请求的路由。例如,我们希望只有特定 IP 段(如 192.168.1.0/24)的用户能够访问新版本的服务,可以这样配置: upstream backend {     server v1.example.com;     server v2.example.com; }  geo $remote_addr $backend_version {     default v1.example.com;     192.168.1.0/24 v2.example.com; }  server {     listen 80;     location / {         proxy_pass http://$backend_version;     } } 当用户的 IP 地址属于 192.168.1.0/24 这个网段时,Nginx 会将请求路由到新版本(V2)的服务;否则,请求将被路由到旧版本(V1)的服务。四、灰度发布的实践案例为了让大家更直观地理解 Nginx 灰度发布的实际应用,咱们来看一个具体的案例。假设我们有一个电商网站,正在对购物车功能进行重大升级。我们决定采用基于权重的灰度发布策略来逐步推出新功能。首先,我们将新版本的购物车服务部署到 v2.example.com ,旧版本的服务仍然运行在 v1.example.com 。然后,在 Nginx 中进行如下配置: upstream cart {     server v1.example.com weight=80;     server v2.example.com weight=20; }  server {     listen 80;     location /cart/ {         proxy_pass http://cart;     } } 这样,一开始只有 20%的用户在访问购物车时会使用到新版本的服务。我们密切关注这部分用户的反馈和系统的性能指标,如响应时间、错误率等。如果在一段时间内,新版本的服务表现稳定,没有出现明显的问题,我们可以逐步增加新版本的权重,比如调整为 50:50,让更多的用户体验到新功能。upstream cart {     server v1.example.com weight=50;     server v2.example.com weight=50; } 通过这样逐步推进的方式,我们既能够及时发现并解决新功能可能带来的问题,又不会对所有用户造成太大的影响,保障了业务的平稳运行。五、灰度发布中的注意事项在实施灰度发布的过程中,就像走钢丝一样,需要小心翼翼,注意以下几个关键事项:(一)数据一致性在灰度发布期间,不同版本的服务可能会处理相同的数据。这就好比两个厨师同时烹饪一道菜,很容易出现口味不一致的情况。因此,要确保不同版本的服务对数据的处理逻辑是一致的,避免出现数据混乱的问题。(二)监控与反馈要建立完善的监控体系,实时监测灰度版本的服务性能、用户行为等指标。同时,要积极收集用户的反馈,就像倾听顾客对新菜品的评价一样,及时发现问题并进行调整。(三)回滚机制俗话说,“不怕一万,就怕万一”。万一灰度发布过程中出现了严重的问题,要有快速回滚的机制,能够在最短的时间内恢复到旧版本的服务,保障业务的正常运行。(四)沟通与协调灰度发布涉及到开发、测试、运维等多个团队,需要保持良好的沟通与协调,确保各个环节的工作能够顺利进行。六、总结灰度发布是一种在软件开发中降低风险、保障用户体验的有效策略。而 Nginx 作为强大的反向代理服务器,为我们实现灰度发布提供了多种灵活的方法。通过合理地运用这些方法,并注意实施过程中的关键事项,我们能够在不断创新和优化软件的道路上走得更加稳健,为用户提供更加优质、可靠的服务。就像建造一座高楼大厦,每一块砖头都需要精心放置,每一个步骤都需要谨慎操作。灰度发布就是我们在软件这座大厦建设过程中的精心规划和稳步推进,让我们的软件在不断进化的同时,始终保持坚固和稳定。