【问题标题】:Run NodeJs application with socket.io using Nginx as proxy server on AWS EC2使用 Nginx 作为 AWS EC2 上的代理服务器,使用 socket.io 运行 NodeJs 应用程序
【发布时间】:2018-07-21 18:44:27
【问题描述】:

我正在尝试在 AWS EC2 上使用 Nginx 作为代理服务器运行带有 socket.io 的 NodeJs 应用程序并收到此错误:
加载资源失败:服务器响应状态为 404(未找到) /socket.io/?EIO=3&transport=polling&t=MIsbMS_:1
我正在关注此页面指令https://www.nginx.com/blog/nginx-nodejs-websockets-socketio/

我的nginx设置如下:

upstream socket_nodes {
    ip_hash;
     server 127.0.0.1:8080;
}
server {
    listen 80 ;
    listen [::]:80 ;
    root /home/ubuntu/NodejsProjects/Node3;
    index index.html index.htm index.nginx-debian.html;
    server_name mydomainname.com www.mydomainname.com;
    location / {
   proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_pass http://socket_nodes;
                # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
}
}

我的 index.js 有以下代码

  var app = require('express')();
var server = require('http').Server(app);      
var io = require('socket.io')(server);

server.listen(8080);

app.get('/', function (req, res) {
  res.sendFile(__dirname + '/index.html');
});
  io.sockets.on('connection',function (socket){

    socket.on('test', function () {
     console.log(data);
     socket.emit('testCl', 'Test successful!!');
    });
  });

在我的 index.html 中有

 <p id='pp'></p>
    <button id="Btn1" onclick="cc();">Get test results</button><br/>


<script>
var socket = io();
var cc=function(){
socket.emit('test');
};
socket.on('testCl', function (data) {
    console.log(data);
    $("#pp").text(data);
  });
</script>

花了几个小时在网上搜索后,我在 html 文件中尝试了很多东西但没有成功,例如

var socket = io();
var socket = io.connect('http://localhost');
var socket = io.connect('http://localhost:8080');
var socket = io.connect('http://www.mydomainname.com:8080');
var socket = io.connect('http://myprivateIP:8080');
var socket = io.connect('http://mypublicIP:8080');

请提供任何帮助

【问题讨论】:

    标签: node.js amazon-web-services nginx socket.io reverse-proxy


    【解决方案1】:

    终于成功了。

    我所要做的就是通过复制 nginx 默认配置文件在 /etc/nginx/sites-available 中创建一个新文件

    sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/mynewfile
    

    编辑此文件并将上面给出的 nginx 代理设置放入其中并保存。

    将此 mynewfile 链接到站点可用目录

    sudo ln -s /etc/nginx/sites-available/mynewfile /etc/nginx/sites-enabled/
    

    现在测试 nginx 文件:

    sudo nginx -t
    

    重启nginx

    sudo systemctl restart nginx  
    

    之前我正在编辑一些现有文件以用作 nodejs 应用程序的反向代理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-17
      • 2014-12-13
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多