Apache ProxyPass 仅将一个文件发送到不同的本地主机端口?

Apache ProxyPass 仅将一个文件发送到不同的本地主机端口?

我还没能找到这个确切问题的解决方案:

  • 我有一个应用程序在 localhost:3000 上运行
  • 我为 localhost:3000 应用程序设置了代理,使用 qa.mysite.com(用于其他 js)
  • 我添加了在 localhost:3333 上运行的第二个应用程序

第一个应用程序需要引用一些 localhost:3333 css 和 js 文件:

<link rel="stylesheet" href="/css/my-css.css"/>
<script src="/js/my-js.js" defer></script>

我尝试了这个conf(和变体):

<VirtualHost *:443>
    ServerName qa.mysite.com
    SSLEngine on
    SSLProxyEngine on
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
    SSLCertificateFile "/etc/apache2/server.crt"
    SSLCertificateKeyFile "/etc/apache2/server.key"
    ProxyVia Full
    ProxyPreserveHost On
    ProxyPass "/" "http://localhost:3000/"
    ProxyPassReverse "/" "http://localhost:3000/"

    ProxyPass "/css/my-css.css" "http://localhost:3333/css/my-css.css"
    ProxyPassReverse "/css/my-css.css" "http://localhost:3333/css/my-css.css"
    ProxyPass "/js/my-js.js" "http://localhost:3333/js/my-js.js"
    ProxyPassReverse "/js/my-js.js" "http://localhost:3333/js/my-js.js"

</VirtualHost>
  • 点击 qa.mysite.com 会产生在 localhost:3000 上运行的第一个应用程序。
  • 但也有 CORS 错误或拒绝连接。

知道我做错了什么吗?:)

答案1

您需要先设置更具体的 ProxyPass 规则。“/css/my-css.css”将首先评估“/”。由于这是正确的,您将获得端口 3000。

将 ProxyPass 放在最后“/”,因为它是全包的后备。

<VirtualHost *:443>
    ServerName qa.mysite.com
    SSLEngine on
    SSLProxyEngine on
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
    SSLCertificateFile "/etc/apache2/server.crt"
    SSLCertificateKeyFile "/etc/apache2/server.key"
    ProxyVia Full
    ProxyPreserveHost On

        #Specific /css
    ProxyPass "/css/my-css.css" "http://localhost:3333/css/my-css.css"
    ProxyPassReverse "/css/my-css.css" "http://localhost:3333/css/my-css.css"

        #Specific /js
    ProxyPass "/js/my-js.js" "http://localhost:3333/js/my-js.js"
    ProxyPassReverse "/js/my-js.js" "http://localhost:3333/js/my-js.js"

       #Catch ALL for servername
    ProxyPass "/" "http://localhost:3000/"
    ProxyPassReverse "/" "http://localhost:3000/"
</VirtualHost>

相关内容