香港站群服务器的核心价值在于多IP资源,一套完整的配置流程大致分三步:先把服务商分配的一堆IP地址绑到网卡上,再给每个IP配上对应的网站配置文件,最后做一些收尾和验证工作。以下按这个思路展开。
一、准备工作
动手之前先把家底摸清楚。
用ip addr看一眼当前网卡信息,确认主网卡叫什么名字——可能是eth0、ens192或者enp0s3,每家服务商习惯不一样。记下这个名称,后面所有配置都围绕着它来。
ip addr show
你还会看到主IP已经配置好了,比如192.168.1.10/24这种。服务商给的额外IP列表也拿到手,比如:
- 192.168.1.11/24
- 192.168.1.12/24
- 192.168.2.13/24
注意看子网掩码,如果服务商给了多个不同C段的IP,子网掩码可能也不一样,配置的时候要分别填写正确。
另外确认一下系统用的什么网络管理工具——CentOS 7以前默认是network服务,CentOS 8/Rocky Linux/Ubuntu新版多用NetworkManager。这两种工具的配置路径不太一样,提前确认能省不少事。
二、子接口配置
站群服务器的一个核心要求就是每个站点绑定独立IP,从而避免被搜索引擎识别为关联站群而遭到降权。子接口就是在同一块物理网卡上创建多个逻辑接口,每个接口绑一个独立IP。
不同Linux发行版的配置方法有差异,分开说。
CentOS 7 / Rocky Linux 8
这种系统用的是/etc/sysconfig/network-scripts/目录下的配置文件。
先在网卡上绑一个临时IP验证一下,确认IP可用:
ip addr add 192.168.1.11/24 dev eth0 label eth0:0
如果ping这个IP能通,说明IP没问题,可以持久化配置了。
创建子接口配置文件。假设主网卡是eth0,要为第一个额外IP创建子接口,新建文件/etc/sysconfig/network-scripts/ifcfg-eth0:1:
DEVICE=eth0:1
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.1.11
NETMASK=255.255.255.0
NM_CONTROLLED=no
几个关键点说明一下:
DEVICE必须和文件名保持一致,eth0:1对应的文件名就是ifcfg-eth0:1,不要搞混了。
ONBOOT=yes保证重启后配置还能生效。
NM_CONTROLLED=no是告诉系统这个子接口不走NetworkManager,避免被覆盖掉。如果你用的是network服务而不是NetworkManager,这一项不加也行。
子接口里不要配网关,网关只留在主接口上,否则路由表容易乱。
配完重启网络服务让配置生效:
systemctl restart network
再用ip addr show eth0检查一下,应该能看到新增的IP地址了。
依次类推,加eth0:2、eth0:3……每个IP重复一遍上述操作。
Ubuntu 18.04+(使用netplan)
新版Ubuntu用的是netplan,配置文件在/etc/netplan/目录下,通常是01-netcfg.yaml或者50-cloud-init.yaml这种名字。
用编辑器打开配置文件:
sudo nano /etc/netplan/01-netcfg.yaml
在addresses字段下面把额外IP加上去,格式是IP地址/子网掩码位数:
network:
version: 2
ethernets:
eth0:
addresses:
- 192.168.1.10/24
- 192.168.1.11/24
- 192.168.1.12/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
注意addresses是个列表,每个IP单独一行,末尾要有-。网关只在主IP上配一次就行。
保存后执行:
sudo netplan apply
立即生效。
关于不同C段IP的配置
如果服务商给的是多个不同C段的IP,比如一个在192.168.1.x段,另一个在192.168.2.x段,配置方式完全一样——直接照上面步骤填对应的IP和子网掩码就行。
这时候需要注意:子接口的IP和主接口不在同一网段时,有些系统可能需要额外配置路由才能让流量从正确的出口出去。一个简单的检查方法是配置完成后从外网ping一下每个IP,如果都能通就说明路由没问题。
三、Nginx虚拟主机配置
IP绑好了,接下来要让Nginx知道——每个IP对应哪个域名、网站文件放在哪里。
先确认Nginx已经装好:
nginx -v
没装的话:
# Ubuntu/Debian
sudo apt install nginx -y
# CentOS/Rocky
sudo yum install nginx -y
每个站点在/etc/nginx/sites-available/(Ubuntu)或/etc/nginx/conf.d/(CentOS)里单独建一个配置文件。
创建站点1的配置文件:
sudo nano /etc/nginx/sites-available/site1.conf
内容如下:
server {
listen 192.168.1.11:80;
server_name site1.com www.site1.com;
root /var/www/site1;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
}
关键点:
listen指令后面写的是具体IP加端口,而不是泛听*:80。这样每个站点的流量只会从对应的IP进来,才能实现IP隔离的效果。
server_name填实际的域名。
root指向网站的根目录,每个站点分开。
站点2的配置文件:
server {
listen 192.168.1.12:80;
server_name site2.com www.site2.com;
root /var/www/site2;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
}
创建完配置文件后,启用站点(Ubuntu需要做软链接):
sudo ln -s /etc/nginx/sites-available/site1.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site2.conf /etc/nginx/sites-enabled/
CentOS用户直接放在conf.d目录下不需要手动链接。
验证配置语法:
sudo nginx -t
看到syntax is okay和test is successful就没问题。
重载Nginx:
sudo systemctl reload nginx
加一个小防御动作:禁止IP直接访问
不配置这一步的话,别人直接浏览器输入你的IP地址,也能看到某个站点的内容,还可能被人恶意解析域名到你的IP上。
加一个默认的server块,把通过IP访问的流量全部拦掉:
server {
listen 80 default_server;
server_name _;
return 444;
}
这个return 444是Nginx特有的返回码,直接关闭连接,不返回任何内容。放在主配置文件的http块里,或者单独一个配置文件都行。
四、验证与排错
配置完成后检查几项:
1. IP是否成功绑定?
ip addr show | grep inet
所有额外IP都应该出现在列表里。
2. Nginx是否监听了正确的IP和端口?
ss -tlnp | grep nginx
应该能看到每个IP对应的80端口都在监听。
3. 外部访问是否正常?
从浏览器或者用curl访问http://你的IP和http://你的域名,分别返回预期内容。
常见的坑:
子接口配置文件命名错误:DEVICE=eth0:1但文件名是ifcfg-eth0:2,这种情况网络服务会启动失败。
IP冲突:如果多个机器或服务使用了相同的IP,arping可以检测出来。
Nginx配置文件语法错误:nginx -t会告诉你哪里有问题,多半是少了分号或者括号没闭合。
端口被占用:同一个端口不能同时被两个server块监听相同IP,检查是否有冲突。
五、进阶优化思路
如果管理的站点非常多,可以考虑做独立PHP-FPM池隔离,每个站点用不同的系统用户运行PHP进程,避免一个站点出问题拖垮整台服务器。也可以为每个站点单独申请SSL证书,配合listen的SSL端口实现HTTPS访问。
底层的网络隔离如果要求更高,VLAN和网络命名空间也是可选的方案,不过对于大多数站群运营需求来说,子接口加Nginx虚拟主机的配置已经完全够用了。
相关内容
