虚拟主机通过隔离资源,在单台物理服务器上运行多个独立网站,支持域名、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资源紧张
配置示例:
server {
listen 80;
root /var/www/web1;
location / { index index_web1.html; }
}
server {
listen 8080;
root /var/www/web2;
location / { index index_web2.html; }
}
特点:
场景:公网多站点部署,如企业官网、电商平台
配置示例:
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 |
反向代理 | 后端服务器 | 负载均衡、安全防护 | 隐藏真实服务器IP,转发请求 |
http {
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://192.168.1.10:8080; # 转发至Tomcat
proxy_set_header X-Real-IP $remote_addr; # 传递真实IP
proxy_set_header Host $host;
}
}
}
location / {
proxy_connect_timeout 30s; # 连接后端超时
proxy_read_timeout 60s; # 读取响应超时
proxy_buffer_size 16k; # 缓冲区大小
proxy_buffers 4 32k; # 缓冲块数量与大小
proxy_next_upstream error timeout; # 故障转移策略
}
配置:
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
场景:服务器性能一致,流量均匀分配
配置:
upstream backend {
server 192.168.1.10:8080 weight=3; # 处理能力是其他节点3倍
server 192.168.1.11:8080 weight=1;
}
场景:服务器配置差异化,按性能分配流量
配置:
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
}
}
}
server {
listen 80;
server_name old-domain.com;
rewrite ^(.*)$ http://new-domain.com$1 permanent; # 域名迁移
}
location /article {
rewrite ^/article/(\d+)$ /article.php?id=$1 break; # 动态URL转静态
proxy_pass http://php-backend;
}
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凭借轻量、高性能、模块化设计,成为现代Web架构的核心组件:
掌握Nginx的核心功能,不仅能解决日常运维难题,更能为高并发、高可用系统奠定坚实基础。