2012-02-21 68 views
2

下面的配置似乎工作,但現在失敗了。我跟着這個article下載並安裝了tcp_proxy_module。VHosts Nginx配置Playframework Websockets

#user nobody; 
worker_processes 1; 

#error_log logs/error.log; 
#error_log logs/error.log notice; 
#error_log logs/error.log info; 

#pid  logs/nginx.pid; 


events { 
    worker_connections 1024; 
} 


http { 
    include  mime.types; 
    default_type application/octet-stream; 

    #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
    #     '$status $body_bytes_sent "$http_referer" ' 
    #     '"$http_user_agent" "$http_x_forwarded_for"'; 

    #access_log logs/access.log main; 

    sendfile  on; 
    #tcp_nopush  on; 

    #keepalive_timeout 0; 
    keepalive_timeout 65; 

    #gzip on; 

    #server { 

    #} 


    # another virtual host using mix of IP-, name-, and port-based configuration 

    server { 
     listen  80; 
     #listen  locahost:8080; 
     server_name localhost.in; 

     location/{ 
      proxy_pass http://127.0.0.1:9000; 
     proxy_set_header  Host   $host; 
     } 
    } 

} 

更新:

Nginx的錯誤日誌:

2012/02/21 10:56:59 [error] 14745#0: *278 upstream timed out (60: Operation timed out) while reading upstream, client: 127.0.0.1, server: localhost.in, request: "GET /websocket/room/socket?roomNo=1&user=sameerFF HTTP/1.1", upstream: "http://127.0.0.1:9000/websocket/room/socket?roomNo=1&user=sameerFF", host: "test.localhost.in" 
2012/02/21 10:56:59 [error] 14745#0: *257 upstream timed out (60: Operation timed out) while reading upstream, client: 127.0.0.1, server: localhost.in, request: "GET /websocket/room/socket?roomNo=1&user=sameerChrome HTTP/1.1", upstream: "http://127.0.0.1:9000/websocket/room/socket?roomNo=1&user=sameerChrome", host: "test.localhost.in" 
2012/02/21 10:59:40 [error] 15366#0: *10 upstream timed out (60: Operation timed out) while reading upstream, client: 127.0.0.1, server: localhost.in, request: "GET /websocket/room/socket?roomNo=1&user=sameerFF HTTP/1.1", upstream: "http://127.0.0.1:9000/websocket/room/socket?roomNo=1&user=sameerFF", host: "test.localhost.in" 

更新2:

有了這個配置我得到一個綁定異常,當我開始nginx的。如果我刪除了tcp設置,nginx就會出現。我需要端口80重定向到9000爲常規http請求以及WebSocket請求

#user nobody; 
worker_processes 1; 

error_log logs/error.log; 
#error_log logs/error.log notice; 
#error_log logs/error.log info; 

#pid  logs/nginx.pid; 


events { 
    worker_connections 1024; 
} 

tcp { 
    upstream websockets { 
     ## Play! location 
     server 127.0.0.1:9000; 
    } 

    server { 
     listen 80; 
     server_name localhost.in; 

     tcp_nodelay on; 
     proxy_pass websockets; 
    } 
} 


http { 
    include  mime.types; 
    default_type application/octet-stream; 

    #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
    #     '$status $body_bytes_sent "$http_referer" ' 
    #     '"$http_user_agent" "$http_x_forwarded_for"'; 

    #access_log logs/access.log main; 

    sendfile  on; 
    #tcp_nopush  on; 

    #keepalive_timeout 0; 
    keepalive_timeout 65; 

    #gzip on; 

    # another virtual host using mix of IP-, name-, and port-based configuration 

    server { 
     listen  80; 
#listen  locahost:8080; 
     server_name localhost.in; 

     location/{ 
      proxy_pass http://127.0.0.1:9000; 
     proxy_set_header  Host   $host; 
    } 
    } 

} 
+0

它是如何失敗的?是否有來自nginx或日誌文件的錯誤消息(在重新啓用錯誤日誌之後,當然是:))?它只是Websockets部分不起作用嗎? – Carsten 2012-02-21 08:19:14

+0

我添加了聊天示例的錯誤日誌條目,它們看起來像TimeOutExceptions。 – 2012-02-21 09:47:25

回答

5

它看起來就像它只是沒有工作的websocket。請再次閱讀article you linked。你沒有修改你的nginx配置。

據這篇文章中,一個簡單的配置爲你可能是這樣的(我沒有測試它,雖然):

tcp { 
    upstream websockets { 
     ## Play! location 
     server 127.0.0.1:9000; 
    } 

    server { 
     listen 80; 
     server_name localhost.in; 

     tcp_nodelay on; 
     proxy_pass websockets; 
    } 
} 
+0

嘗試了您的解決方案,但在開始時遇到了綁定異常(請參閱我對該問題的編輯)。非常感謝您的幫助! – 2012-02-21 14:22:52

+0

當然,你會得到一個綁定異常,你試圖綁定到端口80兩次。嘗試它沒有整個'http {...}'部分。 'tcp {...}'部分應該自動將所有內容(包括傳統的HTTP請求以及Websocket的東西)路由到播放服務器。 – Carsten 2012-02-21 14:40:04

+0

謝謝!與http/tcp概念搖搖欲墜... – 2012-02-21 14:55:19