Как настроить apache для plex за поддоменом и https 443?

Это то, что у меня сейчас есть для apache и работает, но как я могу добавить, что http перенаправляется на https для plex?

<VirtualHost *:80>
    ServerName plex.mydomain.com

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / http://localhost:32400/
    ProxyPassReverse / http://localhost:32400/

    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^/web
    RewriteCond %{HTTP:X-Plex-Device} ^$
    RewriteRule ^/$ /web/$1 [R,L]
</VirtualHost>

Вот как это работает для других поддоменов, но это не работает для Plex:

<VirtualHost *:80>
    ServerName somesub.mydomain.com

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^somesub.mydomain.com
    RewriteRule (.*) https://%{SERVER_NAME} [R,L]
</VirtualHost>

<VirtualHost *:443>
    ServerName somesub.mydomain.com

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / http://localhost:5555/
    ProxyPassReverse / http://localhost:5555/
</VirtualHost>

2 ответа

Это то, что я использую сейчас и работает (Ubuntu 17.04, Apache2.4)

<VirtualHost *:80>
  ServerName my.sub.domain.com
  Redirect permanent / https://my.sub.domain.com/
</VirtualHost>

<IfModule mod_ssl.c>
  <VirtualHost *:443>
    ServerName my.sub.domain.com
    ServerAlias ""
    Options -Includes -ExecCGI

    RewriteEngine On
    RewriteCond %{THE_REQUEST} !HTTP/1.1$
    RewriteRule .* - [F]

    LimitRequestBody 512000

    SSLEngine              On
    SSLCertificateFile    /etc/letsencrypt/live/my.sub.domain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/my.sub.domain.com/privkey.pem
    SSLProtocol           +TLSv1.2

    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
    Header always set X-Frame-Options DENY
    FileETag None
    TraceEnable off
    #Header edit Set-Cookie ^(.*)$ ;HttpOnly;Secure
    Header set X-XSS-Protection "1; mode=block"
    Timeout 60

    <Location /:/websockets/notifications>
        ProxyPass wss://localhost:32400/:/websockets/notifications 
        ProxyPassReverse wss://localhost:32400/:/websockets/notifications
    </Location>

    <Proxy *>
    Order deny,allow
    Allow from all
    </Proxy>

    ProxyRequests Off
    ProxyPreserveHost On
    SSLProxyEngine On
    RequestHeader set Front-End-Https "On"

    ProxyPass / http://localhost:32400/
    ProxyPassReverse / http://localhost:32400/

    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^/web
    RewriteCond %{HTTP:X-Plex-Device} ^$
    RewriteCond %{REQUEST_METHOD} !^(OPTIONS)$
    RewriteRule ^/$ /web/$1 [R,L]

  </VirtualHost>
</IfModule>

Вам нужно будет изменить localhost (вероятно нет) и my.sub.domain.com к вашим собственным значениям и сгенерируйте сертификаты ssl перед перезапуском службы apache (я использовал LetsEncrypt)

Эта конфигурация vhost - это то, что я адаптировал из многочисленных постов (некоторые здесь, некоторые с форума plex). Может быть не полным или не оптимизированным, но это работает

Для более подробной информации / альтернатив, посетите https://forums.plex.tv/

Ответ Алекса хороший, но все, что вам нужно для того, чтобы перенаправить трафик с 80 на 443, - это строки кода, добавленные в ваш файл plex.conf:

<VirtualHost *:80>
    ServerName plex.mydomain.com
    DocumentRoot /var/www/html
    ServerAdmin admin@plex.mydomain.com
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =plex.mydomain.com
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Для справки вот мой файл plex apache2 conf:

<IfModule mod_ssl.c>
        DEFINE plex_url localhost
        DEFINE public_url plex.mydomain.com
        ServerTokens Prod
        SSLStaplingCache "shmcb:${APACHE_LOG_DIR}/stapling-cache(150000)"
        SSLSessionCache "shmcb:${APACHE_LOG_DIR}/ssl_scache(512000)"
        SSLSessionCacheTimeout 300
<VirtualHost *:80>
        ServerName ${public_url}
        DocumentRoot /var/www/html
        ServerAdmin admin@plex.mydomain.com
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =${public_url}
        RewriteCond %{HTTPS} off
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:443>
        ServerName ${public_url}
        DocumentRoot /var/www/html
        ServerAdmin admin@plex.mydomain.com
        SSLCertificateFile /etc/letsencrypt/live/path/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/path/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
        Options -Includes -ExecCGI
        RewriteEngine On
        RewriteCond %{THE_REQUEST} !HTTP/1.1$
        RewriteRule .* - [F]
        LimitRequestBody 512000
        FileETag None
        TraceEnable off
        Timeout 60
        <Location /:/websockets/notifications>
                ProxyPass wss://${plex_url}:32400/:/websockets/notifications
                ProxyPassReverse wss://${plex_url}:32400/:/websockets/notifications
        </Location>
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyTimeout 600
        ProxyReceiveBufferSize 4096
        SSLProxyEngine On
        RequestHeader set Front-End-Https "On"
        ServerSignature Off
        SSLCompression Off
        SSLUseStapling On
        SSLStaplingResponderTimeout 5
        SSLStaplingReturnResponderErrors Off
        SSLSessionTickets Off
        RequestHeader set X-Forwarded-Proto 'https' env=HTTPS
        Header always set Strict-Transport-Security "max-age=15552000; preload"
        Header always set X-Content-Type-Options nosniff
        Header always set X-Robots-Tag none
        Header always set X-XSS-Protection "1; mode=block"
        Header always set X-Frame-Options "SAMEORIGIN"
        Header always set Referrer-Policy "same-origin"
        #Header always set Content-Security-Policy "default-src 'https:'; script-src '${public_url}'; style-src 'unsafe-inline'; img-src 'unsafe-inline';"
        ### Use next two for very secure connections ###
        SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
        SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
        ### Comment out above two and uncomment out next two lines if you want more support ###
        #SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA128:DHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA128:ECDHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA128:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA384:AES128-GCM-SHA128:AES128-SHA128:AES128-SHA128:AES128-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4
        #SSLProtocol All -SSLv2 -SSLv3 -TLSv1
        SSLHonorCipherOrder On

        ProxyPass / http://${plex_url}:32400/
        ProxyPassReverse / http://${plex_url}:32400/
        ProxyPass /:/ ws://${plex_url}:32400/:/
        ProxyPassReverse /:/ ws://${plex_url}:32400/:/
        ProxyPass /:/ wss://${plex_url}:32400/:/
        ProxyPassReverse /:/ wss://${plex_url}:32400/:/

        RewriteEngine on
        RewriteCond %{REQUEST_URI} !^/web
        RewriteCond %{HTTP:X-Plex-Device} ^$
        RewriteCond %{REQUEST_METHOD} !^(OPTIONS)$
        RewriteCond %{QUERY_STRING} (^|&)X-Plex-Device=(&|$) [OR]
        RewriteCond %{QUERY_STRING} !(^|&)X-Plex-Device=
        RewriteRule ^/$ /web/$1 [R,L]
</VirtualHost>
</IfModule>
Другие вопросы по тегам