LoginSignup
0
1

More than 1 year has passed since last update.

HTTPで立ち上げたWebSocketサーバに、HTTPSで接続するためのWeb Proxyの立ち上げ

Last updated at Posted at 2021-03-14

以前、以下の記事で、ESP32内にWebSocketサーバを立ち上げました。
 MMDダンスをM5Core2のディスプレイに表示する

しかしながら、ESP32内に立ち上げられるWebSocketサーバはHTTP接続のため、HTTPSで立ち上げたWebページのJavascriptからは「Mixed Content」となって接続できませんでした。

そこで、HTTP接続のWebSocketをHTTPSで接続できるようにするReverse Proxyサーバを立ち上げる手順を示しておきます。

こちらのページの設定を借用いたしました。

Nginxのインストール

Reverse Proxyサーバは、Nginxで実現します。インストールされていな場合は、インストールしておきます。以下は、Ubuntuの場合です。
後者は、PC再起動時にも自動起動するためのものです。

# apt-get install nginx
# systemctl enable nginx.service

SSL証明書を取得します。Let’s Encryptを使うのが手っ取り早いでしょう。
(オレオレ証明書でも大丈夫な気がしますが、試していません)
いろんなサイトで紹介されているので、ここでは説明を省きます。

取得したSSL証明書のファイルは3つあるかと思います。

・SSL証明書(ファイル名例:cert.pem)
・SSL中間証明書(ファイル名例:chain.pem)
・秘密鍵(ファイル名例:privkey.pem)

SSL証明書とSSL中間証明書を結合します。例えば、ファイル名「cert_chain.pem」とします。

-----BEGIN CERTIFICATE-----
SSL証明書
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
SSL中間証明書
-----END CERTIFICATE-----

次に、/etc/nginx/cert/ に、cert_chain.pemとprivkey.pemを配置します。
そして、 /etc/nginx/site-enabled/default の最後に以下を追加します。

# websocket proxy
server {

    # general server parameters
    listen                      50081;
    server_name                 【SSL証明書作成時に入力したドメイン名】;

    # SSL configuration
    ssl                         on;
    ssl_certificate             /etc/nginx/cert/cert_chain.pem;
    ssl_certificate_key         /etc/nginx/cert/privkey.pem;
    ssl_session_cache           builtin:1000  shared:SSL:10m;
    ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers                 HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers   on;

    location /m5core2/ {

      # websocket upgrade tunnel configuration
      proxy_pass                    http://【転送先のIPアドレス】:81/;
      proxy_http_version            1.1;
      proxy_set_header Upgrade      $http_upgrade;
      proxy_set_header Connection   "Upgrade";
    }
}

nginxを再起動します。

# /etc/init.d/nginx restart

これで、Web Proxyサーバが立ち上がり、listenで指定したポート番号(50081)で待ちうけ、proxy_passで指定したURL(http://【転送先のIPアドレス】:81】)に転送されるようになります。

location を /m5core2 としていますので、WebSocketサーバの接続先は以下のようになります。
 wss://【NginxサーバのIPアドレス】:50081/m5core2
複数の転送先やポートを指定したい場合は、locationの名前を変えて複数指定してください。

参考

 SSL証明書を取得しよう

以上

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1