httpd - 多个端口上的反向代理
httpd - reverse proxy on multiple ports
我想要做的是采取以下措施:
http://localhost:10000
http://localhost:11000
http://localhost:12000
并按如下方式分别路由它们:
http://my-app (this is port 10000 traffic)
http://my-app/app (this is port 11000 traffic)
http://my-app/blog (this is port 12000 traffic)
这是我的 conf.d 文件 -
<VirtualHost *:80>
ServerName my-app.domain.com
ServerAlias my-app
Redirect / https://my-app.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName my-app.domain.com
ServerAlias my-app
Include ssl/default/ssl.cfg
RewriteEngine On
ProxyRequests Off
ProxyPreserveHost On
RemoteIPHeader X-Forwarded-For
RequestHeader set X-FORWARDED-SSL on
RequestHeader set X-FORWARDED_PROTO https
ProxyTimeout 900
TimeOut 900
RewriteRule ^$ / [R]
ProxyPass / http://localhost:10000/
ProxyPassReverse / http://localhost:10000/
RewriteRule ^/app/(.*) http://localhost:11000/ [P,L]
ProxyPassReverse /app/ http://localhost:11000
</VirtualHost>
重定向对初始端口有效,但对流向端口 11000 的流量无效。我确定我在做一些愚蠢的事情,但我不知道是什么。
使用proxypass需要先指定最多"specific"个路径,
首先指定 /blog/ /app/,然后指定 /。如果您不这样做,ProxyPAs / 将覆盖其他人。
RewriteRule ^$ / [R]
<-- 不会发生,因为在虚拟主机中只有 ^/$ 会匹配并且 ^/$ 已经是 /,所以它不起作用,如果它会循环。
另外,不要使用 mod_rewrite,因为不需要用它来代理,或者至少你没有做任何 proxypass 或 proxypassmatch 单独做不到的事情,并且在使用 ProxyPass 时匹配斜杠 (如果在目标中的源添加中有一个结束斜杠,如果没有,则不要,否则来自后端的响应可能会发生意外行为),并且如前所述,首先指定最具体的路径:
因此,完全删除 mod_rewrite 指令并:
ProxyPass /app/ http://localhost:11000/
ProxyPassReverse /app/ http://localhost:11000/
ProxyPass /blog/ http://localhost:12000/
ProxyPassReverse /blog/ http://localhost:12000/
ProxyPass / http://localhost:10000/
ProxyPassReverse / http://localhost:10000/
我想要做的是采取以下措施:
http://localhost:10000
http://localhost:11000
http://localhost:12000
并按如下方式分别路由它们:
http://my-app (this is port 10000 traffic)
http://my-app/app (this is port 11000 traffic)
http://my-app/blog (this is port 12000 traffic)
这是我的 conf.d 文件 -
<VirtualHost *:80>
ServerName my-app.domain.com
ServerAlias my-app
Redirect / https://my-app.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName my-app.domain.com
ServerAlias my-app
Include ssl/default/ssl.cfg
RewriteEngine On
ProxyRequests Off
ProxyPreserveHost On
RemoteIPHeader X-Forwarded-For
RequestHeader set X-FORWARDED-SSL on
RequestHeader set X-FORWARDED_PROTO https
ProxyTimeout 900
TimeOut 900
RewriteRule ^$ / [R]
ProxyPass / http://localhost:10000/
ProxyPassReverse / http://localhost:10000/
RewriteRule ^/app/(.*) http://localhost:11000/ [P,L]
ProxyPassReverse /app/ http://localhost:11000
</VirtualHost>
重定向对初始端口有效,但对流向端口 11000 的流量无效。我确定我在做一些愚蠢的事情,但我不知道是什么。
使用proxypass需要先指定最多"specific"个路径, 首先指定 /blog/ /app/,然后指定 /。如果您不这样做,ProxyPAs / 将覆盖其他人。
RewriteRule ^$ / [R]
<-- 不会发生,因为在虚拟主机中只有 ^/$ 会匹配并且 ^/$ 已经是 /,所以它不起作用,如果它会循环。
另外,不要使用 mod_rewrite,因为不需要用它来代理,或者至少你没有做任何 proxypass 或 proxypassmatch 单独做不到的事情,并且在使用 ProxyPass 时匹配斜杠 (如果在目标中的源添加中有一个结束斜杠,如果没有,则不要,否则来自后端的响应可能会发生意外行为),并且如前所述,首先指定最具体的路径:
因此,完全删除 mod_rewrite 指令并:
ProxyPass /app/ http://localhost:11000/
ProxyPassReverse /app/ http://localhost:11000/
ProxyPass /blog/ http://localhost:12000/
ProxyPassReverse /blog/ http://localhost:12000/
ProxyPass / http://localhost:10000/
ProxyPassReverse / http://localhost:10000/