首页
关于小站
朋友
壁纸
留言
时光之书
笔顺字帖
LayUI手册
Search
1
【PHP】PHPoffice/PHPSpreadsheet读取和写入Excel
1,678 阅读
2
【Layui】控制页面元素展示隐藏
1,524 阅读
3
【Git】No tracked branch configured for branch master or the branch doesn't exist.
1,466 阅读
4
【PHP】PHP实现JWT生成和验证
1,378 阅读
5
精准检测,助力社交管理 —— 微信好友检测服务来袭!
1,285 阅读
默认分类
PHP
ThinkPHP
Laravel
面向对象
设计模式
算法
基础
网络安全
Web
HTML
CSS
JavaScript
jQuery
Layui
VUE
uni-app
Database
MySQL
Redis
RabbitMQ
Nginx
Git
Linux
Soft Ware
Windows
网赚
Go
Docker
登录
Search
标签搜索
PHP
函数
方法
类
MySQL
ThinkPHP
JavaScript
OOP
Layui
Web
Server
Docker
Linux
PHPSpreadsheet
PHPoffice
Array
设计模式
Nginx
Git
排序算法
小破孩
累计撰写
247
篇文章
累计收到
13
条评论
首页
栏目
默认分类
PHP
ThinkPHP
Laravel
面向对象
设计模式
算法
基础
网络安全
Web
HTML
CSS
JavaScript
jQuery
Layui
VUE
uni-app
Database
MySQL
Redis
RabbitMQ
Nginx
Git
Linux
Soft Ware
Windows
网赚
Go
Docker
页面
关于小站
朋友
壁纸
留言
时光之书
笔顺字帖
LayUI手册
搜索到
6
篇与
的结果
2025-07-16
【Nginx】Nginx需具体配置示例(涵盖了复杂场景下的高级应用)
以下是 Nginx 常见场景的具体配置示例,配置文件可存放在 /etc/nginx/conf.d/ 目录下(Linux)或直接修改 nginx.conf(Windows):一、基础配置:静态网站托管配置文件(/etc/nginx/conf.d/mysite.conf)server { listen 80; server_name example.com www.example.com; # 替换为你的域名 # 网站根目录 root /var/www/html; index index.html index.htm; # 日志配置 access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; # 静态文件缓存 location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; # 静态资源缓存30天 } # 错误页面 error_page 404 /404.html; error_page 500 502 503 504 /50x.html; }操作步骤创建网站目录:sudo mkdir -p /var/www/html添加测试文件:echo "Hello, Nginx!" > /var/www/html/index.html验证配置:nginx -t重载配置:nginx -s reload二、反向代理:转发到后端服务场景1:代理到本地 Node.js 应用(端口3000)server { listen 80; server_name api.example.com; location / { proxy_pass http://localhost: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; # 超时设置 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; } }场景2:代理到多个后端服务器(负载均衡)# 定义后端服务器组 upstream backend_servers { server backend1.example.com weight=5; # 权重5 server backend2.example.com weight=3; # 权重3 server backend3.example.com backup; # 备份服务器 } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; # 其他 proxy_set_header 配置同上 } }三、HTTPS 配置(使用 Let's Encrypt 证书)前提条件已安装 Certbot:sudo apt install certbot python3-certbot-nginx域名已解析到服务器 IP自动配置(推荐)sudo certbot --nginx -d example.com -d www.example.comCertbot 会自动修改 Nginx 配置并设置证书自动更新。手动配置示例server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; # 强制 HTTPS } server { listen 443 ssl http2; server_name example.com www.example.com; # 证书路径(Let's Encrypt 默认路径) ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # SSL 优化配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # 其他配置(如 root、location 等)同 HTTP 配置 }四、URL 重写与跳转示例1:www 到非 www 跳转server { listen 80; server_name www.example.com; return 301 https://example.com$request_uri; }示例2:路径重写location /old-path/ { rewrite ^/old-path/(.*)$ /new-path/$1 permanent; # 301 永久重定向 }示例3:基于参数跳转if ($args ~* "id=([0-9]+)") { return 301 https://example.com/item/$1; }五、限流配置(防爬/防刷)限制单个 IP 的请求频率# http 块中定义限流规则 http { limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s; server { listen 80; server_name example.com; location /api/ { limit_req zone=mylimit burst=20 nodelay; # 每秒最多10个请求,突发最多20个,超出的请求直接返回503 } } }六、WebSocket 代理支持配置示例server { listen 80; server_name ws.example.com; location /ws/ { proxy_pass http://backend_websocket_server; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; # 防止 WebSocket 连接超时 proxy_read_timeout 86400; } }七、多站点配置(虚拟主机)在同一服务器托管多个域名# 站点1 server { listen 80; server_name site1.com www.site1.com; root /var/www/site1; } # 站点2 server { listen 80; server_name site2.com www.site2.com; root /var/www/site2; }八、静态文件优化配置配置 Gzip 压缩http { gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_buffers 16 8k; gzip_http_version 1.1; }九、常见问题处理配置1. 解决跨域请求(CORS)location /api/ { add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization' always; # OPTIONS 请求直接返回 204 if ($request_method = 'OPTIONS') { return 204; } }2. 隐藏 Nginx 版本信息http { server_tokens off; # 隐藏响应头中的 Nginx 版本 }配置验证与重载每次修改配置后,务必执行:nginx -t # 验证配置语法 nginx -s reload # 重载配置(不中断服务)以上配置可根据实际需求组合使用,例如同时配置 HTTPS、反向代理和限流。如需更复杂的场景(如 A/B 测试、灰度发布),可进一步扩展配置。以下是 Nginx 更高级的扩展配置示例,适用于复杂场景:十、A/B 测试与灰度发布基于 Cookie 的流量分发http { # 定义变量存储分流规则 map $cookie_ab_test $backend { default backend_a; "b" backend_b; } upstream backend_a { server backend1.example.com; } upstream backend_b { server backend2.example.com; } server { listen 80; server_name example.com; # 首次访问设置 Cookie if ($cookie_ab_test = "") { set $ab_test $random % 2; # 随机分为两组 if ($ab_test = 0) { add_header Set-Cookie "ab_test=a; path=/; domain=.example.com"; } if ($ab_test = 1) { add_header Set-Cookie "ab_test=b; path=/; domain=.example.com"; } } location / { proxy_pass http://$backend; } } }十一、基于用户区域的流量路由根据 IP 地理位置分发请求# 需要安装 ngx_http_geoip2_module 模块 http { geoip2 /path/to/GeoLite2-Country.mmdb { $geoip2_data_country_code country iso_code; } map $geoip2_data_country_code $backend { default backend_global; "CN" backend_china; "US" backend_usa; } upstream backend_global { server global.example.com; } upstream backend_china { server china.example.com; } upstream backend_usa { server usa.example.com; } server { listen 80; server_name example.com; location / { proxy_pass http://$backend; } } }十二、内容缓存配置配置代理缓存(如缓存 API 响应)http { # 定义缓存参数 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { listen 80; server_name api.example.com; location /static-api/ { proxy_pass http://backend_api; proxy_cache my_cache; proxy_cache_key "$scheme$request_method$host$request_uri"; proxy_cache_valid 200 302 12h; # 成功响应缓存12小时 proxy_cache_valid 404 1m; # 404缓存1分钟 # 缓存命中时添加响应头,便于调试 add_header X-Cache $upstream_cache_status; } } }十三、健康检查与自动剔除故障节点配置主动健康检查(需 nginx-plus 或 lua 模块)http { upstream backend_servers { server backend1.example.com max_fails=3 fail_timeout=30s; server backend2.example.com max_fails=3 fail_timeout=30s; # 健康检查(Nginx Plus 功能) zone backend 64k; health_check interval=5s fails=3 passes=2 uri=/health; } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; } } }使用 Lua 模块实现健康检查(开源版)# 需要安装 ngx_lua 模块 http { lua_shared_dict healthcheck 1m; init_by_lua_block { local hc = require "resty.healthcheck" local checker = hc.new({ name = "backend_checker", shm_name = "healthcheck", type = "http", http_req = "GET /health HTTP/1.0\r\nHost: backend\r\n\r\n", interval = 2000, # 2秒检查一次 timeout = 1000, # 超时时间1秒 fall = 3, # 连续3次失败标记为不可用 rise = 2, # 连续2次成功标记为可用 }) -- 添加后端服务器 checker:add_target("backend1.example.com", nil, 80, true) checker:add_target("backend2.example.com", nil, 80, true) -- 启动后台检查 local ok, err = checker:start() if not ok then ngx.log(ngx.ERR, "failed to start health checker: ", err) return end } upstream backend_servers { server backend1.example.com; server backend2.example.com; # 使用 Lua 脚本判断服务器是否健康 server 0.0.0.1; # 防止 upstream 为空 balancer_by_lua_block { local hc = require "resty.healthcheck" local checker = hc.new({ name = "backend_checker", shm_name = "healthcheck", type = "http", }) local ok, err = checker:get_reachable() if not ok then ngx.log(ngx.ERR, "no reachable backend server: ", err) return ngx.exit(500) end -- 设置要代理的服务器 local host, port = ok.host, ok.port local ok, err = ngx.balancer.set_current_peer(host, port) if not ok then ngx.log(ngx.ERR, "failed to set current peer: ", err) return ngx.exit(500) end } } }十四、请求限流与熔断基于漏桶算法的限流http { # 定义漏桶限流规则 limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s; # 每秒5个请求 server { listen 80; server_name api.example.com; location /api/ { limit_req zone=api_limit burst=10 nodelay; # 突发10个请求 # 超过限流时返回自定义错误页面 error_page 503 @api_blocked; } location @api_blocked { default_type application/json; return 503 '{"error":"Too many requests","code":429}'; } } }熔断机制(当后端服务不可用时)upstream backend_servers { server backend1.example.com; server backend2.example.com; # 当后端服务器返回500、502、503、504时,将请求转发到其他服务器 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; }十五、WebSocket 集群与会话保持基于 IP Hash 的会话保持upstream websocket_backend { ip_hash; # 相同IP的请求始终转发到同一后端服务器 server backend1.example.com:8080; server backend2.example.com:8080; } server { listen 80; server_name ws.example.com; location /ws/ { proxy_pass http://websocket_backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; # 保持长连接 proxy_read_timeout 3600s; } }十六、自定义日志格式与分析JSON 格式日志http { log_format json_log '{ "timestamp": "$time_iso8601", "remote_addr": "$remote_addr", "host": "$host", "request": "$request", "status": $status, "body_bytes_sent": $body_bytes_sent, "request_time": $request_time, "upstream_response_time": "$upstream_response_time", "http_referer": "$http_referer", "http_user_agent": "$http_user_agent" }'; server { listen 80; server_name example.com; access_log /var/log/nginx/access_json.log json_log; } }十七、HTTP/2 与 TLS 优化配置HTTP/2 与 OCSP 装订server { listen 443 ssl http2; server_name example.com; # 证书配置 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # 启用 OCSP 装订 ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; # TLS 优化 ssl_protocols TLSv1.3 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384"; # HTTP/2 优化 http2_push_preload on; # 启用 HTTP/2 预推送 }十八、自定义错误页面配置全局错误页面http { # 定义错误页面路径 error_page 400 /errors/400.html; error_page 401 /errors/401.html; error_page 403 /errors/403.html; error_page 404 /errors/404.html; error_page 500 502 503 504 /errors/50x.html; server { listen 80; server_name example.com; location /errors/ { internal; # 只允许内部重定向访问 root /var/www/html; } } }十九、Nginx 与 Lua 脚本集成示例:请求签名验证# 需要安装 ngx_lua 模块 server { listen 80; server_name api.example.com; location /api/ { # 验证请求签名 access_by_lua_block { local secret_key = "your_secret_key" local request_time = ngx.var.arg_timestamp local signature = ngx.var.arg_signature # 检查时间戳是否过期(防止重放攻击) local current_time = os.time() if not request_time or math.abs(current_time - tonumber(request_time)) > 300 then ngx.status = ngx.HTTP_UNAUTHORIZED ngx.say('{"error":"Invalid timestamp"}') ngx.exit(ngx.HTTP_UNAUTHORIZED) end # 验证签名 local args = ngx.req.get_uri_args() local sorted_keys = {} for k, _ in pairs(args) do if k ~= "sign" then table.insert(sorted_keys, k) end end table.sort(sorted_keys) local sign_str = "" for _, k in ipairs(sorted_keys) do sign_str = sign_str .. k .. "=" .. args[k] .. "&" end sign_str = sign_str .. "key=" .. secret_key local resty_sha1 = require "resty.sha1" local str = require "resty.string" local sha1 = resty_sha1:new() sha1:update(sign_str) local digest = sha1:final() local calculated_sign = str.to_hex(digest) if calculated_sign ~= signature then ngx.status = ngx.HTTP_UNAUTHORIZED ngx.say('{"error":"Invalid signature"}') ngx.exit(ngx.HTTP_UNAUTHORIZED) end } proxy_pass http://backend_api; } }二十、基于 JWT 的认证JWT 验证示例# 需要安装 lua-resty-jwt 模块 server { listen 80; server_name auth.example.com; location /api/ { access_by_lua_block { local jwt = require "resty.jwt" local secret = "your_jwt_secret" -- 从请求头中获取 JWT local auth_header = ngx.var.http_Authorization if not auth_header then ngx.status = ngx.HTTP_UNAUTHORIZED ngx.say('{"error":"Authorization header missing"}') ngx.exit(ngx.HTTP_UNAUTHORIZED) end -- 提取 token local _, _, token = string.find(auth_header, "Bearer%s+(.+)") if not token then ngx.status = ngx.HTTP_UNAUTHORIZED ngx.say('{"error":"Invalid token format"}') ngx.exit(ngx.HTTP_UNAUTHORIZED) end -- 验证 JWT local jwt_obj = jwt:verify(secret, token) if not jwt_obj.verified then ngx.status = ngx.HTTP_UNAUTHORIZED ngx.say('{"error":"' .. jwt_obj.reason .. '"}') ngx.exit(ngx.HTTP_UNAUTHORIZED) end -- 将用户信息传递给后端 ngx.req.set_header("X-User-ID", jwt_obj.payload.user_id) ngx.req.set_header("X-User-Role", jwt_obj.payload.role) } proxy_pass http://backend_api; } }配置验证与重载每次修改配置后,务必执行:nginx -t # 验证配置语法 nginx -s reload # 重载配置(不中断服务)以上配置涵盖了复杂场景下的高级应用,可根据实际需求组合使用。对于生产环境,建议先在测试环境验证配置,确保稳定性。
2025年07月16日
4 阅读
0 评论
0 点赞
2025-07-16
【Nginx】Nginx安装与运行
以下是在不同操作系统上安装和运行 Nginx 的详细步骤:一、Ubuntu/Debian 系统1. 安装 Nginx# 更新包索引 sudo apt update # 安装 Nginx sudo apt install nginx # 验证安装 nginx -v # 输出类似: nginx version: nginx/1.18.02. 控制 Nginx 服务# 启动服务 sudo systemctl start nginx # 设置开机自启 sudo systemctl enable nginx # 检查服务状态 sudo systemctl status nginx # 停止服务 sudo systemctl stop nginx # 重启服务(修改配置后常用) sudo systemctl restart nginx # 重新加载配置(不中断现有连接) sudo systemctl reload nginx3. 防火墙配置# 允许 HTTP 和 HTTPS 流量 sudo ufw allow 'Nginx HTTP' # 仅允许 80 端口 sudo ufw allow 'Nginx HTTPS' # 仅允许 443 端口 sudo ufw allow 'Nginx Full' # 同时允许 80 和 443 端口二、CentOS/RHEL 系统1. 安装 Nginx# 添加 Nginx 官方仓库 sudo tee /etc/yum.repos.d/nginx.repo <<EOF [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/ gpgcheck=0 enabled=1 EOF # 安装 Nginx sudo yum install nginx # 验证安装 nginx -v2. 控制 Nginx 服务# 启动服务 sudo systemctl start nginx # 设置开机自启 sudo systemctl enable nginx # 其他命令(与 Ubuntu 相同) sudo systemctl {stop|restart|reload|status} nginx3. 防火墙配置# 允许 HTTP 和 HTTPS 流量 sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload三、macOS(使用 Homebrew)1. 安装 Homebrew(如未安装)/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"2. 安装和管理 Nginx# 安装 Nginx brew install nginx # 启动服务 brew services start nginx # 后台运行并开机自启 # 或临时启动(不设开机自启) nginx # 停止服务 brew services stop nginx # 或直接杀进程 killall nginx # 配置文件位置 /usr/local/etc/nginx/nginx.conf # 访问测试 http://localhost:8080 # macOS 默认监听 8080 端口四、Windows 系统1. 下载与安装访问 Nginx 官网下载页面,下载 Windows 版本(.zip 文件)。解压到指定目录(如 C:\nginx)。2. 控制 Nginx# 进入 Nginx 目录 cd C:\nginx # 启动 Nginx start nginx.exe # 停止 Nginx nginx.exe -s stop # 快速停止 # 或 nginx.exe -s quit # 优雅停止 # 重新加载配置 nginx.exe -s reload # 验证配置文件语法 nginx.exe -t3. 访问测试打开浏览器访问 http://localhost,若看到 "Welcome to nginx!" 页面,则安装成功。五、验证安装是否成功浏览器访问: 打开浏览器,输入 http://服务器IP地址(或 http://localhost),若看到 Nginx 欢迎页面,则安装成功。检查进程:ps -ef | grep nginx # 应看到 master 和 worker 进程端口监听:netstat -tulpn | grep :80 # 检查 80 端口是否被监听六、配置文件位置Linux:/etc/nginx/nginx.conf(主配置),/etc/nginx/conf.d/(站点配置)macOS(Homebrew):/usr/local/etc/nginx/nginx.confWindows:C:\nginx\conf\nginx.conf七、常见问题端口冲突:若 80 端口被占用,修改 nginx.conf 中的 listen 指令(如改为 8080)。权限问题:Linux 下若无法监听 80/443 端口,可使用 sudo 或调整 SELinux/AppArmor 配置。配置语法错误:修改配置后,使用 nginx -t 检查语法,再 nginx -s reload 重新加载。八、下一步配置虚拟主机:创建多个网站配置文件(.conf)放在 /etc/nginx/conf.d/ 目录下。配置 HTTPS:使用 Let's Encrypt 免费证书实现 HTTPS。负载均衡:配置 upstream 模块将请求分发到多个后端服务器。
2025年07月16日
4 阅读
0 评论
0 点赞
2025-07-16
【Nginx】什么是反向代理?
反向代理(Reverse Proxy)是一种服务器端代理技术,用于接收客户端的请求并将其转发到后端的多个目标服务器,然后将目标服务器的响应返回给客户端。与正向代理(如VPN)不同,反向代理对客户端是透明的,客户端无需感知代理服务器的存在,直接与反向代理服务器通信。核心概念与原理工作流程客户端向反向代理服务器(如Nginx、Apache)发送请求(如访问https://example.com)。反向代理服务器根据配置规则(如URL路径、请求头)将请求转发给后端的目标服务器(如Tomcat、Node.js应用)。目标服务器处理请求并返回响应给反向代理服务器。反向代理服务器将响应返回给客户端,客户端认为直接与目标服务器通信。关键特点隐藏后端服务器:客户端只能看到反向代理服务器的IP地址,无法直接访问后端服务器,增强安全性。统一入口:反向代理作为所有请求的唯一入口,简化了客户端与后端的交互。负载均衡:可将请求分发到多个后端服务器,平衡负载,提高可用性。反向代理的主要作用安全防护屏蔽后端服务器的真实IP,防止外部直接攻击(如DDOS、端口扫描)。集中进行访问控制(如IP黑名单、请求过滤)和安全加固(如WAF功能)。负载均衡将请求按策略(如轮询、IP哈希、响应时间)分发到多个后端服务器,避免单点故障,提升系统吞吐量。结合健康检查机制,自动剔除故障节点,保证服务可用性。性能优化缓存静态内容:缓存HTML、CSS、JS、图片等静态资源,减少后端服务器压力。压缩与优化:对响应内容进行Gzip压缩、HTTP/2升级等,加速数据传输。SSL/TLS卸载:由反向代理统一处理HTTPS加密和解密,减轻后端服务器计算负担。流量控制与路由根据请求特征(如URL、用户区域)将流量导向不同的后端服务(如A/B测试、灰度发布)。实现跨域请求(CORS)处理、请求限流(如限制IP访问频率)等。协议转换与兼容性将HTTP请求转换为其他协议(如WebSocket、gRPC),适配不同后端服务。处理不同API版本的路由,支持向后兼容。典型应用场景大型网站与应用如Google、Facebook等通过反向代理分发全球流量,隐藏内部架构。微服务架构作为API网关,统一管理微服务的访问,实现认证、限流、日志等公共逻辑。容器化与云原生在Kubernetes集群中,通过Ingress Controller(基于Nginx、Traefik等)实现服务暴露和流量路由。企业内网应用将内部系统(如OA、CRM)通过反向代理暴露到公网,同时保证安全性。对比正向代理与反向代理特性正向代理反向代理代理对象代理客户端(用户)代理服务器(服务端)客户端感知需要手动配置(如浏览器代理)透明,客户端无感知主要用途突破限制、隐藏客户端IP负载均衡、安全防护、性能优化典型场景VPN、翻墙工具Nginx、Apache、CDN节点技术选型常见的反向代理软件包括:Nginx:高性能、轻量,适合高并发场景,支持HTTP/2、WebSocket等。Apache HTTP Server:功能全面,适合复杂配置和模块化扩展。HAProxy:专注于负载均衡,支持TCP和HTTP协议。Traefik:专为微服务和容器环境设计,自动发现后端服务。Envoy:云原生架构中的高性能代理,支持动态配置和可观测性。总结反向代理是现代分布式系统的核心组件,通过隐藏后端架构、负载均衡、安全防护和性能优化,显著提升了系统的可用性、可扩展性和安全性。无论是企业级应用还是互联网产品,反向代理都是构建高并发、高可靠服务的关键技术之一。
2025年07月16日
3 阅读
0 评论
0 点赞
2025-04-29
【Nginx】什么是Nginx
Nginx(发音为“engine x”)是一款高性能的开源Web服务器、反向代理服务器,同时也支持HTTP缓存、负载均衡、邮件代理等功能。它由俄罗斯工程师Igor Sysoev于2004年开发,旨在解决高并发场景下的性能问题,2011年成立Nginx公司(现属于F5 Networks),目前广泛应用于全球大型网站和复杂分布式系统中。核心功能与特点高性能与高并发处理采用事件驱动的异步非阻塞模型(Epoll/Kqueue),能高效处理海量并发连接(单台服务器可支持数万并发),内存占用低,适合高流量场景。对比传统服务器(如Apache),在静态资源处理和反向代理场景下性能优势显著。反向代理与负载均衡反向代理:接收客户端请求,转发至后端多个服务器(如Tomcat、Node.js、Django等),隐藏后端架构细节,提升安全性。负载均衡:支持轮询、加权轮询、IP哈希、最少连接数等策略,将流量均匀分配到后端服务器,避免单点压力。HTTP缓存与静态资源处理内置缓存机制(如Proxy Cache),可缓存静态文件(HTML、CSS、JS、图片等),减少后端服务器压力,加速客户端响应。直接高效处理静态资源,无需依赖额外模块。丰富的功能扩展支持HTTPS(SSL/TLS加密)、URL重写、Gzip压缩、跨域请求(CORS)、限流(如限制IP访问频率)等。可通过插件(如Lua脚本、Nginx Plus模块)实现自定义逻辑,满足复杂业务需求。轻量与灵活配置文件简洁(nginx.conf),支持热加载(无需重启服务即可更新配置)。资源消耗低,适合运行在容器(Docker)或资源受限的环境中。典型应用场景Web服务器:直接托管静态资源,或通过FastCGI协议处理动态请求(如PHP、Python应用)。反向代理服务器:作为前端入口,转发请求到后端多个应用服务器,实现高可用性和扩展性。负载均衡器:在分布式系统中分发流量,避免单节点过载,提升整体吞吐量。API网关:在微服务架构中作为统一入口,处理路由、认证、限流等逻辑。缓存服务器:通过缓存静态或动态内容,降低后端压力,优化用户访问速度。知名应用案例国内外大型网站:Google、Facebook、Twitter、京东、淘宝、新浪、网易、知乎等均使用Nginx作为核心服务器组件。云计算与CDN:AWS、阿里云、腾讯云等云服务商的CDN节点大量部署Nginx,用于边缘节点的内容分发。总结Nginx以高性能、低资源消耗、高可扩展性成为现代Web架构的核心组件,尤其适合高并发、分布式系统和微服务场景。无论是作为独立Web服务器,还是与其他技术(如Tomcat、Kubernetes)结合使用,都能有效提升系统的稳定性和性能。
2025年04月29日
21 阅读
0 评论
0 点赞
2022-08-29
【Nginx】Nginx泛解析配置-站群推广
通常情况下,我们新建一个二级域名都需要去域名提供商的控制面板新建记录,比如我现在有个baidu.com的域名,但是我有好几家分公司,分别是1.baidu.com,2.baidu.com,3.baidu.com。。。。这样就需要建很多二级域名,显然很麻烦,我们只需要在控制台建一个解析记录,使用*就行,如下图新建解析记录然后nginx的配置如下server { listen 80; # 这是你的域名 server_name *.home.baidu.top; location / { # 泛域名开始配置 if ( $host ~* (.*)\.(.*)\.(.*)\.(.*) ) { set $domain $1; #获取当前的 域名前缀 } # 这里的domain就是获取当前域名前缀,然后指向到该前缀名称的目录 root /home/customerpage/$domain; index index.html index.htm; } }看到如上配置我是指定到我/home/customerpage/目录下的如图下面新建两个子目录每个目录里都有一个html页面然后我就需要这样访问第一个 和文件名一样 hejie.home.baidu.tophttps://www.cnblogs.com/hjieone/p/12323405.html
2022年08月29日
405 阅读
0 评论
0 点赞
2022-06-17
【Nginx】Nginx Log日志统计分析常用命令
IP相关统计统计IP访问量(独立ip访问数量) awk '{print $1}' access.log | sort -n | uniq | wc -l 查看某一时间段的IP访问量(4-5点) grep "07/Apr/2017:0[4-5]" access.log | awk '{print $1}' | sort | uniq -c| sort -nr | wc -l 查看访问最频繁的前100个IP awk '{print $1}' access.log | sort -n |uniq -c | sort -rn | head -n 100 查看访问100次以上的IP awk '{print $1}' access.log | sort -n |uniq -c |awk '{if($1 >100) print $0}'|sort -rn 查询某个IP的详细访问情况,按访问频率排序 grep '127.0.01' access.log |awk '{print $7}'|sort |uniq -c |sort -rn |head -n 100 页面访问统计查看访问最频的页面(TOP100) awk '{print $7}' access.log | sort |uniq -c | sort -rn | head -n 100 查看访问最频的页面([排除php页面】(TOP100) grep -v ".php" access.log | awk '{print $7}' | sort |uniq -c | sort -rn | head -n 100 查看页面访问次数超过100次的页面 cat access.log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less 查看最近1000条记录,访问量最高的页面 tail -1000 access.log |awk '{print $7}'|sort|uniq -c|sort -nr|less每秒请求量统计统计每秒的请求数,top100的时间点(精确到秒) awk '{print $4}' access.log |cut -c 14-21|sort|uniq -c|sort -nr|head -n 100每分钟请求量统计统计每分钟的请求数,top100的时间点(精确到分钟) awk '{print $4}' access.log |cut -c 14-18|sort|uniq -c|sort -nr|head -n 100每小时请求量统计统计每小时的请求数,top100的时间点(精确到小时) awk '{print $4}' access.log |cut -c 14-15|sort|uniq -c|sort -nr|head -n 100性能分析在nginx log中最后一个字段加入$request_time 列出传输时间超过 3 秒的页面,显示前20条 cat access.log|awk '($NF > 3){print $7}'|sort -n|uniq -c|sort -nr|head -20 列出php页面请求时间超过3秒的页面,并统计其出现的次数,显示前100条 cat access.log|awk '($NF > 1 && $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100蜘蛛抓取统计统计蜘蛛抓取次数 grep 'Baiduspider' access.log |wc -l 统计蜘蛛抓取404的次数 grep 'Baiduspider' access.log |grep '404' | wc -lTCP连接统计查看当前TCP连接数 netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l 用tcpdump嗅探80端口的访问看看谁最高 tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr
2022年06月17日
229 阅读
0 评论
0 点赞