场景一:多站点配置(同一台服务器跑多个网站)

假设你要跑两个站点:

  • site1.com→ 网站目录 /var/www/site1


  • site2.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.comsite2.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:8080


  • 192.168.1.102:8080


  • 192.168.1.103:8080


1. 定义上游(upstream)

nginx.confhttp {}块中添加:

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转发。