为了实现只允许通过域名 www.cdjhk.cn:9099
访问,禁止直接通过 IP 125.70.2.23:9099
访问的需求,请按照以下步骤操作:
解决方案
适用场景
- 服务类型为 HTTP/HTTPS,可通过反向代理(如 Nginx)基于
Host
头过滤请求。 - 若服务非 HTTP(如 TCP 自定义协议),需结合其他方法(如 SNI 过滤或应用层校验)。
步骤 1:在内网服务器上配置反向代理(以 Nginx 为例)
-
安装 Nginx
如果尚未安装,使用包管理器安装 Nginx:# Ubuntu/Debian sudo apt update && sudo apt install nginx # CentOS/RHEL sudo yum install epel-release && sudo yum install nginx
-
配置反向代理规则
编辑 Nginx 配置文件(如/etc/nginx/conf.d/cdjhk.conf
),添加以下内容:# 处理域名请求 server { listen 9099; server_name www.cdjhk.cn; location / { proxy_pass http://192.168.1.250:9099; # 指向实际服务的内网地址和端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } # 拒绝直接通过 IP 的访问 server { listen 9099 default_server; server_name _; return 403; # 返回 403 禁止访问 }
-
重启 Nginx
sudo systemctl restart nginx
步骤 2:调整路由器的 NAT 转发规则
将外网 125.70.2.23:9099
的流量转发到内网服务器的 Nginx 监听端口(9099),而非直接转发到实际服务端口:
- 登录路由器管理界面。
- 修改端口转发规则:
- 外部端口:
9099
- 内部 IP:
192.168.1.250
(内网服务器) - 内部端口:
9099
(Nginx 监听的端口)
- 外部端口:
步骤 3:验证配置
-
通过域名访问
浏览器访问http://www.cdjhk.cn:9099
,应正常显示服务内容。 -
通过 IP 直接访问
浏览器访问http://125.70.2.23:9099
,应返回 403 Forbidden 错误。
其他场景补充
1. 若服务为 HTTPS
启用 SNI 过滤,Nginx 配置示例:
server {
listen 9099 ssl;
server_name www.cdjhk.cn;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/privkey.pem;
# 其他 SSL 配置...
location / {
proxy_pass http://192.168.1.250:9099;
}
}
server {
listen 9099 ssl default_server;
server_name _;
ssl_reject_handshake on; # 拒绝非匹配域名的 SSL 握手
}
2. 若服务非 HTTP(如 TCP 协议)
-
方案一:应用层校验
在服务代码中检查请求是否包含域名标识(需协议支持)。 -
方案二:IP 黑名单(不推荐)
通过防火墙临时屏蔽 IP 访问,但无法区分域名和 IP 请求:# 使用 iptables 拒绝所有直接访问 9099 端口的请求(慎用!可能误杀合法流量) iptables -A INPUT -p tcp --dport 9099 -j DROP
注意事项
- 服务端口冲突:确保 Nginx 独占
9099
端口,若原服务已占用此端口,需先停止原服务或更改其监听端口。 - 协议兼容性:非 HTTP 服务需根据协议特性调整方案。
- 防火墙设置:确保服务器防火墙允许
9099
端口的入站流量。
通过以上配置,即可实现仅允许域名访问、禁止直接 IP 访问的需求。
- THE END -
最后修改:2025年3月7日