从零开始Nginx配置多IP多站点的技巧

2025.7.9 杂七杂八 1772
33BLOG智能摘要
在云服务器时代,单服务器承载多个网站并绑定独立IP配置较为常见。针对某些SSL证书需求、业务隔离和SEO优化,文章作者分享了配置Nginx多IP多站点的实战经验。内容包括:确认服务器IP配置、Nginx中server块listen指令的使用、HTTPS配置、调试排错方法及性能优化建议。作者特别指出了踩坑教训,如云服务器需在控制台绑定弹性IP、IPv6需单独配置以及防火墙设置遗漏等问题。
— 此摘要由33BLOG基于AI分析文章内容生成,仅供参考。

手把手教你玩转Nginx多IP多站点配置:我的踩坑与实战心得

从零开始Nginx配置多IP多站点的技巧

大家好,我是33blog的站长。最近在给公司部署服务器时,遇到了一个典型场景:单服务器需要承载多个网站,每个网站要绑定独立IP。这种配置在云服务器时代特别常见,今天我就把完整的配置过程和踩坑经验分享给大家。

为什么需要多IP多站点?

三年前我第一次接触这种需求时也很困惑:为什么不用子目录或不同端口?直到接手一个金融项目才明白:

  • 某些SSL证书(如OV/EV)要求独立IP
  • 业务隔离需求(比如支付系统必须独立部署)
  • SEO优化考虑(同IP网站可能被关联)

我的阿里云ECS有3个弹性IP,需要分别绑定到三个不同的网站,下面看具体实现。

第一步:确认服务器IP配置

首先用ip addr查看网卡信息,我的是eth0主网卡。重点是要确认:

# 添加辅助IP(CentOS示例)
sudo nmcli connection modify eth0 +ipv4.addresses 192.168.1.100/24
sudo nmcli connection up eth0

⚠️ 踩坑提醒:云服务器还需要在控制台绑定弹性IP,我第一次忘了这步,配置死活不生效!

Nginx核心配置实战

关键点在于server块中的listen指令:

# 站点1配置 - 主IP
server {
    listen 80;
    listen [::]:80;
    server_name site1.com;
    root /var/www/site1;
    # 其他配置...
}

# 站点2配置 - 辅助IP
server {
    listen 192.168.1.100:80;  # 明确指定IP
    server_name site2.com;
    root /var/www/site2;
}

这里有个血泪教训:如果同时有IPv6需求,必须单独配置,否则会出现诡异的优先匹配问题。

HTTPS配置的特殊处理

当引入SSL证书后,配置会复杂些。我的最佳实践是:

server {
    listen 192.168.1.100:443 ssl;
    server_name site2.com;
    
    ssl_certificate /path/to/site2.crt;
    ssl_certificate_key /path/to/site2.key;
    
    # 强制HTTPS跳转
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }
}

💡 小技巧:用openssl s_client -connect 192.168.1.100:443可以测试指定IP的SSL是否生效。

调试与排错指南

遇到问题时,我常用的排查顺序:

  1. sudo nginx -t 检查语法
  2. sudo tail -f /var/log/nginx/error.log
  3. curl -I --resolve site2.com:80:192.168.1.100 http://site2.com指定IP测试

上周就遇到个典型问题:防火墙忘了放行新IP的80端口,折腾了半小时才发现…

性能优化建议

多IP站点会占用更多连接数,建议:

  • 调整worker_connections值(我一般设为4096)
  • 对静态资源启用sendfile
  • 不同站点错峰设置日志切割时间

最后提醒:用ss -tulnp | grep nginx可以确认Nginx实际监听的IP和端口。

希望这篇实战指南能帮到你。如果有其他Nginx配置问题,欢迎在评论区交流讨论!

评论

  • nginx多IP配置真心实用,尤其是那个测试SSL是否生效的小技巧,学到了👍

  • 请问下如果要在同一个IP上配置HTTPS和HTTP自动跳转的话,会不会影响性能啊?

  • 码住!正好遇到类似的需求,这篇教程写得很详细,连排错步骤都有