场景一:多站点配置(同一台服务器跑多个网站)
假设你要跑两个站点:
site1.com→ 网站目录/var/www/site1site2.com→ 网站目录/var/www/site2
1. 创建站点目录和测试页面
bashbash复制sudo mkdir -p /var/www/site1 /var/www/site2echo "<h1>Site 1</h1>" | sudo tee /var/www/site1/index.htmlecho "<h1>Site 2</h1>" | sudo tee /var/www/site2/index.html
2. 为每个站点创建配置文件
文件:/etc/nginx/conf.d/site1.conf
nginxnginx复制server {
listen 80;
server_name site1.com www.site1.com;
root /var/www/site1;
index index.html index.htm;
access_log /var/log/nginx/site1_access.log;
error_log /var/log/nginx/site1_error.log;
location / {
try_files $uri $uri/ =404;
}
}
文件:/etc/nginx/conf.d/site2.conf
nginxnginx复制server {
listen 80;
server_name site2.com www.site2.com;
root /var/www/site2;
index index.html index.htm;
access_log /var/log/nginx/site2_access.log;
error_log /var/log/nginx/site2_error.log;
location / {
try_files $uri $uri/ =404;
}
}
3. 检查并生效
bashbash复制sudo nginx -tsudo systemctl reload nginx
注意:确保
site1.com、site2.com的 DNS 解析指向你的服务器 IP,或本地 hosts 文件中临时映射测试。
场景二:SSL 证书配置(HTTPS + 自动跳转)
假设你已有证书文件(通过 Let’s Encrypt 或购买):
证书:
/etc/ssl/certs/site1.com.crt私钥:
/etc/ssl/private/site1.com.key
1. 配置 HTTPS 站点
文件:/etc/nginx/conf.d/site1-ssl.conf
nginxnginx复制server {
listen 80;
server_name site1.com www.site1.com; # 强制跳转到 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name site1.com www.site1.com;
root /var/www/site1;
index index.html index.htm; # SSL 证书配置
ssl_certificate /etc/ssl/certs/site1.com.crt;
ssl_certificate_key /etc/ssl/private/site1.com.key; # 推荐的 SSL 设置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/site1_ssl_access.log;
error_log /var/log/nginx/site1_ssl_error.log;
location / {
try_files $uri $uri/ =404;
}
}
2. 检查并生效
bashbash复制sudo nginx -tsudo systemctl reload nginx
若使用 Let’s Encrypt,可配合
certbot自动生成并续期证书,它也会自动修改 Nginx 配置。
场景三:负载均衡(多台后端服务器)
假设有三台后端应用服务器:
192.168.1.101:8080192.168.1.102:8080192.168.1.103:8080
1. 定义上游(upstream)
在 nginx.conf的 http {}块中添加:
nginxnginx复制upstream backend_app { # 可选:负载均衡策略
# least_conn; # 最少连接
# ip_hash; # 会话保持
server 192.168.1.101:8080 weight=3; # 权重 3
server 192.168.1.102:8080 weight=2;
server 192.168.1.103:8080 backup; # 备份节点,主节点全挂才启用}
2. 配置负载均衡虚拟主机
文件:/etc/nginx/conf.d/lb.conf
nginxnginx复制server {
listen 80;
server_name app.example.com;
access_log /var/log/nginx/lb_access.log;
error_log /var/log/nginx/lb_error.log;
location / {
proxy_pass http://backend_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;
proxy_connect_timeout 5s;
proxy_read_timeout 60s;
}
}
3. 检查并生效
bashbash复制sudo nginx -tsudo systemctl reload nginx
小结
多站点:每个域名一个
server{},用server_name区分;SSL:监听 443 端口,配置证书,80 端口返回 301 跳转;
负载均衡:用
upstream定义后端集群,再用proxy_pass转发。
陕公网安备 61012502000223号
评论一下吧