Plex: Nginx Reverse Proxy

音楽を管理するために Plex Media Server を構築した。これをVPS経由でインターネット側からアクセス可能なようにする。

VPS (nginx) – OpenVPN – Plex Media Server

Plex Media Serverへのアクセスには https://music.example.com/ でアクセスすることとする。設定はnginxとPlex Media Serverの両方に行う必要があるようだ。まずはnginxの設定を行う。※設定は音楽のストリーミングが行えることを確認しているが、動画のストリーミングは未確認

 # vi /etc/nginx/conf.d/plex.conf

upstream plex-server {
    server 192.168.100.1:32400;
    keepalive 4;
}

server {
  listen 443 ssl http2;
  server_name music.example.com;

  location / {
      proxy_pass https://plex-server;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_redirect off;
      proxy_set_header Host $http_host;
      proxy_buffers 32 4k;
      proxy_http_version 1.1;
      proxy_no_cache $cookie_session;
      proxy_set_header    Host  $host;
      proxy_set_header    Upgrade  $http_upgrade;
      #proxy_set_header    Connection  "upgrade";
      proxy_set_header    Connection  "";
      proxy_set_header    X-Real-IP  $remote_addr;
      proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
      proxy_set_header    X-Forwarded-Host  $server_name;
      proxy_set_header    X-Forwarded-Proto  https;
      proxy_set_header    X-Forwarded-Ssl  on;
      proxy_cache_bypass $cookie_session;
      proxy_hide_header X-Frame-Options;
      proxy_read_timeout 240;
      proxy_send_timeout 240;
      client_max_body_size 10m;
      client_body_buffer_size 128k;
      send_timeout 5m;
  }

  ## SSL 設定は省略 (SSL configuration has been omitted)
}

Plexのアプリを使ってのアクセスが行えなかったため採用していないが、https://example.com/music/のようにplex用のサブドメインを用意しない場合は次のような設定とする。

server {
  listen 443 ssl http2;
  server_name example.com;
 
 if ($http_referer ~ /music/) {
      rewrite ^/web/(.*) /music/web/$1? redirect;
  }
  location /music/ {
      proxy_pass https://plex-server/;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_redirect off;
      proxy_set_header Host $http_host;
      proxy_buffers 32 4k;
      proxy_http_version 1.1;
      proxy_no_cache $cookie_session;
      proxy_set_header    Host  $host;
      proxy_set_header    Upgrade  $http_upgrade;
      proxy_set_header    Connection  "";
      proxy_set_header    X-Real-IP  $remote_addr;
      proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
      proxy_set_header    X-Forwarded-Host  $server_name;
      proxy_set_header    X-Forwarded-Proto  https;
      proxy_set_header    X-Forwarded-Ssl  on;
      proxy_cache_bypass $cookie_session;
      proxy_hide_header X-Frame-Options;
      proxy_read_timeout 240;
      proxy_send_timeout 240;

      # upload file-size max, post-buffer size
      client_max_body_size 10m;
      client_body_buffer_size 128k;

      send_timeout 5m;
  }
  ## SSL 設定は省略 (SSL configuration has been omitted)
}

nginxを再起動すればhttps://music.example.comでローカルに建てたPlex Media Serverにアクセス可能となる。

PlexのアプリからアクセスさせるにはPlex Media Server側での設定も必要となる。

plex側からnginx経由でコンテンツにアクセスできるようにURLを設定する

この場合、Plex Media ServerのRemote Access設定はDisableのままで問題ない。