Nginx 映射转换为 Apache2

问题描述 投票:0回答:1

我正在努力寻找答案,是否可以将如下所示的 Nginx 映射转换为 Apache2 (2.4) 等效项?

server {
    [...]
    location ~* ^(/_matrix|/_synapse) {
        proxy_pass http://$matrix_worker_upstream$request_uri;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        client_max_body_size 50M;
        proxy_http_version 1.1;
    }
    [...]
}
upstream synapse {
    server 127.0.0.1:8008;
}
upstream generic-worker {
    ip_hash;
    server 127.0.0.1:8008;
    server 127.0.0.1:8081;
}
upstream media_repository {
    server 127.0.0.1:8085;
}
map $uri $matrix_worker_upstream {
    default synapse;
    ~^/_matrix/client/(r0|v3)/sync$ generic-worker;
    ~^/_matrix/client/(api/v1|r0|v3)/events$ generic-worker;
    ~^/_matrix/client/(api/v1|r0|v3)/initialSync$ generic-worker;
    ~^/_matrix/client/(api/v1|r0|v3)/rooms/[^/]+/initialSync$ generic-worker;
    [...]
}

如果我理解得好的话,上游可以像这样转换为代理平衡器吗?

<Proxy balancer://generic-worker>
    BalancerMember http://127.0.0.1:8080
    BalancerMember http://127.0.0.1:8081
</Proxy>

但我不知道如何转换地图部分? (地图里有很多网址)

仅供参考,这是 Synapse (Matrix) 与工作线程的配置。为什么选择 Apache2?这是为了避免使用 Matrix 对 Shibboleth 进行额外配置。

nginx nginx-config apache2.4 matrix-synapse
1个回答
0
投票

这是我得到的,即使出现其他错误,似乎也能工作......

RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e"
RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
RequestHeader set Host expr=%{HTTP_HOST}

<Proxy balancer://generic_worker>
    BalancerMember http://127.0.0.1:8008
    BalancerMember http://127.0.0.1:8081
</Proxy>

<Proxy balancer://media_repository>
    BalancerMember http://127.0.0.1:8085
</Proxy>

ProxyPassMatch /_matrix/client/(r0|v3)/sync(.*) balancer://generic_worker/_matrix/client/$1/sync$2 nocanon
ProxyPassReverse /_matrix/client/(r0|v3)/sync(.*) balancer://generic_worker/_matrix/client/$1/sync$2

ProxyPassMatch /_matrix/client/(api/v1|r0|v3)/events(.*) balancer://generic_worker/_matrix/client/$1/events$2 nocanon
ProxyPassReverse /_matrix/client/(api/v1|r0|v3)/events(.*) balancer://generic_worker/_matrix/client/$1/events$2

ProxyPassMatch /_matrix/client/(api/v1|r0|v3)/initialSync(.*) balancer://generic_worker/_matrix/client/$1/initialSync$2 nocanon
ProxyPassReverse /_matrix/client/(api/v1|r0|v3)/initialSync(.*) balancer://generic_worker/_matrix/client/$1/initialSync$2

ProxyPassMatch /_matrix/client/(api/v1|r0|v3)/rooms/(.*)/initialSync(.*) balancer://generic_worker/_matrix/client/$1/rooms/$2/initialSync$3 nocanon
ProxyPassReverse /_matrix/client/(api/v1|r0|v3)/rooms/(.*)/initialSync(.*) balancer://generic_worker/_matrix/client/$1/rooms/$2/initialSync$3


[...]

# defaut master

ProxyPassMatch /_matrix/(.*) http://127.0.0.1:8008/_matrix/$1 nocanon
ProxyPassReverse /_matrix/(.*) http://127.0.0.1:8008/_matrix/$1

ProxyPass /_synapse/client(.*) http://127.0.0.1:8008/_synapse/client$1 nocanon
ProxyPassReverse /_synapse/client(.*) http://127.0.0.1:8008/_synapse/client$1

上游转换为代理平衡器,但每个映射元素都转换为 proxypass 规则。应该有办法缩短这个时间......

此外,需要启用 Apache mods :

a2enmod headers
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer
a2enmod lbmethod_byrequests
© www.soinside.com 2019 - 2024. All rights reserved.