Не совсем ответ на ваш впрос, но, возможно, у вас ситуация аналогична моей, и тогда подобный подход поможет.
Столкнулся с этим буквально два дня назад, только не с socket.io, а с faye(http://faye.jcoglan.com), что в принципе те же яйца.
Нужно было прокидывать websocket запросы с определённого урла основного домена и 80 порта на порт асинхронного сервера на том же домене.
Решения с nginx, устроившего меня, я так и не нашел(варианты в коментах выше рассматривал), но в итоге понял, что подхожу не стой стороны к проблеме.
Проблема заключалась в том, что т.к. кроссдоменные faye-транспорты работают не во всех броузерах корректно, то начал я слать faye запросы на основной домен, и там на уровне nginx разделять траффик по веб-серверам (тут-то вебсокеты и не прокидывались).
И в итоге осознал, что надо просто вебсокет соединения открывать по отдельному адресу напрямую в асинхронный веб-сервер, а всё остальное оставить как есть — слать на 80й порт основоного домена nginx'у.
github.com/faye/faye/pull/134