2014-07-06 55 views
1

我有一个WebSocket的,它位于下的应用程序:nginx的配置作为代理的WebSocket的

http://localhost:8888/something/ws

我想使用nginx作为代理,但连接的转发不起作用。这是我的配置文件:

upstream backend { 
    server 127.0.0.1:8888; 
} 

server { 
    listen 80; 

    server_name localhost; 

    location/{ 
     proxy_pass_header Server; 
     proxy_set_header Host $http_host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Scheme $scheme; 
     proxy_pass http://backend; 
     proxy_next_upstream error; 
    } 

    location /something/ws { 

     proxy_pass http://backend; 

     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
    } 
} 

什么是故障。我必须重写路径还是其他的东西?


UPDATE

的Ubuntu 12.04。附带nginx 1.1。 nginx的升级到1.6之前,我不得不删除nginx的常见和nginx的满,太,否则nginx的1.1重新安装...

+0

我相信你应该问服务器故障 – demas

+0

@demas不一定这个问题,请参阅[是否有关web服务器配置文件的问题和重写规则的话题?](http://meta.stackoverflow.com/a/262746/ 456814)。 –

+0

我在serverfault上发现了类似的问题,但我不确定这是否是解决方案:http://serverfault.com/questions/482026/nginx-not-proxying-websockets-properly – eatdas

回答

2

你可以尝试以下:

location /something/ws/ { 
      proxy_pass http://backend; 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header Host $host; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection "upgrade"; 

      # Path rewriting 
      rewrite /something/ws/(.*) /$1 break; 
      proxy_redirect off; 
     } 

的关键是路径重写。