Socket.io 使用 nginx 设置 cookie
Socket.io set cookie with nginx
我的应用架构在这里。
- 前端服务器 3000 - domain.com,将文件提供给浏览器
- api-服务器 3001 - api.domain.com
- 套接字服务器 3003 - io.domain.com
在开发模式下,套接字请求具有所有http请求cookie,
但是在使用 nginx 的生产模式下(下到 conf),
socket cookie 刚好有一个cookie io
- 开发中
- 产品中
这是 nginx conf(套接字服务器的一部分)。
server {
server_name io.domain.com;
location / {
include proxy_params;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:3003;
}
location /socket.io/ {
include proxy_params;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:3003;
}
}
这里是套接字客户端
const io = require('socket.io-client');
let socket;
if (process.env.NODE_ENV === 'production') {
socket = io.connect('http://io.domain.com/noti');
} else {
socket = io.connect('http://localhost:3003/noti');
}
module.exports = socket;
在开发环境中,它运行良好,但在生产模式中,由于问题,我无法检索用户值。
我需要使用 cookie 值 sessionId,token 来验证,但是两个 cookie 值都消失了。
有什么问题吗?
最重要的是,使用域设置 cookie。
例如在节点js中,
res.setCookie({...
domain: 'domain.com'
});
并且在 nginx conf 中,
proxy_cookie_domain io.domain.com domain.com
我的应用架构在这里。
- 前端服务器 3000 - domain.com,将文件提供给浏览器
- api-服务器 3001 - api.domain.com
- 套接字服务器 3003 - io.domain.com
在开发模式下,套接字请求具有所有http请求cookie,
但是在使用 nginx 的生产模式下(下到 conf),
socket cookie 刚好有一个cookie io
- 开发中
- 产品中
这是 nginx conf(套接字服务器的一部分)。
server {
server_name io.domain.com;
location / {
include proxy_params;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:3003;
}
location /socket.io/ {
include proxy_params;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:3003;
}
}
这里是套接字客户端
const io = require('socket.io-client');
let socket;
if (process.env.NODE_ENV === 'production') {
socket = io.connect('http://io.domain.com/noti');
} else {
socket = io.connect('http://localhost:3003/noti');
}
module.exports = socket;
在开发环境中,它运行良好,但在生产模式中,由于问题,我无法检索用户值。
我需要使用 cookie 值 sessionId,token 来验证,但是两个 cookie 值都消失了。
有什么问题吗?
最重要的是,使用域设置 cookie。
例如在节点js中,
res.setCookie({...
domain: 'domain.com'
});
并且在 nginx conf 中,
proxy_cookie_domain io.domain.com domain.com