I am migrating a node.js app from Heroku to AWS Elastic Beanstalk that uses WebSockets on port 80. The WebSockets are returning a 301 error on AWS Elastic Beanstalk, but not on Heroku.
To initialize a WebSocket connection click Create a new note
.
AWS Beanstalk http://default-environment.psgekxtsbd.us-west-2.elasticbeanstalk.com/
Heroku https://murmuring-shelf-40601.herokuapp.com/
This is how I am setting up the WebSockets on the server.
let express = require('express');
let app = express();
require("express-ws")(app);
app.post("/service/create-account/", (req, res)=> {
app.ws('/:noteId/', function (ws, req) {/*code in here*/})
I have tried adding different configurations in the .ebextensions
folder like,
files:
"/etc/nginx/conf.d/01_websockets.conf" :
mode: "000644"
owner: root
group: root
content : |
upstream nodejs {
server 127.0.0.1:80;
keepalive 256;
}
server {
listen 80;
large_client_header_buffers 8 32k;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
# prevents 502 bad gateway error
proxy_buffers 8 32k;
proxy_buffer_size 64k;
proxy_pass http://nodejs;
proxy_redirect off;
# enables WS support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
And
files:
"/etc/nginx/conf.d/websocketupgrade.conf" :
mode: "000755"
owner: root
group: root
content: |
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
When I add these configurations the HTML fails to load with the error ERR_NAME_NOT_RESOLVED
. Here's that URL http://websocketsissue.us-west-2.elasticbeanstalk.com/
I setup my elastic beanstalk environment as a Web Server Environment using the predefined configuration for Node.js. I did not add any additional resources.
Is there anyway to get WebSockets to work on port 80 using AWS Elastic Beanstalk?
via sissonb
No comments:
Post a Comment