手把手教你玩转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是否生效。
调试与排错指南
遇到问题时,我常用的排查顺序:
sudo nginx -t
检查语法sudo tail -f /var/log/nginx/error.log
- 用
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自动跳转的话,会不会影响性能啊?
码住!正好遇到类似的需求,这篇教程写得很详细,连排错步骤都有