帮你理解多个服务共用一台公网服务器的端口规划

2025.7.9 杂七杂八 843
33BLOG智能摘要
多个服务共用公网服务器时,合理规划端口可避免冲突并便于维护。基础服务如Web应使用80/443端口,SSH建议改为高位端口以增强安全,数据库等服务应限制内网访问。应用服务可分为主业务(8000-8999)和辅助服务(9000-9999)。管理服务建议置于10000-10999端口。实用技巧包括端口转发、设置防火墙规则以及记录端口分配表。常见问题如端口占用、测试访问及无法访问端口,可通过检查进程、监听地址和防火墙设置解决。
— 此摘要由33BLOG基于AI分析文章内容生成,仅供参考。

实战分享:如何在一台公网服务器上优雅地规划多个服务的端口

帮你理解多个服务共用一台公网服务器的端口规划

大家好,我是33blog的技术博主。今天想和大家聊聊一个看似简单但实际很容易踩坑的话题——多个服务共用一台公网服务器时的端口规划。这个需求在个人项目和小型企业中特别常见,我自己就经历过好几次”端口打架”的尴尬局面。

为什么需要端口规划?

记得我第一次部署个人网站时,天真地以为只要把Nginx的80端口打开就万事大吉了。直到后来需要同时运行MySQL、Redis和Node.js服务时,才发现端口冲突导致服务频繁崩溃。公网服务器不像本地开发环境,端口一旦被占用,影响的可是真实用户。

合理的端口规划能带来三个好处:

  • 避免服务间端口冲突
  • 便于后期维护和扩展
  • 提升安全性(比如把管理端口放在非标准端口)

我的端口分配方案

经过几次踩坑后,我总结出了一套自己的端口分配规则,分享给大家参考:

# 基础服务
80/443    : Web服务 (Nginx/Apache)
22        : SSH (建议修改为高位端口)
3306      : MySQL (建议内网访问)

# 应用服务
8000-8999 : 主业务服务 (比如Node.js, Python等)
9000-9999 : 辅助服务 (比如Redis, Memcached)

# 管理端口
10000-10999 : 监控/管理 (Prometheus, Grafana等)

这个方案把端口按功能划分成了几个区间,就像给不同的服务分配了不同的”楼层”。实际使用中我会在服务配置里明确注释:

# /etc/nginx/sites-available/my-site
server {
    listen 80;
    server_name example.com;
    # 主Web服务,必须使用80端口
    ...
}

几个实用技巧

在实践过程中,我总结了几个特别实用的技巧:

1. 使用端口转发

有时候不得不使用标准端口(比如HTTP的80),但内网服务可能运行在其他端口。这时可以用Nginx或HAProxy做转发:

location /api/ {
    proxy_pass http://localhost:8001; # 把/api/的请求转到8001端口
}

2. 善用防火墙规则

不是所有服务都需要暴露在公网。我习惯用UFW只开放必要的端口:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 2222/tcp  # 修改后的SSH端口
sudo ufw enable

3. 做好文档记录

在项目README或内部文档中维护一个端口分配表,新成员加入时能快速上手。我常用的格式:

| 服务    | 端口  | 用途           | 访问限制      |
|---------|-------|----------------|---------------|
| Nginx   | 80    | 主网站         | 公网          |
| MySQL   | 3306  | 数据库         | 仅内网        |
| Redis   | 6379  | 缓存           | 127.0.0.1     |

常见问题处理

最后分享几个我遇到过的典型问题:

Q: 端口被占用了怎么办?
A: 先用sudo lsof -i :端口号查占用进程,如果是非关键服务可以考虑换端口,或者调整服务启动顺序。

Q: 怎么快速测试端口是否开放?
A: 本地可以用telnet 服务器IP 端口,线上推荐用nc -zv 服务器IP 端口

Q: 为什么修改了端口还是无法访问?
A: 检查三个地方:1) 服务是否监听0.0.0.0;2) 防火墙是否放行;3) 云服务商的安全组设置。

端口规划看似是个小问题,但好的方案能让服务器维护事半功倍。如果你有更好的经验,欢迎在评论区分享交流!

评论

  • 这个端口分配方案很实用,尤其是把不同服务划分到不同区间,避免冲突。

  • 之前遇到过端口冲突的问题,搞得焦头烂额,早看到这篇文章就好了!

  • 请问nginx转发的时候,负载均衡应该怎么配置比较合理?

  • 收藏了!作为运维新手太需要这种实战经验了。

  • 建议把SSH端口改到高位后,最好再加个fail2ban,双重保险。

  • MySQL放内网很合理,但如果是小型企业没有内网环境的情况下怎么处理比较好?