Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

我如何设置 OpenLiteSpeed 以反向代理到内部网络上的 Nextcloud?

令人惊讶的是,在 Habré 上搜索 OpenLiteSpeed 没有任何结果! 我赶快纠正这种不公平,因为 LSWS 是一个不错的网络服务器。 我喜欢它的速度和精美的 Web 管理界面:

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

尽管 OpenLiteSpeed 最著名的是 WordPress“加速器”,但在今天的文章中,我将展示它的一个相当具体的用法。 即请求的反向代理(reverse proxy)。 你说这个用nginx比较普遍? 我会同意的。 但这让我们爱上了 LSWS!

代理是可以的,但是在哪里? 同样出色的服务 - Nextcloud。 我们使用 Nextcloud 来创建私有的“文件共享云”。 对于每个客户端,我们使用 Nextcloud 分配一个单独的 VM,我们不想将它们暴露在“外部”。 相反,我们通过一个通用的反向代理代理请求。 该解决方案允许:
1) 从 Internet 上删除存储客户端数据的服务器,并且
2)保存IP地址。

该图如下所示:

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

很明显,该方案被简化了,因为Web 服务基础结构的组织不是今天文章的主题。

同样在这篇文章中,我将省略 nextcloud 的安装和基本配置,特别是因为 Habré 有关于这个主题的资料。 但我肯定会展示设置,否则 Nextcloud 将无法在代理后面工作。

给定:
Nextcloud 安装在主机 1 上并配置为通过 http(无 SSL)工作,只有一个本地网络接口和一个“灰色”IP 地址 172.16.22.110。
让我们在主机 2 上配置 OpenLiteSpeed。它有两个接口,外部(查看 Internet)和内部,网络上的 IP 地址为 172.16.22.0/24
主机2的对外接口IP地址为DNS名称cloud.connect.link

问题:
通过链接从 Internet 获取 'https://cloud.connect.link' (SSL) 到内部网络上的 Nextcloud。

  • 在 Ubuntu 18.04.2 上安装 OpenLiteSpeed。

让我们添加一个存储库:

wget -O http://rpms.litespeedtech.com/debian/enable_lst_debain_repo.sh |须藤庆典
sudo易于得到更新

安装,运行:

sudo apt-get 安装 openlitespeed
sudo /usr/local/lsws/bin/lswsctrl 开始

  • 最小的防火墙设置。

    须藤 ufw 允许 ssh
    sudo ufw 默认允许传出
    sudo ufw 默认拒绝传入
    sudo ufw允许http
    sudo ufw 允许 https
    sudo ufw 允许来自 你的管理主机 到任何端口 7080
    sudo ufw启用

  • 将 OpenLiteSpeed 设置为反向代理。
    让我们在虚拟主机下创建目录。

    cd /usr/本地/lsws/
    sudo mkdirc cloud.connect.link
    cd cloud.connect.link/
    sudo mkdir {conf,html,日志}
    须藤 chown lsadm:lsadm ./conf/

让我们从 LSWS Web 界面配置虚拟主机。
打开url管理 http://cloud.connect.link:7080
默认登录名/密码:admin/123456

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

添加虚拟主机(虚拟主机 > 添加)。
添加时会出现错误信息——配置文件丢失。 这是正常的,点击Click to create解决。

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

在 General 选项卡中,指定 Document Root(虽然不需要,但没有它配置将不会启动)。 域名(如果未指定)将从我们命名为域名的虚拟主机名中获取。

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

现在是时候记住我们不仅有一个网络服务器,还有一个反向代理。 以下设置将告诉 LSWS 要代理的内容和位置。 在虚拟主机设置中,打开外部应用程序选项卡并添加 Web 服务器类型的新应用程序:

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

指定名称和地址。 您可以指定一个任意名称,但您需要记住它,它将在接下来的步骤中派上用场。 该地址是 Nextcloud 在内部网络中所在的地址:

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

在相同的虚拟主机设置中,打开上下文选项卡并创建代理类型的新上下文:

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

指定参数:URI = /,Web 服务器 = nextcloud_1(上一步的名称)

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

重新启动 LSWS。 这是通过从 Web 界面单击一次完成的,奇迹! (遗传性小鼠携带者对我说话)

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理
Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

  • 我们放证书,配置https。
    获得证书的程序 我们将省略它,同意我们已经拥有它并将密钥放在 /etc/letsencrypt/live/cloud.connect.link 目录中。

让我们创建一个“监听器”(Listeners > Add),我们称它为“https”。 将它指向端口 443 并注意它将是安全的:

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

在 SSL 选项卡中,指定密钥和证书的路径:

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

“侦听器”已创建,现在在虚拟主机映射部分中,我们将向其添加虚拟主机:

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

如果 LSWS 只代理一个服务,则可以完成配置。 但是我们打算用它根据域名向不同的“实例”发送请求。 所有域都有自己的证书。 因此,您需要转到虚拟主机配置并在 SSL 选项卡中再次指定其密钥和证书。 将来,应该为每个新的虚拟主机都这样做。

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

仍然需要配置 url 重写,以便将 http 请求发送到 https。
(顺便说一句,这什么时候结束?是时候让浏览器和其他软件默认转到 https,并在必要时手动转发到 no-SSL)。
打开启用重写并写入重写规则:

重写条件 %{SERVER_PORT} 80
重写规则 ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

由于一个奇怪的误解,无法通过通常的优雅重启来应用重写规则。 因此,我们将不优雅地重启LSWS,而是粗暴高效地重启:

sudo systemctl 重新启动 lsws.service

为了让服务器监听端口 80,让我们创建另一个监听器。 我们称它为 http,指定第 80 个端口并且它将是非安全的:

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

类比 https 侦听器设置,让我们将虚拟主机附加到它。

现在 LSWS 将监听 80 端口并从它向 443 发送请求,重写 url。
总之,我建议降低 LSWS 日志记录级别,默认设置为调试。 在这种模式下,原木以闪电般的速度繁殖! 对于大多数情况,警告级别就足够了。 转到服务器配置 > 日志:

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

这样就完成了 OpenLiteSpeed 作为反向代理的配置。 再次重启 LSWS,点击链接 https://cloud.connect.link 看看:

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

为了让 Nextcloud 让我们进入,我们需要将 cloud.connect.link 域添加到受信任列表中。 让我们去编辑 config.php。 我在安装 Ubuntu 时自动安装了 Nextcloud,配置位于此处:/var/snap/nextcloud/current/nextcloud/config。
将“cloud.connect.link”参数添加到 trusted_domains 键:

'trusted_domains' =>
数组(
0 =>'172.16.22.110',
1 => 'cloud.connect.link',
),

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

此外,在相同的配置中,您必须指定我们代理的 IP 地址。 我提请您注意地址必须指定为 Nextcloud 服务器可见的地址,即本地 LSWS 接口的 IP。 如果没有这一步,Nextcloud Web 界面可以工作,但应用程序未获得授权。

'trusted_proxies' =>
数组(
0 =>'172.16.22.100',
),

很好,之后我们就可以进入授权界面了:

Nextcloud 内部和外部 OpenLiteSpeed:设置反向代理

问题解决了! 现在每个客户端都可以在自己的个人 url 上安全地使用“文件云”,带有文件的服务器与 Internet 分离,未来的客户端将收到相同的所有内容,不会影响任何一个额外的 IP 地址。
此外,您可以使用反向代理来传送静态内容,但对于 Nextcloud,这不会显着提高速度。 所以它是可选的和可选的。

我很高兴分享这个故事,我希望它对某人有用。 如果您知道更优雅有效的解决问题的方法,我将不胜感激!

来源: habr.com

添加评论