Конфигурация перенаправления Haproxy для плекса?
Надеюсь, кто-нибудь может мне помочь:)
Я пытаюсь настроить HAProxy для перенаправления плекса, но пока не нашел решения. Таким образом, чтобы запустить домашнюю страницу plex, вы должны перейти на => IPADRESS:PORT/web, который перенаправляет на IPADRESS:PORT/web/index.html.
Я сделал такой вид перенаправления:
use_backend plex if { hdr_beg(Host) -i plex. }
backend plex
server plex localhost:32400 check
Это нормально, я могу присоединиться к plex => plex.mydomain.tld/web
Но я хотел бы иметь возможность присоединиться к plex с этим URL => plex.mydomain.tld
Я пытался добавить эту строку:
reqrep ^([^\ :]*)\ /(.*) \1\ /web\2
Изменение в порядке, мой URL-адрес переключиться на => plex.mydomain.tld/web/index.html
Но у меня есть 404 ОШИБКА...
Какой трюк я должен сделать, чтобы получить доступ к plex из plex.mydomain.tld?
Спасибо!
3 ответа
Нашел информацию, которая помогла мне понять это:
global
log 127.0.0.1 syslog
maxconn 1000
user haproxy
group haproxy
daemon
tune.ssl.default-dh-param 4096
ssl-default-bind-options no-sslv3 no-tls-tickets
ssl-default-bind-ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
defaults
log global
mode http
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
option contstats
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout check 10s
listen stats
bind *:9090
mode http
maxconn 10
stats enable
stats hide-version
stats realm Haproxy\ Statistics
stats uri /
stats auth admin:admin
frontend ALL
bind *:80
bind *:443 ssl crt /etc/haproxy/certs/nomercy.myqnapcloud.com.pem crt /etc/haproxy/certs/nomercy.myqnapcloud.com.pem
mode http
# Define path for lets encrypt
acl is_letsencrypt path_beg -i /.well-known/acme-challenge/
use_backend letsencrypt if is_letsencrypt
# Define hosts
acl host_website hdr(host) -i nomercy.myqnapcloud.com
# Direct hosts to backend
use_backend website if host_website
# Redirect port 80 to 443
# But do not redirect letsencrypt since it checks port 80 and not 443
redirect scheme https code 301 if !{ ssl_fc } !is_letsencrypt
backend letsencrypt
server letsencrypt 127.0.0.1:8888
backend website
balance roundrobin
option httpchk GET /check
cookie SERVERID insert indirect nocache
http-check expect rstring ^UP$
default-server inter 3s fall 3 rise 2
server server1 192.168.2.151:8888 check
server server2 192.168.2.152:8888 check
server server3 192.168.2.153:8888 check
listen plex
bind *:32400 ssl crt /etc/haproxy/certs/nomercy.myqnapcloud.com.pem crt /etc/haproxy/certs/nomercy.myqnapcloud.com.pem
balance roundrobin
option httpchk GET /check
http-check expect rstring ^UP$
default-server inter 3s fall 3 rise 2
server server1 192.168.2.149:32400 check port 8888
server server2 192.168.2.148:32400 check port 8888
server server3 192.168.2.147:32400 check port 8888
Вы можете удалить учетные данные ssl, если они не установлены.
Проблема здесь, к сожалению, не имеет ничего общего с вашей конфигурацией HAProxy. Вместо этого именно Plex вызывает проблему.
пример
С вашей конфигурацией, когда вы идете в plex.mydomain.tld
HAProxy добавляет в /web
и в результате Plex получает следующий URL: plex.mydomain.tld/web
, Это верно, однако Plex затем захочет переслать браузер на plex.mydomain.tld/web/index.html
, Но когда браузер отправляет запрос или этот URL, HAProxy входит и добавляет этот дополнительный /web
снова и результирующий URL, который установлен в Plex plex.mydomain.tld/web/web/index.html
который не существует и, следовательно, ошибка 404 вы получили.
Пока собираюсь plex.mydomain.tld/index.html
может работать, я предполагаю, что все ссылки с этой страницы на любую другую страницу не будут работать из-за проблемы, скажем.
Чтобы решить это, вы могли бы
- Просмотрите конфигурацию Plex, чтобы увидеть, возможно ли запустить его без
/web
, Исходя из этого, вы можете настроить HAProxy примерно так:
frontend http mode http bind *:80 acl plex hdr_beg(Host) -i plex. acl root_dir path_reg ^$|^/$ acl no_plex_header req.hdr_cnt(X-Plex-Device-Name) -i 0 redirect location http://plex.mydomain.tld/web/index.html 301 if no_plex_header root_dir plex use_backend plex if plex backend plex server plex localhost:32400 check
Ключевым отличием является
redirect location
линия, которая будет перенаправлять с/
в/web/index.html
если заголовокX-Plex-Device-Name
не установлен Причина, по которой вы должны проверить заголовок, заключается в том, что кажется, что plex использует/
для чего-то другого.Примечание. Этот конфиг является примером, и я его вообще не тестировал.
Надеюсь, это поможет.
Я хочу повторить, что я использовал решение, предоставленное JamesStewy, и оно работало, с незначительным исправлением;
redirect location http://plex.mydomain.tld/web/index.html code 301 if no_plex_header root_dir plex
По крайней мере, это было необходимо для меня (работает haproxy 1.7.2).