Nginx反向代理出现CONNECTION_REFUSED连接拒绝问题
Nginx反向代理配置问题:前端请求localhost后端报错
net::ERR_CONNECTION_REFUSED 问题背景
我在EC2(Ubuntu系统)上完成部署:前端由Nginx提供服务,后端通过pm2运行。已确认后端正常——在服务器上curl本地地址可响应,安全组开放端口后Postman公网请求也正常。
我需要配置Nginx反向代理,将前端/api/等路径请求路由到同一服务器的http://localhost:4011后端,但前端直接请求http://127.0.0.1:4011时返回net::ERR_CONNECTION_REFUSED错误。
我的Nginx配置如下:
server { listen 80; server_name mysite.com www.mysite.com; return 301 htps://$host$request_uri; } server { #listen 80 default_server; #listen [::]:80 default_server; listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot #if ($host = helpful-thinking.online) { # return 301 https://$host$request_uri; #} # managed by Certbot root /var/www/html/mysite; index index.html; location / { try_files $uri /index.html; } server_name mysite.com www.mysite.com; location /api/ { proxy_pass http://127.0.0.1:4011; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; }
问题分析
报错的根本原因是前端请求的http://127.0.0.1:4011是从浏览器端发起的,这里的127.0.0.1指向的是用户自己的本地设备,而非EC2服务器,所以必然会出现连接拒绝的错误。
反向代理的正确逻辑是:前端应该向部署域名的/api/路径发起请求(例如https://mysite.com/api/xxx),由Nginx接收该请求后,再转发到EC2服务器本地的http://127.0.0.1:4011后端服务。
已解决方案
【编辑】
我此前误解了反向代理机制:需将前端请求地址改为域名(如https://mysite.com/api/xxx),由Nginx路由到后端,调整后问题已解决。
内容的提问来源于stack exchange,提问作者Alejandro Martinez
相关产品推荐
相关产品推荐

