我正在尝试在同一个服务器/端口上运行多个 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;
}
}
如您所见,我在 forever
的不同子目录中运行(使用 /var/www/node
)不同的项目(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
我现在可以使用它了,但这不是正确的解决方案。
如果有人对此有任何想法,我会很高兴听到他们的意见并尝试一下!
最佳答案
遇到了同样的问题。通过在 nginx 配置中将 /socket.io
路由到我的 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 上提供服务) .
关于node.js - Socket.io 客户端 javascript 文件位置(使用 nginx 反向代理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22308663/