Spring 端点可以使用 IP,但不能使用域名。如何修复?

Spring 端点可以使用 IP,但不能使用域名。如何修复?

我在 VPS 中部署了一个 Spring Boot 应用程序。我将其打包为war并通过 Tomcat 管理器进行部署(<IP>:<Tomcat port>/manager/html)。

如果我使用 VPS 的 IP 访问端点,例如http://<IP>:<Tomcat port>/api/login,它可以正常工作。但是,如果我通过域名访问它,例如 ,它不起作用http://example.com:<Tomcat port>/api/login。更具体地说,我进入了(failed) net::ERR_CONNECTION_TIMED OUTChrome 开发者工具的网络选项卡。

通过其他方式,我知道域名正确指向 VPS 的 IP。我四处搜索并尝试了以下解决方案:

但这些都不起作用。

我也尝试了链接问题中的 nginx 解决方案,但在我看来,nginx 从未在此 VPS 上运行过,因为它nginx -t因 VPS 附带的设置而失败。

由于我有一个 React 应用程序也由这个 VPS 部署,所以我认为让 Tomcat 使用端口 80 不是一个选择。

由于我找不到任何其他解决方案,我该怎么办?

更新 1:apachectl -S忘记按照描述添加输出(匿名):

[Fri Sep 21 13:42:06.248978 2018] [proxy_html:notice] [pid 29712] AH01425: I18n support in mod_proxy_html requires mod_xml2enc. Without it, non-ASCII characters in proxied pages are likely to display incorrectly.
VirtualHost configuration:
<VPS IP>:8080    example.com (/home/<user>/conf/web/example.com.apache2.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex fcgid-pipe: using_defaults
Mutex watchdog-callback: using_defaults
Mutex proxy-balancer-shm: using_defaults
Mutex rewrite-map: using_defaults
Mutex fcgid-proctbl: using_defaults
Mutex ssl-stapling: using_defaults
Mutex proxy: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex mpm-accept: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33

更新 2:React 应用程序停止工作。我按照 的建议nginx -t修复了它,重新启动它,它又开始工作了。在尝试实现反向代理时,我有可能破坏了与此相关的某些东西,因此可能会忽略上述评论。

更新 3:也忘了尝试改变 Spring 的过滤器。

答案1

您应该做的第一件事是捕获客户端的网络流量。您应该捕获正常工作和不正常工作两种情况下的流量。

然后比较两者,找出它们在哪些方面表现不同。很可能它们并不是同时访问同一个 IP 地址。

还有其他解释。如果两者都与同一 IP 建立连接并发送请求,但只有一个收到响应,则可能是服务器处理请求的时间更长,或者服务器产生更长的响应并触发 MTU 问题。

答案2

我最终设法让它发挥作用,但我改变了很多东西,以至于我不记得我到底做了什么。

但我知道它与 nginx 和 Apache 有关。基本上,您将保持 Spring 原样,并配置那些在 Spring 之前接收连接的服务器以正确接收它们并将它们重定向到 Spring 映射到的位置(即 localhost)。

我认为这是使其工作的 nginx 设置:

/etc/apache2/sites-enabled/domain.com.conf

server {
    server_name  domain.com;

    location / {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:<spring_port>;
    }
}

使用 找出您的主 nginx 文件nginx -t,编辑该文件并include /etc/apache2/sites-enabled/domain.com.conf在其中添加一个http

相关内容