希望有人可以帮助我:)。
我尝试为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 /网络
但我希望能够通过此网址加入plex => plex.mydomain.tld
我尝试添加此行:
reqrep ^([^\ :]*)\ /(.*) \1\ /web\2
更改很好,我的网址切换为=> plex.mydomain.tld /网络/ index.html中
但我有404错误......
从plex.mydomain.tld访问plex我应该采取什么样的技巧?
谢谢!
答案 0 :(得分:1)
找到一些帮助我弄明白的信息:
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凭据,则可以将其删除。
答案 1 :(得分:0)
遗憾的是,此问题与您的HAProxy配置无关。相反,它是导致问题的Plex。
示例强>
根据您的配置,当您转到plex.mydomain.tld
时,HAProxy正在添加/web
,因此Plex会获得以下网址:plex.mydomain.tld/web
。这是正确的,但Plex将要将浏览器转发到plex.mydomain.tld/web/index.html
。但是当浏览器发送请求或该网址时,HAProxy会介入并再次添加额外的/web
,并且设置为Plex的结果网址为plex.mydomain.tld/web/web/index.html
,而且不存在,因此404你得到的错误。
虽然转到plex.mydomain.tld/index.html
可能会有效,但我认为从该页面到任何其他页面的所有链接都因为说出问题而无法正常工作。
要解决此问题,您可以
/web
之外运行它。从here获取灵感,您可以配置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似乎使用/
来表示其他内容。
注意:此配置是一个示例,我还没有对此进行过测试
希望有所帮助。
答案 2 :(得分:0)
我想回应一下,我使用了JamesStewy提供的解决方案,并通过小修正工作;
redirect location http://plex.mydomain.tld/web/index.html code 301 if no_plex_header root_dir plex
至少,这对我来说是必要的(运行haproxy 1.7.2)。