NGINX未将呼叫从react应用程序路由到后端应用程序

NGINX未将呼叫从react应用程序路由到后端应用程序,nginx,nginx-location,nginx-reverse-proxy,nginx-config,Nginx,Nginx Location,Nginx Reverse Proxy,Nginx Config,我有一个AWS Ubuntu服务器,它拥有一个运行在127.0.0.1:4100的react前端,并使用端口127.0.0.1:1323对Go应用程序进行api调用。我在/etc/Nginx/sites available/default配置文件中为这两个端口安装了Nginx和setup proxy pass,但我只得到前端被Nginx调用。使用chrome inspect检查为什么Go应用程序没有提供react应用程序的某些功能,我看到了这个错误 client.js:772 GET net::

我有一个AWS Ubuntu服务器,它拥有一个运行在127.0.0.1:4100的react前端,并使用端口127.0.0.1:1323对Go应用程序进行api调用。我在/etc/Nginx/sites available/default配置文件中为这两个端口安装了Nginx和setup proxy pass,但我只得到前端被Nginx调用。使用chrome inspect检查为什么Go应用程序没有提供react应用程序的某些功能,我看到了这个错误

client.js:772 GET net::ERR_连接被拒绝 错误:请求已终止可能原因:网络脱机、访问控制不允许源站允许源站、页面正在卸载等

我做错了什么?下面是我的默认配置文件

server { 

listen 80 default_server; 
listen [::]:80 default_server; 

server_name _; 

location / { 

proxy_pass http://127.0.0.1:4100; 

} 

location /api { 

proxy_pass http://127.0.0.1:1323/; 

 } 
}

您的服务器正在侦听端口80:

listen 80 default_server; 
listen [::]:80 default_server; 
因此,您应该向该端口发出请求:

GET http://127.0.0.1/api/     => http://127.0.0.1:1323/
GET http://127.0.0.1:80/api/  => http://127.0.0.1:1323/
GET http://127.0.0.1/         => http://127.0.0.1:4100/
GET http://127.0.0.1:80/      => http://127.0.0.1:4100/
然后nginx应该正确地代理您的请求

使现代化 更清楚地了解nginx配置

server { 

listen 80 default_server;  // The port nginx is listening to ipv4
listen [::]:80 default_server; // The port nginx is listening to ipv6

server_name _; 

location / { // When you call this location...

proxy_pass http://127.0.0.1:4100; // You'll be redirected to this location

} 

location /api { // When you call this location...

proxy_pass http://127.0.0.1:1323/; // You'll be redirected to this location

 } 
}
您的配置正常

你说你的客户正试图联系你http://127.0.0.1:1323/api/ 但它应该要求http://127.0.0.1/api/ 删除要重定向到的端口http://127.0.0.1:1323/.

下面是另一个例子:

server { 

    listen 80; 

    server_name localhost anywebsite.com; 

    location ~* ^/MyApp {
        proxy_pass http://localhost:5130;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_send_timeout 2m;
        proxy_read_timeout 2m;
    }
}
在这种情况下,每次我的url以/MyApp ex结尾时:http://anywebsite.com/api/MyApp 我正被代理给你http://localhost:5130. 但如果我尝试访问http://localhost:5130 或http://anywebsite.com:5130/api/MyApp 我不能,因为nginx只监听端口80。如果要访问另一个端口,需要如下指定:

server {
    listen 80; 
    listen 5130; 

[...]

您的react应用程序是否指向?@ShawnC。正确,我的react应用程序指向该位置。react应用程序正在您计算机上的浏览器中运行,试图使用127.0.0.1的IP连接到远程服务器,该IP是您本地计算机的别名。您需要更改React应用程序以指向您的AWS IP。http://AWS_IP/@肖恩。你太棒了……非常感谢。@ShawnC。我也犯了同样的错误,按照你的建议解决了。非常感谢。但这里有一个问题。假设服务器名为mydomain.com。当用户通过域访问站点时,nginx显示EC2实例中的用户。从这个例子中,我假设一个用户客户端通过mydomain.com/api发送一个请求,nginx发送一个请求,该请求也在EC2实例中,但显然用户需要发送一个请求到?为什么nginx不能向发送请求?我不确定是否遵循。如果你不介意,请你编辑配置文件,我必须反映你的意思,根据以上?提前感谢。您发送的配置看起来很好。我的意思是你应该在端口80调用,而不是在你想重定向的端口。您需要做的是将客户端更改为调用端口80。我通过aws dns的入口点将我带到端口80 nginx正在侦听的React应用程序。react应用程序是一个进行后端调用的应用程序,它被编码为进行后端api调用。您看到的客户端错误是因为它正在显示react应用程序试图在服务器中调用的内容,但nginx没有将该调用重定向到在该端口运行的应用程序。这有意义吗?是的,有意义。但是nginx的入口点应该始终是127.0.0.1:80。Proxy_pass将使nginx从端口80到达1323,而不是相反。React应该调用127.0.0.1:80/api/来查找后端应用程序weeeet,因为它在AWS上运行,所以我必须根据@Shawn C指向AWS IP。建议谢谢。