Apache-2.4

Spring端點使用IP而不是域名。怎麼修?

  • October 22, 2018

我有一個部署在 VPS 中的 Spring Boot 應用程序。我將它打包為 awar並通過 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 OUT了 Chrome 開發者工具的網路選項卡。

通過其他方式,我知道域正確指向 VPS 的 IP。我四處搜尋並嘗試了以下解決方案:

但這些都不起作用。

我還嘗試了連結問題中的 nginx 解決方案,但在我看來,nginx 從未在此 VPS 上工作過,因為 VPSnginx -t附帶的設置失敗了。

由於這個 VPS 也部署了一個 React 應用程序,我認為讓 Tomcat 使用埠 80 不是一種選擇。

由於我沒有找到任何其他解決方案,我該怎麼辦?

**更新1:**忘記根據apache-2.4(匿名)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 的過濾器。

我最終設法讓它工作,但我改變了很多東西,以至於我不記得我到底做了什麼。

但我知道它與 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

您應該做的第一件事是在客戶端擷取網路流量。您應該擷取正在工作和不工作的兩種情況的流量。

然後比較兩者,找出它們在哪些方面表現不同。他們很可能不是都訪問相同的IP地址。

其他解釋是可能的。如果兩者都建立到同一個 IP 的連接並發送請求,但只有一個收到響應,則可能是伺服器需要更長的時間來處理請求,或者伺服器產生更長的響應並觸發 MTU 問題。

引用自:https://serverfault.com/questions/932090