我有一个可能与 nginx 代理通行证有关或无关的问题。
socket.io 在端口 7022 上,但 nginx 管理端口 80 上的所有请求。socket.io 非常好用,xhr 至少有一半好用。我从来没有让 flashsocket 或 html 文件工作。也许也不是 jasonp。
我说这可能与 nginx 中的代理有关,因为我确实在 nginx 中提供了 socket.io 代理替代方案之前几个月删除了 flashsocket。
我经常在论坛上看到 socket.io 可以正常工作。“我从不改变服务器上的任何东西”“你不应该也需要......socket.io为你做这一切......保持原样......
我的交通工具下降到
io.set('transports', ['websocket','xhr-polling','jsonp-polling']);
而以下是推荐的:
io.set('transports', [
'websocket'
,'flashsocket'
,'htmlfile'
,'xhr-polling'
,'jsonp-polling'
]);
这是我的 nginx 代理配置
location /socket.io {
proxy_pass http://localhost:7022;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
我的 nginx 服务器还提供一些静态 html 以及 php,FastCGI 服务器监听 127.0.0.1:9000
其他 nginx 设置
server {
listen 80;
#server blah blah
client_max_body_size 100M;
client_body_buffer_size 5M;
location / {
try_files $uri $uri/ @rewrites;
# This block will catch static file requests, such as images, css, js
location ~* \.(?:ico|css|gif|jpe?g|png)$ {
# Some basic cache-control for static files to be sent to the browser
expires max;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_buffer_size 2M;
fastcgi_intercept_errors off;
fastcgi_buffers 4 2M;
fastcgi_read_timeout 200;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}
# this prevents hidden files (beginning with a period) from being served
location ~ /\. {
deny all;
}
# opt-in to the future
add_header "X-UA-Compatible" "IE=Edge,chrome=1";
有什么明显的吗??还有其他人对 socket.io 有运输问题吗?也许与 nginx 路由结合使用?