plex的Haproxy重定向配置?
希望有人能帮我:) 我尝试将HAProxy配置为丛重定向,但尚未找到解决方案。 因此,基本上要运行plex主页,您应该转到=>iPAddress:PORT/web,它将重定向到iPAddress:PORT/web/index.html 我做了这样的重定向:plex的Haproxy重定向配置?,proxy,load-balancing,reverse-proxy,haproxy,plex,Proxy,Load Balancing,Reverse Proxy,Haproxy,Plex,希望有人能帮我:) 我尝试将HAProxy配置为丛重定向,但尚未找到解决方案。 因此,基本上要运行plex主页,您应该转到=>iPAddress:PORT/web,它将重定向到iPAddress:PORT/web/index.html 我做了这样的重定向: use_backend plex if { hdr_beg(Host) -i plex. } backend plex server plex localhost:32400 check 没关系,我可以加入plex=>plex.m
use_backend plex if { hdr_beg(Host) -i plex. }
backend plex
server plex localhost:32400 check
没关系,我可以加入plex=>plex.mydomain.tld/web
但是我希望能够通过这个URL=>plex.mydomain.tld加入plex
我试图添加这一行:
reqrep ^([^\ :]*)\ /(.*) \1\ /web\2
更改很好,我的URL切换到=>plex.mydomain.tld/web/index.html
但我有一个404错误
要从plex.mydomain.tld访问plex,我应该采取什么样的技巧
谢谢 不幸的是,这里的问题与您的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
关键区别在于重定向位置
行,如果未设置标题X-Plex-Device-Name
,该行将从/
重定向到/web/index.html
。您必须检查标题的原因是,plex似乎使用了/
进行其他操作
注意:这个配置就是一个例子,我根本没有测试过
希望能有所帮助。不幸的是,这里的问题与您的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
关键区别在于重定向位置
行,如果未设置标题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)。我想回应一下,我使用了JamesStewy提供的解决方案,它工作了,只是做了一些小的修改
redirect location http://plex.mydomain.tld/web/index.html code 301 if no_plex_header root_dir plex
至少,这对我来说是必要的(运行haproxy 1.7.2)。找到了一些帮助我解决问题的信息:
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凭据,可以将其删除。找到了一些帮助我解决问题的信息:
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凭据,则可以将其删除