想询问 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 将无法将流量作为代理路由到您的服务器,因为您将 nginx 配置为将流量路由到
http://localhost:5000;
,但是您在 http://localhost:3000
上运行服务器,修改后使用 nginx -t
测试您的配置,然后重新加载 nginx 以读取新配置 nginx -s reload
或 systemctl restart nginx