网站图标显示

用Nginx 做「反向代理」

传统方法(不想装 Nginx)

若无需隐藏端口号,可省略 Nginx 步骤:

  1. 将三级域名解析到服务器 IP;
  2. 访问时直接拼接端口号:test.你的域名.com:端口号

该方式可正常访问,但必须手动带端口号,体验略差。


三级域名绑定服务器端口:实现方法详解

你的服务跑在固定端口上,但你不想每次输入网址时都带上端口号该如何解决呢?
可以用三级域名指向你的服务器,但域名本身不能直接“绑定端口”,只能绑定IP
想实现「访问三级域名 = 自动打到服务器某个端口」,完全能做到,靠的是域名解析 + 反向代理

以下用最直白、可直接落地的方式说明:


一、核心结论

  1. 三级域名(如 app.abc.com)只能解析到 IP,不能绑端口
    这是 DNS 天生的规则,所有域名都遵循该逻辑。

  2. 但你可以做到:访问三级域名 = 自动访问指定端口
    示例效果:

    • test.yourdomain.com → 自动访问 192.168.1.100:8080
    • api.yourdomain.com → 自动访问 192.168.1.100:3000

二、怎么实现?(最常用、最简单方案)

1)先做域名解析

前往你的域名管理控制台(阿里云/腾讯云/Cloudflare 等),按以下步骤操作:

  • 添加 A 记录
  • 主机记录填写三级域名前缀:test
  • 记录值填写服务器公网 IP

完成后,test.你的域名.com 会直接指向你的服务器 IP。

2)服务器上装 Nginx 做「反向代理」

Nginx 会拦截三级域名的访问请求,并自动转发到你指定的服务器端口。

极简配置示例:

server {
    listen 80;
    server_name test.你的域名.com;

    location / {
        proxy_pass http://127.0.0.1:8080; # 替换为你要绑定的实际端口
    }
}

配置完成后重启 Nginx,即可实现:
访问三级域名 = 直接访问对应端口(无需在网址后手动加端口号)。


三、一句话总结

  • 三级域名不能直接绑定端口(DNS 规则限制);
  • 可通过「域名解析 + Nginx 反向代理」实现等价效果
  • Web 服务(网站/接口)优先推荐 Nginx 方案,访问更简洁、体验更好。

Nginx绑定端口显示占用:问题定位与解决方法

端口占用是Nginx配置中最常见的问题

核心问题定位

Nginx提示“端口占用”,大概率是以下2种情况:

  1. Nginx要监听的端口(如80/443)被其他程序占用(最常见);
  2. 反向代理的目标端口(如8080)被其他程序占用(少数情况)。

第一步:找到“谁占用了端口”

根据服务器系统选择对应命令,10秒定位占用程序:

Linux系统(CentOS/Ubuntu等)

排查示例(以80端口为例,Nginx默认监听80):

# 方法1:查找80端口占用进程
netstat -tulpn | grep :80

# 方法2(推荐):更简洁的命令
ss -tulpn | grep :80

# 方法3(推荐):更简洁的命令
lsof -i:80

输出示例

  • tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx → 80端口被PID=1234的nginx旧进程占用
  • tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5678/httpd → 80端口被Apache占用

Windows系统

管理员身份打开CMD,排查80端口:

# 第一步:查找80端口占用的PID
netstat -ano | findstr :80

# 示例输出:TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       1234
# 第二步:根据PID查询对应程序
tasklist | findstr 1234

第二步:解决端口占用(3种方案,任选其一)

方案1:停掉占用端口的程序(推荐,优先)

Linux系统(示例:80端口被Apache占用)

# 停止Apache服务
systemctl stop httpd

# 禁止Apache开机自启(避免再次占用)
systemctl disable httpd

# 若为旧Nginx进程占用,直接杀死进程(替换为实际PID)
kill -9 1234

Windows系统(示例:80端口被IIS占用)

# 停止IIS服务
iisreset /stop

# 或直接结束占用进程(替换为实际PID)
taskkill /f /pid 1234

方案2:修改Nginx监听端口(不想停其他程序)

若80端口被占,可将Nginx监听端口改为8081(或其他未被占用的端口),修改Nginx配置文件:

server {
    listen 8081;  # 把默认的80改成8081(任选未占用端口)
    server_name test.你的域名.com;

    location / {
        proxy_pass http://127.0.0.1:你的服务端口; # 目标服务端口无需修改
    }
}

修改后访问路径:test.你的域名.com:8081

方案3:修改目标服务端口(若目标端口被占)

  1. 用第一步的命令找到占用目标端口(如8080)的PID,杀死该进程;
  2. 将你的服务端口改为其他未占用端口(如8082);
  3. 修改Nginx配置中的proxy_pass
    proxy_pass http://127.0.0.1:8082; # 对应新的服务端口
    

第三步:验证问题是否解决

  1. 重启Nginx:
    • Linux:nginx -t(验证配置) → nginx -s reload(重启)
    • Windows:在Nginx安装目录执行 nginx -s reload
  2. 访问三级域名(如test.你的域名.com),能正常打开目标服务即说明问题解决。

总结

  1. 核心原因:Nginx监听端口/目标服务端口被Apache/IIS/旧进程等程序占用;
  2. 最快解决:先用netstat/ss命令定位占用程序,要么停掉程序,要么修改Nginx监听端口;
  3. 验证关键:重启Nginx后,三级域名能正常访问目标服务即为解决。
posted @ 2026-03-12 10:47  纯真丁一郎です  阅读(121)  评论(0)    收藏  举报