Baidupcs-web 在 apache2 上的反向代理配置

Author Avatar
Breakertt 8月 20, 2019

此处省略一万句脏话。

最近被安利了一个webui版本的baidupcs-go,叫做BiaduPCS-Web,据说不错我就也来用用。

安装很容易,使用了GitHub上的一键脚本:https://github.com/user1121114685/baidupcsweb

但是服务起来之后用的是5299端口,不太优雅对吧?那我就想着做个反代好了,也就是本文的重点了。

一开始我是想配一个类似于”http://server/pan/", 这样的子目录的反向代理的,但是这个软件不支持baseURL的配置以及路径都是写死的,那就只能单开一个域名给这个软件了。如果您使用的http服务器是nginx请看这里:请问如何用nginx进行反向代理,caddy我也不太清楚,反正这篇文章讲的只有apache的。

这个软件有部分链接用的不是http,而是websocket,这就是问题所在了,查了不少资料,我们需要先开启用几个插件:

a2enmod proxy
a2enmod proxy_http
a2enmod rewrite
sudo systemctl restart apache2

然后添加如下的新站点,只开了443的,80请自己改,内容如下:

<VirtualHost *:443>
    ServerName pan.abc.com ######

    SSLCertificateFile  /etc/apache2/ssl/pan/cert.pem ######
    SSLCertificateKeyFile /etc/apache2/ssl/pan/key.pem ######
    SSLCertificateChainFile /etc/apache2/ssl/pan/chain.pem ######

    SSLEngine on

    ProxyPreserveHost On
    ProxyRequests Off
    RewriteEngine On

    RewriteCond %{HTTP:Upgrade} = websocket [NC]
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
    RewriteRule /ws(.*)           ws://localhost:5299/ws$1 [P,L]
    RequestHeader set X-Forwarded-Proto "https"

    <Location /ws>
        Require all granted
        ProxyPassReverse ws://127.0.0.1:5299/ws
    </Location>

    <Location />
        Require all granted
        ProxyPass http://localhost:5299/
        ProxyPassReverse /
    </Location>

</VirtualHost>

简单讲一下,这边把当http请求需要升级为ws请求时,把反代的头改成了ws,然后就可以成功访问了。