如何配置VPS服务器仅允许通过域名访问而拒绝直接IP访问?
| 配置方法 |
适用场景 |
安全级别 |
复杂度 |
| Web服务器配置 |
Nginx/Apache |
高 |
中等 |
| 防火墙配置 |
iptables/firewalld |
中 |
简单 |
| 应用层配置 |
特定应用程序 |
高 |
复杂 |
VPS如何设置只允许域名访问?详细配置步骤与常见问题解决方案
主要配置方法概览
| 序号 |
配置方法 |
核心原理 |
适用环境 |
| 1 |
Web服务器配置 |
通过虚拟主机配置拒绝IP直接访问 |
Nginx/Apache |
| 2 |
防火墙规则 |
设置防火墙仅允许80/443端口域名访问 |
iptables/firewalld |
| 3 |
应用层控制 |
在应用程序中验证Host头 |
自定义应用 |
详细配置步骤
方法一:Nginx服务器配置
操作说明
通过配置Nginx虚拟主机,实现对IP直接访问的拒绝和域名访问的允许。
使用工具提示
- SSH客户端(如PuTTY、Terminal)
- 文本编辑器(vim/nano)
- Nginx配置文件
# 登录VPS服务器
ssh root@yourserverip
编辑Nginx配置文件
vim /etc/nginx/sites-available/yourdomain
重启Nginx服务
systemctl restart nginx
具体配置流程
- 创建主域名配置文件
server {
listen 80;
servername yourdomain.com www.yourdomain.com;
# 允许域名访问的配置
root /var/www/html;
index index.html index.htm;
location / {
tryfiles $uri $uri/ =404;
}
}
- 配置默认服务器块拒绝IP访问
server {
listen 80 defaultserver;
servername ;
# 拒绝所有IP直接访问
return 444;
}
server {
listen 443 ssl defaultserver;
servername ;
# 拒绝HTTPS的IP直接访问
return 444;
}
- 启用站点配置
# 创建符号链接
ln -s /etc/nginx/sites-available/yourdomain /etc/nginx/sites-enabled/
测试配置语法
nginx -t
重启Nginx
systemctl restart nginx
方法二:Apache服务器配置
操作说明
通过Apache虚拟主机配置实现仅允许域名访问。
使用工具提示
# 编辑Apache配置文件
vim /etc/apache2/sites-available/yourdomain.conf
具体配置流程
- 创建虚拟主机配置
ServerName yourdomain.com
ServerAlias www.yourdomain.com
DocumentRoot /var/www/html
# 其他配置...
- 配置默认虚拟主机拒绝IP访问
ServerName default
DocumentRoot /var/www/default
# 拒绝所有非域名访问
RewriteEngine On
RewriteCond %{HTTPHOST} !^yourdomain\.com$ [NC]
RewriteCond %{HTTPHOST} !^www\.yourdomain\.com$ [NC]
RewriteRule .* - [F]
- 启用配置并重启服务
# 启用站点
a2ensite yourdomain.conf
禁用默认站点
a2dissite 000-default.conf
重启Apache
systemctl restart apache2
方法三:防火墙配置
操作说明
通过iptables或firewalld设置防火墙规则,限制只有通过域名的访问才能到达服务端口。
使用工具提示
- iptables/firewalld命令
- 系统权限(root)
# 查看当前防火墙规则
iptables -L
或使用firewalld
firewall-cmd --list-all
具体配置流程
- 使用iptables配置
# 清除现有规则
iptables -F
设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
允许SSH连接(根据实际情况调整端口)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
允许HTTP和HTTPS流量
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
保存iptables规则
iptables-save > /etc/iptables/rules.v4
- 使用firewalld配置
# 添加HTTP和HTTPS服务
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
重新加载配置
firewall-cmd --reload
常见问题与解决方案
| 问题 |
原因 |
解决方案 |
| 配置后无法通过域名访问 |
DNS解析未生效或配置错误 |
检查DNS解析,确认配置文件语法正确 |
| IP地址仍然可以访问 |
默认服务器块配置不正确 |
确保defaultserver配置正确并重启服务 |
| HTTPS证书错误 |
SSL证书绑定域名而非IP |
确保证书正确配置且包含所需域名 |
| 服务器返回444错误 |
正常现象,表示IP访问已被拒绝 |
确认域名访问正常即可 |
| 配置生效但部分功能异常 |
应用程序中硬编码IP地址 |
检查应用程序配置,使用相对路径或域名 |
通过以上配置方法,您可以有效地设置VPS服务器仅允许通过域名访问,增强服务器的安全性和专业性。每种方法都有其适用场景,建议根据实际需求选择合适的配置方案。
发表评论