我是一名程序员,但只是网络服务器后端世界的新手,这就是我寻求帮助的原因.我对整个系统模型感到困惑,并希望澄清它是如何工作的.也许,我在很短的时间内读了太多文章.
首先:我在我的网络服务器上运行Nginx 1.2.x.据我所知,Nginx正在处理请求,它专用于端口80(对我来说)和服务http请求(也使用PHP-fpm来服务PHP).
然后,我在端口8080上有一个成功运行的nodejs服务器.我想通过websocket连接(由于它的性质和协议),因为Nginx不支持websocket但我对发生了什么感到困惑.
如果我去http // mydomain.tld:8080,这是通过节点服务器并保持关闭Nginx?在这种情况下,连接可以通过websocket而不是回落到xhr或其他任何东西(我不想要它,因为可扩展性),对吗?
那我该怎么做才能在http // mydomain.tld / game /中产生相同的效果呢?只需将Nginx.conf中的请求代理到节点服务器?喜欢:
# if a file does not exist in the specified root and nothing else is definded,we want to serve the request via node.js try_files $uri @nodejs; location @nodejs { proxy_pass 127.0.0.1:8080; break; }
来自:https://stackoverflow.com/a/14025374/2039342
如果我们需要通过Nginx进行websocket通信时它是一个很好的代理解决方案吗?当我们想要一个常规的PHP站点和socket.io连接时,我们是否.到目前为止,我认为重点是在端口80上运行流量并分离标准请求和websocket流量.在我的情况下,最简单的解决方案是什么?
http://www.exratione.com/2012/07/proxying-websocket-traffic-for-nodejs-the-present-state-of-play/在本文中我发现HAProxy可能是我的直到Nginx 1.3,是吗?
我知道我的问题有点混乱,但我正在努力去理解确切的技术.请给我一些提示|文章阅读|起点|基本配置.
Ps2:看起来不那么愚蠢:我已经在red5(基于java的flash服务器)flash中完成了这个游戏,所以我只想重新考虑并用适当的当前技术发布它.
解决方法
首先,我使用Nginx_tcp_proxy_module重新安装了Nginx作为修补版本.
下一步是设置正确的配置来处理请求:通过http或tcp.
我希望标准文件通常来自webroot,通过node.js(和socket.io js本身ofc)的游戏逻辑和PHP_fpm的.PHP文件.
所以我最终得到了以下工作Nginx设置:
user www-data; worker_processes 16; events { worker_connections 1024; } http { upstream node-js-myapp { server 127.0.0.1:3000; } include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; gzip on; server { listen 80; server_name domain.xx; # Multiple hostnames seperated by spaces root /var/www/domain.xx; # Replace this charset utf-8; access_log /var/log/Nginx/domain.xx.access.log combined; error_log /var/log/Nginx/domain.xx.error.log; location ~ \.PHP${ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/Nginx/conf.d/PHP_fpm; # Includes config for PHP-FPM (see below) } location / { index index.html index.htm; } location ^~ /socket.io/ { try_files $uri @node-js-myapp; } location /status { check_status; } location @node-js-myapp { 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_pass http://node-js-myapp; } } } tcp { upstream websocket-myapp { server 127.0.0.1:8080; check interval=3000 rise=2 fall=5 timeout=1000; } server { listen 3000; server_name _; access_log /var/log/Nginx/domain.xx.access.log; proxy_read_timeout 200000; proxy_send_timeout 200000; proxy_pass websocket-myapp; } }
它与这个node.js服务器配合得很好:
var app = require('express').createServer() var io = require('socket.io').listen(app); io.set('transports',[ 'websocket','flashsocket','htmlfile','xhr-polling','jsonp-polling' ]); app.listen(8080);
虽然请求的文件位于我的服务器的公共端和HEAD部分:
<script src="/socket.io/socket.io.js"></script>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。