Spring端點使用IP而不是域名。怎麼修?
我有一個部署在 VPS 中的 Spring Boot 應用程序。我將它打包為 a
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 OUT
了 Chrome 開發者工具的網路選項卡。通過其他方式,我知道域正確指向 VPS 的 IP。我四處搜尋並嘗試了以下解決方案:
- 通過 Apache配置反向代理;
- 編輯
server.xml
,到處替換localhost
為域名;- 在 Spring 過濾器中更改請求域。
但這些都不起作用。
我還嘗試了連結問題中的 nginx 解決方案,但在我看來,nginx 從未在此 VPS 上工作過,因為 VPS
nginx -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 問題。