NginxでリバースプロクシをしているサイトでWebSocket使ったら、なんか変な感じになった


バックエンドで起動しているMojolicious製アプリにNginxのリバースプロクシ経由でアクセスしたら、WebSocketが即切れるようになった。
考えてみたら当たり前だけど、そりゃ実行している場所とアクセス受けてる場所が違ったら、そうなる気がする。

解決方法は、単純にNginxの設定に

を書くだけ。serverディレクティブの下に書いていいのか、それともlocationで縛っておいたほうがいいのかはよくわからない。
nginx websocket reverse proxy configuration 

仕組み的には、今のセッションを別のプロトコルに変更するヘッダがhttp1.1にあって、それを追加しているらしい。なので、http_versionのディレクティブは必須。これを書き忘れて、しばらく悩んでいた。
Nginxの最新安定版がWebSocketのリバースプロキシに対応したそうなので試してみた 

あと、Nginxのバーションも1.4以上である必要がある。(開発版だったら1.3でも行けるらしいけど、いまさら1.3を使う理由は特にないと思う)
CentOSだったので、yumにリポジトリ追加してインストール

こんな感じで思いっきりばーんとアップデートかけたら、設定ファイルが飛んだ。ワロス。

実際には飛んだわけではなく、.rpmnewという拡張子がついてバックアップされていたが、それにしばらく気づかず、ブログのトップ画面が ” Welcome to Nginx! ” になって焦りまくっていた。二年前に勢いで作ったVPSとリバプロ構成だったので、全然設定覚えてなかったから助かった……マジでちゃんと構成管理やろう。

ともあれ、こんな感じで無事Nginxのアップデートと、WebSocketのリバースプロクシ対応ができたので、この間作ったWebSocketのサンプルをVPSで動かすことができた。
https://github.com/YasuhiroKinoshita/learn_websocket

今日は勉強会という名のもくもく会に出て、ひたすらWebSocketを使ったWebアプリをコーディングしていた(上のGithubのやつとは別)ので、VPS上で動かせてよかった。

 


この記事はPerl, プログラミングに投稿されました タグ: , , . このパーマリンクをブックマークする。 コメントを投稿するか、トラックバックをどうぞ: トラックバック URL.

コメントする

あなたのメールは 絶対に 公開されたり共有されたりしません。 * が付いている欄は必須項目です

次の HTML タグと属性が使用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

*
*