Как настроить 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>