【发布时间】:2019-04-19 21:26:53
【问题描述】:
我正在 AWS EC2 ubuntu 实例中设置一个服务器,该实例具有一个反应前端和一个 nodejs 快速服务器。两者通过 socket.io 进行通信。在本地一切正常,但在托管时会记录 Failed to load resource: net::ERR_CONNECTION_REFUSED 和 GET ${url} net::ERR_CONNECTION_REFUSED。服务端通过pm2运行,客户端的index直接从nginx调用。
我尝试在 nginx 中为服务器端口创建一个端点并通过 url 调用它,并尝试只使用 localhost,结果相似。
nginx 配置:
server {
listen 443 default_server;
listen [::]:443 default_server;
root /var/www/[url]/client/build;
index index.html;
server_name [url] www.[url];
location / {
root /var/www/[url]/client/build;
index index.html;
try_files $uri /index.html;
}
ssl on;
ssl_certificate /etc/letsencrypt/live/[url]/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/[url]/privkey.pem;
}
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 5000;
server_name localhost; #also tried the url here (when also changed in the server)
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
服务器:
//...
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
const http = require('http').Server(app);
const io = require('socket.io')(http);
const config = require('../client/src/config.json');
io.on('connection', function (socket) {
//...
socket.on('send_url', (data) => {
//connectUrl(data);
});
});
io.listen(config.Global.serverPort);
客户端示例:
import openSocket from 'socket.io';
const socket = openSocket(`http://localhost:${config.Global.serverPort}`);
//...
socket.emit('send_url', {
url: this.state.sheetURL,
googleId: this.props.user.googleId,
eventId: this.props.curEvent
});
我可以成功访问客户端,但是客户端和服务器之间没有通信。我已经为此工作了几天并四处搜索,但无法获得我发现的许多示例。这似乎是一件基本的事情,所以我觉得我一定遗漏了一些明显的东西!
谢谢!
【问题讨论】:
-
EC2的443端口开了吗?
-
请在aws控制台开启ec2的80、8080、443、5000端口。
-
那些端口都已经打开了
-
当你在本地运行时,客户端和服务器之间有 nginx 吗?我立即认为它是 nginx 配置,因为 websockets 和代理因不总是一起工作而臭名昭著。
标签: node.js reactjs express nginx socket.io