一、虚拟主机技术:多站点高效管理
(一)核心概念与分类
虚拟主机通过隔离资源,在单台物理服务器上运行多个独立网站,支持域名、IP、端口三种隔离方式:
1. 基于IP的虚拟主机
场景:公网IP充足,需独立IP绑定(如金融、政务系统)
配置示例:
server {listen 192.168.1.10:80;root /var/www/web1;server_name web1.example.com;
}server {listen 192.168.1.11:80;root /var/www/web2;server_name web2.example.com;
}
特点:
- 安全隔离性强,适合对IP有硬性要求的场景
- 需额外申请IP,成本较高
2. 基于端口的虚拟主机
场景:内网测试环境,IP资源紧张
配置示例:
server {listen 80;root /var/www/web1;location / { index index_web1.html; }
}server {listen 8080;root /var/www/web2;location / { index index_web2.html; }
}
特点:
- 节省IP,适合内部系统访问
- 需用户手动输入端口,公网体验差
3. 基于域名的虚拟主机(生产首选)
场景:公网多站点部署,如企业官网、电商平台
配置示例:
server {listen 80;server_name shop.example.com;root /var/www/shop;location / { try_files $uri $uri/ /index.html; }
}server {listen 80;server_name blog.example.com;root /var/www/blog;location / { try_files $uri $uri/ /index.html; }
}
特点:
- 单IP支持无限域名,成本最低
- 符合用户访问习惯,适配CDN与SEO
二、代理服务:构建弹性架构
(一)正向代理 vs 反向代理
类型 | 代理对象 | 典型场景 | 核心作用 |
---|---|---|---|
正向代理 | 客户端 | 跨境访问、内网穿透 | 隐藏真实客户端IP |
反向代理 | 后端服务器 | 负载均衡、安全防护 | 隐藏真实服务器IP,转发请求 |
(二)反向代理实战配置
1. 基础反向代理
http {server {listen 80;server_name app.example.com;location / {proxy_pass http://192.168.1.10:8080; # 转发至Tomcatproxy_set_header X-Real-IP $remote_addr; # 传递真实IPproxy_set_header Host $host;}}
}
2. 优化参数配置
location / {proxy_connect_timeout 30s; # 连接后端超时proxy_read_timeout 60s; # 读取响应超时proxy_buffer_size 16k; # 缓冲区大小proxy_buffers 4 32k; # 缓冲块数量与大小proxy_next_upstream error timeout; # 故障转移策略
}
三、负载均衡:高并发场景解决方案
(一)核心算法与应用
1. 轮询(默认算法)
配置:
upstream backend {server 192.168.1.10:8080;server 192.168.1.11:8080;
}
场景:服务器性能一致,流量均匀分配
2. 权重轮询(weight)
配置:
upstream backend {server 192.168.1.10:8080 weight=3; # 处理能力是其他节点3倍server 192.168.1.11:8080 weight=1;
}
场景:服务器配置差异化,按性能分配流量
3. 最少连接(least_conn)
配置:
upstream backend {least_conn; # 自动转发至当前连接数最少的节点server 192.168.1.10:8080;server 192.168.1.11:8080;
}
场景:长连接业务(如WebSocket),动态均衡负载
(二)健康检查与故障转移
upstream backend {server 192.168.1.10:8080 max_fails=3 fail_timeout=30s; # 3次失败后标记为故障server 192.168.1.11:8080 backup; # 备用节点,主节点故障时启用
}
四、流量控制:防御与优化
(一)请求速率限制(漏桶算法)
http {limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s; # 每秒5请求server {location /api {limit_req zone=req_limit burst=10 nodelay; # 突发请求缓冲10个proxy_pass http://backend;}}
}
(二)并发连接限制
http {limit_conn_zone $binary_remote_addr zone=conn_limit:10m; # 基于IP统计连接数server {location /download {limit_conn conn_limit 2; # 单IP最多2个并发连接limit_rate 100k; # 下载速度限制100KB/s}}
}
五、URL重写:灵活的路由控制
(一)核心指令与场景
1. 永久重定向(301)
server {listen 80;server_name old-domain.com;rewrite ^(.*)$ http://new-domain.com$1 permanent; # 域名迁移
}
2. 伪静态处理(SEO优化)
location /article {rewrite ^/article/(\d+)$ /article.php?id=$1 break; # 动态URL转静态proxy_pass http://php-backend;
}
3. 访问控制(黑白名单)
if ($remote_addr ~* "^192.168.1.") {rewrite ^ /allowed.html break; # 允许内网IP访问
} else {return 403; # 禁止公网IP访问
}
六、性能调优:榨干硬件性能
(一)进程与连接优化
worker_processes auto; # 自动适配CPU核心数
worker_cpu_affinity auto; # CPU亲和性绑定,减少上下文切换events {worker_connections 16384; # 单进程最大连接数(建议1w-2w)use epoll; # Linux最佳事件模型
}
(二)传输与缓存优化
http {sendfile on; # 零拷贝传输,提升静态文件性能tcp_nopush on; # 合并网络包,减少TCP交互gzip on;gzip_comp_level 5; # 压缩级别(平衡CPU与带宽)gzip_types text/css application/javascript; # 仅压缩文本类资源location /static {root /var/www;expires 30d; # 静态资源浏览器缓存30天}
}
七、实战案例:高可用电商架构
(一)架构拓扑
客户端 → Nginx(负载均衡+SSL)├─ 静态资源(/static → 本地磁盘+CDN)├─ 动态请求(/api → 后端Tomcat集群)└─ 管理接口(/admin → 权限认证+IP白名单)
(二)关键配置
http {upstream tomcat_cluster {least_conn;server 192.168.1.10:8080 weight=2;server 192.168.1.11:8080 weight=2;server 192.168.1.12:8080 backup;}server {listen 443 ssl;server_name shop.example.com;ssl_certificate /etc/ssl/shop.crt;ssl_certificate_key /etc/ssl/shop.key;location /static {root /var/www/shop;gzip on;expires 7d;}location /api {proxy_pass http://tomcat_cluster;proxy_set_header X-Forwarded-Proto $scheme;limit_req zone=req_limit burst=20;}location /admin {auth_basic "Restricted";auth_basic_user_file /etc/nginx/htpasswd;allow 192.168.1.0/24;deny all;}}
}
总结:Nginx的全能型定位
Nginx凭借轻量、高性能、模块化设计,成为现代Web架构的核心组件:
- 虚拟主机:低成本实现多站点隔离
- 反向代理:构建弹性可扩展的后端架构
- 负载均衡:轻松应对万级并发流量
- 流量控制:有效防御DDoS、CC攻击
- 性能优化:通过系统级调优榨干硬件性能
掌握Nginx的核心功能,不仅能解决日常运维难题,更能为高并发、高可用系统奠定坚实基础。