【问题标题】:httpd - reverse proxy on multiple portshttpd - 多个端口上的反向代理
【发布时间】:2017-05-14 03:05:00
【问题描述】:

我想要做的是采取以下措施:

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/$1 [P,L]
  ProxyPassReverse /app/ http://localhost:11000

</VirtualHost>

重定向适用于初始端口,但不适用于前往端口 11000 的流量。我确定我在做一些愚蠢的事情,但我不知道是什么。

【问题讨论】:

    标签: apache httpd.conf conf.d


    【解决方案1】:

    使用proxypass时需要先指定最“具体”的路径, 首先指定 /blog/ /app/ 然后 /。如果你不这样做,ProxyPAss / 将覆盖其他人。

    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/
    

    【讨论】:

    • +1 我更改了 ProxyPass 的位置,以使最具体的路径出现在“ProxyPass / ...”之前。经过数小时浏览文档后,这解决了我的问题
    猜你喜欢
    • 2020-01-06
    • 2017-02-07
    • 2015-12-13
    • 2022-01-07
    • 2012-10-25
    • 2012-11-04
    • 1970-01-01
    • 2020-08-12
    • 2013-09-04
    相关资源
    最近更新 更多