如何配置Nginx转发请求到内网穿透服务?

Nginx反向代理转发到内网穿透的本地服务失败。
我的nginx部署在阿里云服务器上,然后想将请求转发到内网穿透的本地服务上,总是404,网上找了很多文章,也不知道是哪里出现了问题,求解!

  1. 这是域名对应的本地服务IP端口。 http://orzzzsy.nat300.top -> 127.0.0.1:9999
  2. 阿里服务器能够访问我内网穿透的域名,获取到数据
    图片
    我预期是能够通过访问nginx服务器,也就是http://8.130.###.##/api/system/dictionary/all 这个地址,将请求转发到我内网穿透的本地服务 http://orzzzsy.nat300.top/system/dictionary/all。但是无法解决404报错问题

3.nginx访问报错如下
图片

  1. nginx配置文件如下
http {
     #后台网关
     upstream gateway {
          server orzzzsy.nat300.top;
      }
     server {
        listen       80;
        server_name  8.130.###.##  

       #前端门户网站 
        location / {
            root /usr/local/nginx/static-portal;
            index  index.html index.htm;
        }

        #api
        location ^~ /api {
            proxy_pass http://gateway/;
        }
阅读 1k
avatarAI BotBETA

基于你的描述和配置文件,你可能在内网穿透服务器和 Nginx 反向代理之间的路径映射上遇到问题。在 Nginx 的 proxy_pass 指令中,你需要确保路径被正确地映射。

在你的配置中,你试图将所有以 /api 开头的请求转发到 http://gateway/,然后这个请求将被发送到你的内网穿透服务 orzzzsy.nat300.top。但是,这样可能会丢失 /api 后面的路径部分。

你需要做的是保留原始请求的路径,这样它们可以正确地被转发到你的内网穿透服务。你可以通过在你的 proxy_pass 指令中使用 $request_uri 变量来实现这一点,这个变量包含了完整的请求 URI。

所以,你的配置应该修改为:

http {
    # 后台网关
    upstream gateway {
        server orzzzsy.nat300.top;
    }

    server {
        listen       80;
        server_name  8.130.###.##  

        # 前端门户网站 
        location / {
            root /usr/local/nginx/static-portal;
            index  index.html index.htm;
        }

        # api
        location ^~ /api {
            proxy_pass http://gateway$request_uri;
        }
    }
}

这样,所有以 /api 开头的请求都将被转发到 http://orzzzsy.nat300.top,并且保留原始路径。

此外,请确保你的内网穿透服务 orzzzsy.nat300.top 能够正确处理这些请求,并且确实在监听 9999 端口。你也可能需要在内网穿透服务中配置相应的路径映射。

如果你还是遇到问题,请再次检查 Nginx 的错误日志,看看是否有任何其他的错误或警告信息。你也可以尝试直接在浏览器中访问 http://orzzzsy.nat300.top/system/dictionary/all,看看是否能正常获取数据。

如果以上方法仍然无法解决问题,那么可能需要进一步查看你的网络设置和防火墙规则,以确保没有任何东西阻止请求从 Nginx 服务器转发到你的内网穿透服务。

1 个回答

问题解决了,nginx将请求转发到了120.26.87.232:80(域名对应的IP地址),但是内网穿透没办法通过此IP访问(报错:Tunnel 120.26.87.232 not found),只能通过域名访问,所以要在Nginx设置Host头

location ^~ /api {
    proxy_pass http://gateway/;
    proxy_set_header Host orzzzsy.nat300.top;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题