EC2 Nginx Socket Io 设置

问题描述 投票:0回答:1

想询问 EC2 上 nginx 中套接字 io 的一些设置。

我的技术堆栈是 MERN Stack。

在本地,后端监听的是5000端口,而socket io也是一样。然后前端在端口 3000 上提供服务

在生产中,我构建前端并将 nginx 根目录指向 /dist 文件夹 对于后端,我使用 pm2 在 http://localhost:5000

为后端提供服务

我的nginx配置如下

server {
#listen       80;
listen 80 default_server;
listen \[::\]:80 default_server;
server_name  yourdomain.com;

    access_log /home/ubuntu/server/server_logs/host.access.log main;
    
    location / {
        root   /home/ubuntu/Threads-clone/frontend/dist;
        index  index.html index.htm;
        try_files $uri /index.html;
        add_header X-Frame-Options SAMEORIGIN;
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
    }
    
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    
    server_tokens off;
    
    location ~ /\.ht {
        deny  all;
    }
    
    location /api/ {
        proxy_pass http://localhost:5000/api/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    
        # WebSocket support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    
    location /socket.io/ {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

}

然后是我的服务器端代码

const app = express();
const server = http.createServer(app);

const io = new Server(server, {
    cors: {
        origin: "http://localhost:3000",
        methods: ["GET", "POST"]
    }
})

我的客户端代码

const socket = io('/socket.io', {
            path: '/socket.io/',
            query:{
                userId: user?._id
            }
        });

我有两个问题,第一个问题是在这种情况下我应该在服务器端为 socket.io 设置 cors 吗?

第二个问题是,我该如何正确设置。前端和后端在生产中正常工作。只是网络套接字不能。

如果在“网络”选项卡中查看,webscoket 显示没有错误,但会继续生成新的 Web 套接字连接,并且在我的后端,连接到 Web 套接字的用户也没有控制台输出。也没有错误输出。

提前感谢您的帮助

我有两个问题,第一个问题是在这种情况下我应该在服务器端为 socket.io 设置 cors 吗?

第二个问题是,我该如何正确设置。前端和后端在生产中正常工作。只是网络套接字不能。

如果在“网络”选项卡中查看,webscoket 显示没有错误,但会继续生成新的 Web 套接字连接,并且在我的后端,连接到 Web 套接字的用户也没有控制台输出。也没有错误输出。

提前感谢您的帮助

nginx amazon-ec2 socket.io mern
1个回答
0
投票

不幸的是,我无法回答您的第一个问题,因为我不是开发人员。但对于第二个问题,nginx 将无法将流量作为代理路由到您的服务器,因为您将 nginx 配置为将流量路由到

http://localhost:5000;
,但是您在
http://localhost:3000
上运行服务器,修改后使用
nginx -t
测试您的配置,然后重新加载 nginx 以读取新配置
nginx -s reload
systemctl restart nginx

© www.soinside.com 2019 - 2024. All rights reserved.