我问过了相关问题但已经解决了。
使用nginx
提供的反向代理。
配置文件取自项目文件,我将其粘贴在下面。
目前的情况是:
后端服务运行在8080端口。前端运行在9001端口。
$ netstat -anp |grep 8080
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 :::8080 :::* LISTEN 26707/java
$ netstat -anp |grep 9001
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 12130/grunt
我可以访问运行服务的机器 A 上的 localhost:9001。而从同一局域网中的任何其他机器访问。它显示错误页面。如果使用Inspect
,错误页面中会有一条消息。
Cannot open document for: /eplmp-server-rest/api/auth/providers from http://192.168.1.164:8989/
192.168.1.164
是机器A的IP地址。
/eplmp-server-rest/api/*
应该是后端服务服务的端点。
来自XHR
Network
Headers
机器 A。
General
Request URL: http://localhost:8080/eplmp-server-rest/api/auth/providers
Request Method: GET
Status Code: 200 OK
Remote Address: [::1]:8080
Referrer Policy: no-referrer-when-downgrade
Requst Headers
Provisional headers are shown
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://localhost:9001
Referer: http://localhost:9001/
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36
来自同一局域网中的另一台机器
Request URL: http://localhost:8080/eplmp-server-rest/api/auth/providers
Referrer Policy: no-referrer-when-downgrade
Provisional headers are shown
Accept: application/json, text/javascript, /; q=0.01
Origin: http://192.168.1.164:8989
Referer: http://192.168.1.164:8989/
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36
相关的 nginx 配置文件。
# Simple http proxy
server {
listen 8989;
server_name localhost;
# Static grunt server
location / {
# Use grunt server (require grunt serve command)
proxy_pass http://localhost:9001;
# OR serve static files directly :
# charset utf-8;
# root /path/to/docdoku-web-front/dist;
# expires 0d;
# access_log off;
}
# Webservices REST
location /api {
proxy_pass http://localhost:8080;
}
# Websocket application
location /ws {
proxy_pass http://localhost:8080/ws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 7200s;
}
}
答案1
由于是前后端分离的项目,本地可以访问成功,
说明后端配置正确。失败的请求
Request URL: http://localhost:8080/eplmp-server-rest/api/auth/providers
所以不是在找正确的域名。因为机器A的IP是192.168.1.164,所以正确的请求URL域名应该在那里。
这是前端应该请求的地方,与nginx配置文件无关。
最后,找到前端的配置文件,里面有一部分配置服务器域名,是localhost
。把它改成192.168.1.164后就好了。
不管是什么,任何前后端分离的项目都应该有一个地方让前端连接后端。
我很好奇,既然前端和后端部署在同一台服务器上,那么localhost
应该可以工作。我检查了一些网站后发现,它们大多数都使用公共域名,例如somewebsite.com
而不是localhost
,尽管它们可能不部署在同一台服务器上,这启发了我。猜测应该有某种front-end client
,可能来自source
,inspect
需要连接真正的后端。
前端知识确实欠缺,有错误欢迎指正。