Webカメラとマイクを利用するアプリケーションの開発で複数の端末で動作検証をしたいと思いました。
しかし、WebカメラとマイクはlocalhostまたはSSL化されたサイトでしか動作できないというブラウザ仕様があるため、localhost:3000で別のPCで動作するRailsアプリケーションにアクセスできるようにする必要があります。
ローカルで起動したRailsアプリケーションにアクセスする分には、localhost:3000でアクセス可能ですが、/etc/hostsにドメインを定義する方法では、localhostでアクセスする事ができません。
では、どうすれば良いか。Nginxでプロキシすることで、それが可能です。
Railsアプリケーションを起動しているPC:Ubuntu
アクセスしたいPC:Mac
まず、接続元であるPCにnginxをインストールし、nginxの設定ファイルでserverを定義します。設定内容はシンプルで、server_nameがlocalhostである3000番ポートをリッスンするserverで、別PCのローカルIPへproxyするというものです。
server {
listen 3000;
server_name localhost;
proxy_set_header X-Forwarded-Host $http_host;
location / {
proxy_pass http://192.168.1.12:3000;
}
}
注意点として、RailsはCSRF対策の仕組みがデフォルトで有効なため、適宜必要なヘッダを設定してあげる必要があります。
# プロキシ先にHostを知らせます。この設定が無いと、originと一致しないためCSRFチェックがエラーになります。
proxy_set_header X-Forwarded-Host $http_host;
以上!