WebSockets aren't HTTP — fake header is not enough to fool HTTP-compliant servers/proxies. You could try HTTPS WebSockets with TLS 1.1 SNI vhosts.
I recommend using Server-Sent Events instead. You get nearly same API for realtime server->client push, and they're HTTP-compatible:
http://html5doctor.com/server-sent-events/ http://speakerdeck.com/u/pornel/p/server-sent-events
If you use TCP proxying, you have no way to react on HTTP headers. So either your Websocket server runs on a different port or interface or you have to proxy _all_ traffic on that port to your websocket backend.
https://github.com/yaoweibin/nginx_tcp_proxy_module