2016-07-14 103 views
0

我的應用程序體系結構在這裏。Socket.io設置cookie與nginx

  • 前端服務器3000 - domain.com,提供文件到瀏覽器
  • API服務器3001 - api.domain.com
  • 插槽服務器3003 - io.domain.com

在開發者模式,插座的要求都http請求的cookie,

但在生產模式的nginx(降至CONF),

插座餅乾只是有一個cookie IO

  • 在開發 enter image description here
  • 在督促 In prod

這是nginx的配置(插座服務器的一部分)。

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,令牌爲auth,但兩個cookie值消失。

它有什麼問題?

回答

0

最重要的是,設置cookie與域。

例如在節點JS,

res.setCookie({... 
    domain: 'domain.com' 
}); 

而在nginx的CONF,

proxy_cookie_domain io.domain.com domain.com