OwO-Network / nexttrace-experiment

An open source visual route tracking CLI tool (experiment field)
GNU General Public License v3.0
492 stars 34 forks source link

和Nginx搭配使用,WEB API查询无结果 #6

Closed mclovin-2k closed 2 years ago

mclovin-2k commented 2 years ago

你正在使用哪个版本的 nexttrace?

v0.1.10-beta.2 nexttrace_linux_amd64

你看到的异常现象是什么?

Nginx反代 NextTrace 的 Web 端口。浏览器打开WEB端,按下查询按钮后,没有结果。

image 按下查询按钮后,一直卡在这里,没有结果。

image 日志也没有输出

Nginx 的部分配置

   location /trace/ {
        proxy_pass         http://127.0.0.1:8080/;

        proxy_set_header   X-Forwarded-Host   $http_host;
        proxy_set_header   X-Forwarded-For    $remote_addr;
        proxy_set_header   X-Real-IP          $remote_addr;
    }

你期待看到的正常表现是怎样的?

正常显示结果

sjlleo commented 2 years ago

您好,

目前 WEB API 还不完善,因为 LeoMoeAPIWebSocket 还没有做长期持久化连接的定时心跳包检测(主要是后端还在开发中)。所以一旦断开不会重连,导致NT获取不到 IP 地理位置信息从而卡住不出结果,后续会修正这个问题。

暂时的解决方案是,您可以使用 nexttrace -c 打开程序的偏好设置面板,然后将默认的地理位置 API 修改为 IPSBIPWHOIS等第三方提供商,应该就可以解决。

感谢您的反馈。

Regards, Leo Shen

mclovin-2k commented 2 years ago

OK

您好,

目前 WEB API 还不完善,因为 LeoMoeAPIWebSocket 还没有做长期持久化连接的定时心跳包检测(主要是后端还在开发中)。所以一旦断开不会重连,导致NT获取不到 IP 地理位置信息从而卡住不出结果,后续会修正这个问题。

暂时的解决方案是,您可以使用 nexttrace -c 打开程序的偏好设置面板,然后将默认的地理位置 API 修改为 IPSBIPWHOIS等第三方提供商,应该就可以解决。

感谢您的反馈。

Regards, Leo Shen

OK. Closing.

tsosunchia commented 2 years ago

OK

您好, 目前 WEB API 还不完善,因为 LeoMoeAPIWebSocket 还没有做长期持久化连接的定时心跳包检测(主要是后端还在开发中)。所以一旦断开不会重连,导致NT获取不到 IP 地理位置信息从而卡住不出结果,后续会修正这个问题。 暂时的解决方案是,您可以使用 nexttrace -c 打开程序的偏好设置面板,然后将默认的地理位置 API 修改为 IPSBIPWHOIS等第三方提供商,应该就可以解决。 感谢您的反馈。 Regards, Leo Shen

OK. Closing.

最新的补丁已经修复了这个问题,您可以尝试一下。

mclovin-2k commented 2 years ago

OK

您好, 目前 WEB API 还不完善,因为 LeoMoeAPIWebSocket 还没有做长期持久化连接的定时心跳包检测(主要是后端还在开发中)。所以一旦断开不会重连,导致NT获取不到 IP 地理位置信息从而卡住不出结果,后续会修正这个问题。 暂时的解决方案是,您可以使用 nexttrace -c 打开程序的偏好设置面板,然后将默认的地理位置 API 修改为 IPSBIPWHOIS等第三方提供商,应该就可以解决。 感谢您的反馈。 Regards, Leo Shen

OK. Closing.

最新的补丁已经修复了这个问题,您可以尝试一下。

更新了beta2之后,似乎还是不行呃。不过这次有 Log 输出了。 配置和LOG如下: image

PS:如果我不通过 Nginx 反代,直接访问 http://xxxx:8080/ ,是正常的。

sjlleo commented 2 years ago

我猜是您 Nginx 配置写法的问题导致没办法正常反代API,您试试这样

   location /trace {
        proxy_pass         http://127.0.0.1:8080;

        proxy_set_header   X-Forwarded-Host   $http_host;
        proxy_set_header   X-Forwarded-For    $remote_addr;
        proxy_set_header   X-Real-IP          $remote_addr;
    }
mclovin-2k commented 2 years ago

我猜是您 Nginx 配置写法的问题导致没办法正常反代API,您试试这样

   location /trace {
        proxy_pass         http://127.0.0.1:8080;

        proxy_set_header   X-Forwarded-Host   $http_host;
        proxy_set_header   X-Forwarded-For    $remote_addr;
        proxy_set_header   X-Real-IP          $remote_addr;
    }

OK。我改为 location /trace 之后的测试结果: image

image

PS:测试用 VPS 是IPV4 IPV6双栈的,不知道有没有关系。

sjlleo commented 2 years ago

我猜是您 Nginx 配置写法的问题导致没办法正常反代API,您试试这样

   location /trace {
        proxy_pass         http://127.0.0.1:8080;

        proxy_set_header   X-Forwarded-Host   $http_host;
        proxy_set_header   X-Forwarded-For    $remote_addr;
        proxy_set_header   X-Real-IP          $remote_addr;
    }

OK。我改为 location /trace 之后的测试结果: image

image

PS:测试用 VPS 是IPV4 IPV6双栈的,不知道有没有关系。

这看起来是VPS上游ISP的策略问题,特别喜欢掐断WebSocket连接,就是频率有点太高了。我见到比较多出现在Oracle的免费服务器(特别严重)还有诸如Virmach、移动家宽上面。如果连接已经被ISP切断,但是ws还并不知晓(未收到Reset),就会出现这个问题,等会儿再发布一个新的改进版本,但是效果还是需要测试了以后才知道。

mclovin-2k commented 2 years ago

我猜是您 Nginx 配置写法的问题导致没办法正常反代API,您试试这样

   location /trace {
        proxy_pass         http://127.0.0.1:8080;

        proxy_set_header   X-Forwarded-Host   $http_host;
        proxy_set_header   X-Forwarded-For    $remote_addr;
        proxy_set_header   X-Real-IP          $remote_addr;
    }

OK。我改为 location /trace 之后的测试结果: image image PS:测试用 VPS 是IPV4 IPV6双栈的,不知道有没有关系。

这看起来是VPS上游ISP的策略问题,特别喜欢掐断WebSocket连接,就是频率有点太高了。我见到比较多出现在Oracle的免费服务器(特别严重)还有诸如Virmach、移动家宽上面。如果连接已经被ISP切断,但是ws还并不知晓(未收到Reset),就会出现这个问题,等会儿再发布一个新的改进版本,但是效果还是需要测试了以后才知道。

你猜对了,这个真就是 Oracle Cloud 的机器…… 但是解释不了为什么直接访问 8080 端口就正常。

sjlleo commented 2 years ago

你猜对了,这个真就是 Oracle Cloud 的机器…… 但是解释不了为什么直接访问 8080 端口就正常。

那是因为运气好233,如果放的时间长一点,也会ws崩溃退出的... 现在对于这种频繁掐断 WebSocket 连接还没有提醒的加了一个心跳包用来保活,这次估计应该就不会那么轻易被 Oracle 给断了。

现在发布了 v0.1.11-beta.3,您再试试。我刚刚也专门在 Oracle 上面跑了一下,似乎没有问题了。

sjlleo commented 2 years ago

另外如果您主页不是以静态文件缓存在根目录下的话,Nginx 需要这样配置

    location / {
        proxy_pass         http://127.0.0.1:8080;

        proxy_set_header   X-Forwarded-Host   $http_host;
        proxy_set_header   X-Forwarded-For    $remote_addr;
        proxy_set_header   X-Real-IP          $remote_addr;
    }

    location /trace {
        proxy_pass         http://127.0.0.1:8080;

        proxy_set_header   X-Forwarded-Host   $http_host;
        proxy_set_header   X-Forwarded-For    $remote_addr;
        proxy_set_header   X-Real-IP          $remote_addr;
    }
mclovin-2k commented 2 years ago

另外如果您主页不是以静态文件缓存在根目录下的话,Nginx 需要这样配置

    location / {
        proxy_pass         http://127.0.0.1:8080;

        proxy_set_header   X-Forwarded-Host   $http_host;
        proxy_set_header   X-Forwarded-For    $remote_addr;
        proxy_set_header   X-Real-IP          $remote_addr;
    }

    location /trace {
        proxy_pass         http://127.0.0.1:8080;

        proxy_set_header   X-Forwarded-Host   $http_host;
        proxy_set_header   X-Forwarded-For    $remote_addr;
        proxy_set_header   X-Real-IP          $remote_addr;
    }

抱歉。因为这个机器同时兼顾了其它一些用途,location / 无法指向 NextTrace 的端口。

mclovin-2k commented 2 years ago

Fixed. Thanks the developers for all the hard works.