![](/img/trans.png)
[英]Socket.io events not received (nginx reverse proxy, server to client)
[英]Socket.io client-side javascript file location (with nginx reverse proxy)
我正在尝试在同一服务器/端口上运行多个NodeJS应用程序,使用nginx作为代理实际运行的Node应用程序的反向代理。
server {
listen 8000;
server_name node.domain.com;
root /var/www/node;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
# Enables WS support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
location / {
proxy_pass http://127.0.0.1:8001;
}
location /irc/ {
proxy_pass http://127.0.0.1:8002;
}
location /voidwalker/ {
proxy_pass http://127.0.0.1:8003;
}
}
如您所见,我在/var/www/node
不同子目录中运行( forever
使用)不同的项目(NodeJS应用程序)。
但我想在我的一个项目中使用socket.io 。 在socket.io文档中,它声明我应该使用<script src="/socket.io/socket.io.js"></script>
在客户端加载socket.io-client,它返回404 :
GET http://node.domain.com/socket.io/socket.io.js 404 (Not Found)
我猜这是因为我正在代理请求但我并不完全理解这个过程在内部是如何工作的,我希望能够让它发挥作用。
关于这一点需要注意的是我必须使用<link rel="stylesheet" href="/voidwalker/css/main.css">
来加载我的CSS,而我宁愿使用<link rel="stylesheet" href="/css/main.css">
以防我想在特定的子域/其他域上部署它(因为这是一个开发服务器)。
编辑
因此,在与Ray Stantz一起调试之后,我们认为代理中出现了问题。 我将socket.io.js移到/public/js/socket.io.js
,我现在可以使用它,但这不是正确的解决方案。
如果有人对此有任何想法,我会很高兴听到他们并试一试!
有同样的问题。 通过将/socket.io
路由到nginx配置中的node.js应用程序解决了这个问题。 在你的情况下,它应该看起来像:
server {
listen 8000;
server_name node.domain.com;
root /var/www/node;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
# Enables WS support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
location / {
proxy_pass http://127.0.0.1:8001;
}
location /irc/ {
proxy_pass http://127.0.0.1:8002;
}
location /voidwalker/ {
proxy_pass http://127.0.0.1:8003;
}
location /socket.io {
proxy_pass http://127.0.0.1:8003;
}
}
该解决方案的唯一的缺点是,只有voidwalker
的应用程序可以使用socket.io(因为/socket.io
仅投放在127.0.0.1:8003)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.