使用 Play 实现 Apache2 反向代理

使用 Play 实现 Apache2 反向代理

我尝试配置 apache2 反向代理:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass           /stag http://127.0.0.1:9001
    ProxyPassReverse    /stag http://127.0.0.1:9001

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

我的 Play 实例在 运行localhost:9001,当我尝试调用它时成功,并且尝试调用 时http://192.168.1.10:9001无法加载 play 项目文件夹中的所有文件(图像、css、js)。当我检查网址(在谷歌浏览器上使用 F12)时,它应该显示。publichttp://192.168.1.10/staghttp://192.168.1.10/public/images/logo.pnghttp://192.168.1.10/stag/public/images/logo.png

我的问题,我的 apache2 反向代理配置有问题吗?

答案1

Apache 配置很好,问题出在你的 HTML 内容上。

如果您的 HTML 指向根目录..

<img src="/public/images/logo.png">

然后它指向根目录,并且/stag您的代理实际上添加的前缀将被忽略。您的ProxyPass代理ProxyPassReverse不会为您翻译此内容。

另一方面,如果您允许路径是相对的......

<img src="public/images/logo.png">

然后,相对路径被保留并且资源可以加载。

还有一些类似的工具mod_proxy_html试图翻译 HTML 文件中的路径,但它们并非万无一失;更好的选择是使内容在代理内工作。

相关内容