Nginx 反向代理入门:把域名指向你的服务

举报
vanseny 发表于 2026/11/04 06:06:24 2026/11/04
【摘要】 你有没有过这样的经历:本地跑起了一个服务,地址是 127.0.0.1:3000 ,浏览器打开没问题,可一旦想让别人通过域名访问,就卡住了。端口要记、地址难看、换了服务又要重新告诉别人。这时,反向代理就是最顺手的解法。 什么是反向代理反向代理站在用户和你的服务之间。用户只访问一个域名,比如 example.com ,由 Nginx 接收请求,再按规则转发给内网或本机的真实服务,最后把响应原样带...

你有没有过这样的经历:本地跑起了一个服务,地址是 127.0.0.1:3000 ,浏览器打开没问题,可一旦想让别人通过域名访问,就卡住了。端口要记、地址难看、换了服务又要重新告诉别人。这时,反向代理就是最顺手的解法。

什么是反向代理

反向代理站在用户和你的服务之间。用户只访问一个域名,比如 example.com ,由 Nginx 接收请求,再按规则转发给内网或本机的真实服务,最后把响应原样带回给用户。用户看不到后端地址,也不需要记住端口。

它和正向代理正好相反:正向代理是替用户去访问外网,反向代理是替服务去接待用户。日常说的“用 Nginx 做入口”,基本就是反向代理。

一个最小可用的配置

假设你的服务跑在 3000 端口,域名已经解析到服务器。写一个 server 块就够了:

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;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

改完配置先不要直接重启,先用 nginx -t 检查语法,通过后再 reload 。这样即使写错,也不会把正在跑的服务直接打断。

为什么要传那几个请求头

不传 Host ,后端可能认不出域名;不传 X-Real-IP ,后端日志里看到的就全是 127.0.0.1 ,排障时会很被动; X-Forwarded-Proto 则告诉后端用户原来用的是 http 还是 https ,避免后端生成错误的跳转链接。这几行看起来啰嗦,实际上是反向代理的“基本礼仪”。

按路径分流也很常用

一个域名后面常常挂着多个服务,比如 /api 走接口服务, / 走页面服务。可以这样写:

location /api/ {
    proxy_pass http://127.0.0.1:8000/;
}

location / {
    proxy_pass http://127.0.0.1:3000;
}

这里有个容易踩的坑: proxy_pass 后面带不带斜杠,含义不一样。带斜杠时, location 匹配到的 /api/ 部分会被替换掉;不带斜杠时,原始路径会完整拼过去。路径转发一乱,多半是这个斜杠在作怪,改之前先想清楚自己要的是哪一种。

常见问题排查清单

第一,访问域名返回 502 。先看后端服务是不是真的在跑,再看端口对不对,最后看 Nginx 能不能连到那个地址。在本机上能直接访问 3000 端口的服务,说明后端没问题,问题多半在转发配置上。

第二,页面能打开,但样式、图片全是 404 。先看浏览器请求的路径,再对照 location 规则。很多时候是路径拼接错了,或者静态资源走了错误的后端。

第三,接口请求报跨域或重定向循环。先确认后端拿到的 Host 和协议是不是你期望的,再看有没有多层代理把请求头改乱了。

第四,改了配置却没生效。先确认改的是 Nginx 真正在读的配置文件,再确认执行的是 reload 而不是只保存了文件。 nginx -t 能帮你确认配置文件路径和语法。

一点使用建议

刚入门不用一次配齐缓存、限流、负载均衡。先把“域名进、服务出”这一条链路跑通,再按需加功能。入口越简单,出问题时越容易定位。等你熟悉了转发规则和请求头,再去加 HTTPS 、多服务分流和健康检查,顺序对了,学习成本会低很多。

反向代理的本质并不复杂:它就是一个懂规则的“前台”,把用户的请求准确送到对应的服务手里。把域名、端口、路径这三件事理清楚,你的服务就真正拥有了一个可以对外示人的地址。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。