在互联网中,当你访问一个网站时,通常使用类似这样的 URL:
http://example.com或
https://example.com默认情况下:
这些是 默认端口,所以你在浏览器地址栏中 不需要显式输入端口号,浏览器会自动使用它们。
但是,如果你的服务运行在 非标准端口 上,比如:
http://example.com:8080http://example.com:3000那么 端口号就会显示在 URL 中,这既不美观,也可能影响用户体验。
http://example.com,浏览器自动使用 端口 80https://example.com,浏览器自动使用 端口 4438080、3000、9000 等端口,那么你必须显式地在 URL 中加上端口号,如:
http://example.com:8080👉 目标:隐藏端口号,让用户只访问 example.com,但实际服务运行在其他端口上
这样用户访问:
http://example.com → 实际是 80 端口
https://example.com → 实际是 443 端口👉 无需输入端口号,浏览器自动使用默认端口,看起来端口“被隐藏”了
🔧 如何实现?
这是 最常见、最实用的“隐藏端口”方案。
http://localhost:3000 或 http://127.0.0.1:8080http://example.com 或 https://example.com(不带端口)使用 Nginx 或 Apache 作为 前端代理服务器,监听 80/443 端口,然后把请求 转发(反向代理) 到你实际运行的服务端口(如 3000、8080 等)
/etc/nginx/conf.d/your-site.conf 或 /etc/nginx/sites-available/default)
server { listen 80; server_name example.com; location / { proxy_pass http://127.0.0.1:3000; # 你的应用实际运行端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
如果你使用 HTTPS(推荐),配置监听 443 并配置 SSL 证书(可用 Let's Encrypt 免费证书)✅ 结果:
http://example.com(端口 80)http://127.0.0.1:3000🔒 额外建议:为 HTTPS 配置 SSL(使用 Let's Encrypt 的 Certbot 工具),这样用户可以通过 https://example.com 安全访问,同时隐藏真正的服务端口。
如果你不想用反向代理,也可以通过 防火墙规则 或 路由器端口映射 将 80/443 端口的流量转发到你的应用端口
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000⚠️ 但这种方式仍然要求你的应用能监听 80 端口(通常需要 root 权限),所以 更推荐使用反向代理(Nginx)