这是流程图:

以下是外部通过端口访问服务的标准流程,涵盖从本地开发到公网访问的全链路步骤(Deepseek生成,我不懂):
一、服务端准备阶段
1. 服务部署
-
启动服务:确保服务监听正确端口(如Flask默认5000)
if __name__ == "__main__": app.run(host='0.0.0.0', port=5000) # 必须绑定0.0.0.0
2. 本地验证
-
本地访问测试:
curl http://127.0.0.1:5000/books
二、网络层配置
1. 防火墙放行端口
-
服务器防火墙:
# Ubuntu sudo ufw allow 5000/tcp sudo ufw reload # CentOS firewall-cmd --zone=public --add-port=5000/tcp --permanent firewall-cmd --reload -
云服务器安全组(以阿里云为例):
-
登录ECS控制台 → 安全组配置
-
添加入站规则:
-
协议类型:TCP
-
端口范围:5000/5000
-
授权对象:0.0.0.0/0
-
-
2. 端口连通性测试
-
外部机器测试:
telnet 服务器IP 5000 # 成功显示 Connected to 服务器IP
三、访问路径配置
1. 直接访问(开发环境)
-
访问地址:
http://服务器IP:5000/books/books是个人写的API地址,这个根据个人项目不同而不同
-
限制:
-
需显式携带端口号
-
不支持HTTPS
-
不符合生产环境规范
-
2. 反向代理(生产推荐)
-
Nginx配置示例:
nginx
server { listen 80; server_name api.yourdomain.com; location / { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } -
访问地址:
http://api.yourdomain.com/books
3. HTTPS增强
-
SSL证书申请:
certbot --nginx -d api.yourdomain.com -
访问升级:
https://api.yourdomain.com/books
四、域名解析(可选)
-
DNS记录配置:
-
记录类型:A记录
-
主机记录:api
-
记录值:服务器IP
-
TTL:600秒
-
-
生效验证:
dig +short api.yourdomain.com # 应返回服务器IP
五、全链路验证
| 测试类型 | 测试命令 | 预期结果 |
|---|---|---|
| 本地回路测试 | curl http://127.0.0.1:5000 | 返回业务数据 |
| 内网访问测试 | curl http://[内网IP]:5000 | 返回业务数据 |
| 公网端口探测 | telnet 公网IP 5000 | 显示Connection opened |
| 域名解析检查 | nslookup api.yourdomain.com | 解析到正确IP |
| HTTPS证书验证 | openssl s_client -connect api.yourdomain.com:443 | 显示证书链信息 |
六、常见故障排查
-
Connection refused:
-
检查服务是否绑定0.0.0.0
-
确认服务进程存活
ps aux | grep flask
-
-
Timeout:
-
检查安全组/防火墙规则
-
确认运营商未封禁端口(常见于80/443外的端口)
-
-
SSL_ERROR:
-
确保证书链完整
-
检查证书与域名匹配性
-
七、生产环境建议
-
端口规范:
-
对外服务统一使用80/443端口
-
通过Nginx转发到实际服务端口
-
-
监控配置:
-
对服务端口设置存活检测
-
配置流量告警阈值
-
-
安全加固:
-
禁用非必要端口
-
启用WAF防护
-
通过以上流程,可确保外部用户通过 https://api.yourdomain.com 安全访问服务,无需感知实际服务端口。

1547

被折叠的 条评论
为什么被折叠?



