无法访问服务器以外的服务,后端和前端项目分离

无法访问服务器以外的服务,后端和前端项目分离

我问过了相关问题但已经解决了。
使用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,可能来自sourceinspect需要连接真正的后端。

前端知识确实欠缺,有错误欢迎指正。

相关内容