希望有人能帮我:)
我尝试为plex重定向配置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 => plex.mydomain.tld
我试图添加这一行:
reqrep ^([^ :]*) /(.*) 1 /web2
更改很好,我的 URL 切换到 => plex.mydomain.tld/web/index.html
但是我有一个 404 错误...
我应该做什么样的技巧来从plex.mydomain.tld访问plex?
谢谢!
找到一些帮助我弄清楚的信息:
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
,并且设置为 Plex 的结果 url 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
行,如果未设置标头X-Plex-Device-Name
,它将从/
重定向到/web/index.html
。您必须检查标头的原因是,plex 似乎将/
用于其他内容。注意:此配置是一个示例,我根本没有测试过
希望有帮助。
回应一下,我使用了 JamesStewy 提供的解决方案并且它有效,但进行了细微的更正;
redirect location http://plex.mydomain.tld/web/index.html code 301 if no_plex_header root_dir plex
至少,这对我来说是必要的(运行haproxy 1.7.2)。