Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Como configurar o OpenLiteSpeed para proxy reverso no Nextcloud que está em uma rede interna?

Incrível, mas a busca no Habr por OpenLiteSpeed não retorna nada! Estou apressado para corrigir essa injustiça, já que o LSWS é um servidor web digno. Eu o adoro pela sua velocidade e pela interface web de administração moderna:

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Apesar de o OpenLiteSpeed ser mais famoso como um "acelerador" para o WordPress, no artigo de hoje, vou mostrar uma aplicação bastante específica dele. Ou seja, proxy reverso. Você pode dizer que é mais comum usar nginx para isso? Eu concordo. Mas nós realmente gostamos do LSWS!

Proxy é ótimo, mas para onde? Para um serviço não menos maravilhoso – Nextcloud. Usamos o Nextcloud para criar "nuvens de compartilhamento de arquivos" privadas. Para cada cliente, alocamos uma VM separada com Nextcloud e não queremos expô-las "externamente". Em vez disso, fazemos proxy das requisições através de um proxy reverso compartilhado. Essa solução permite:
1) retirar o servidor que armazena os dados do cliente da internet e
2) economizar endereços IP.

O esquema é assim:

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

É claro que o esquema é simplificado, pois a organização da infraestrutura de serviços web não é o tema do artigo de hoje.

Além disso, neste artigo, vou omitir a instalação e configuração básica do Nextcloud, especialmente porque há materiais dedicados a esse assunto no Habr. Mas vou mostrar as configurações essenciais, sem as quais o Nextcloud não funcionará atrás do proxy.

Dado:
O Nextcloud está instalado no host 1 e configurado para funcionar em http (sem SSL), possui apenas uma interface de rede local e um IP "cinza" 172.16.22.110.
Vamos configurar o OpenLiteSpeed no host 2. Ele possui duas interfaces, uma externa (voltada para a internet) e uma interna com um endereço IP na rede 172.16.22.0/24.
O nome DNS cloud.connect.link aponta para o endereço IP da interface externa do host 2.

Problema:
Acessar pela internet através do link ‘https://cloud.connect.link‘ (SSL) para o Nextcloud na rede interna.

  • Instalamos o OpenLiteSpeed no Ubuntu 18.04.2.

Adicionamos o repositório:

wget -O — http://rpms.litespeedtech.com/debian/enable_lst_debain_repo.sh |sudo bash
sudo apt-get update

instalamos, iniciamos:

sudo apt-get install openlitespeed
sudo /usr/local/lsws/bin/lswsctrl start

  • Vamos configurar minimamente o firewall.

    sudo ufw allow ssh
    sudo ufw default allow outgoing
    sudo ufw default deny incoming
    sudo ufw allow http
    sudo ufw allow https
    sudo ufw allow from seu host de gerenciamento para qualquer porta 7080
    sudo ufw enable

  • Vamos configurar o OpenLiteSpeed como um proxy reverso.
    Vamos criar diretórios para o virtual host.

    cd /usr/local/lsws/
    sudo mkdir cloud.connect.link
    cd cloud.connect.link/
    sudo mkdir {conf,html,logs}
    sudo chown lsadm:lsadm ./conf/

Vamos configurar o virtual host a partir da interface web do LSWS.
Abrimos a url de gerenciamento http://cloud.connect.link:7080
Login/senha padrão: admin/123456

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Adicionando um virtual host (Virtual Hosts > Add).
Ao adicionar, aparecerá uma mensagem de erro - ausência de arquivo de configuração. Isso é normal, é resolvido clicando em Click to create.

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Na aba General, vamos indicar o Document Root (mesmo que não precise, sem ele a configuração não funcionará). O Domain Name, se não for especificado, será retirado do Virtual Host Name, que nomeamos como o nosso domínio.

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Agora é hora de lembrar que não temos apenas um servidor web, mas um reverse proxy. As próximas configurações indicarão ao LSWS o que proxyar e para onde. Nas configurações do virtual host, abrimos a aba External App e adicionamos um novo aplicativo do tipo Servidor web:

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Indicamos o nome e o endereço. O nome pode ser escolhido livremente, mas deve ser lembrado, será útil nas etapas seguintes. O endereço é onde o Nextcloud reside na rede interna:

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Nas mesmas configurações do virtual host, abrimos a aba Context e criamos um novo contexto do tipo Proxy:

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Indicamos os parâmetros: URI = /, Servidor web = nextcloud_1 (nome da etapa anterior)

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Reiniciamos o LSWS. Isso é feito com um clique na interface web, maravilhas! (dentro de mim fala um ancestral controlador de ratos)

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso
Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Vamos criar um ‘listener’ (Listeners > Add), vamos chamá-lo de ‘https’. Vamos informar que ele utilizará a porta 443 e marcar que será Secure:

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Na aba SSL, indicamos o caminho para a chave e o certificado:

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

O ‘listener’ foi criado, agora na seção Mappings de Virtual Host, vamos adicionar nosso virtual host a ele:

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Se o LSWS for proxyar apenas para um serviço, a configuração pode ser finalizada. Mas planejamos usá-lo para encaminhar pedidos para diferentes ‘instâncias’ dependendo do nome do domínio. E todos os domínios terão seus próprios certificados. Portanto, devemos ir para a configuração do virtual host e novamente indicar na aba SSL sua chave e certificado. No futuro, isso deve ser feito para cada novo virtual host.

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Agora só falta configurar a reescrita de URL para que os pedidos http sejam direcionados para https.
(Aliás, quando isso vai acabar? Já está na hora dos navegadores e outros softwares, por padrão, utilizarem https, e a transferência para no-SSL ser feita manualmente, se necessário).
Ativamos Enable Rewrite e escrevemos Rewrite Rules:

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Não é possível aplicar as regras de reescrita de maneira convencional com o Graceful restart devido a um estranho mal-entendido. Por isso, vamos reiniciar o LSWS de maneira direta, mas efetiva:

sudo systemctl restart lsws.service

Para que o servidor escute também a porta 80, criamos mais um Listener. Chamaremos de http, informaremos a porta 80 e que ele será não seguro:

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Seguindo a configuração do listener https, vamos associar nosso virtualhost a ele.

Agora o LSWS vai escutar a porta 80 e redirecionar as requisições para a 443, reescrevendo a URL.
Por fim, recomendo reduzir o nível de log do LSWS, que por padrão está configurado como Debug. Nesse modo, os logs se multiplicam rapidamente! Para a maioria dos casos, o nível Warning é suficiente. Vamos em Configuração do Servidor > Log:

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Com isso, a configuração do OpenLiteSpeed como um proxy reverso está concluída. Reiniciamos o LSWS novamente e acessamos o link https://cloud.connect.link e vemos:

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Para que o Nextcloud nos permita acessar, é necessário adicionar o domínio cloud.connect.link à lista de domínios confiáveis. Vamos editar o config.php. Instalei o Nextcloud automaticamente ao configurar o Ubuntu e a configuração está aqui: /var/snap/nextcloud/current/nextcloud/config.
Adicionamos ao parâmetro trusted_domains o valor ‘cloud.connect.link’:

‘trusted_domains’ =>
array (
0 => ‘172.16.22.110’,
1 => ‘cloud.connect.link’,
),

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Em seguida, no mesmo arquivo de configuração, precisamos especificar o endereço IP do nosso proxy. Ressalto que o endereço deve ser aquele que é visível para o servidor Nextcloud, ou seja, o IP da interface local do LSWS. Sem essa etapa, a interface web do Nextcloud funcionará, mas os aplicativos não se autenticarão.

‘trusted_proxies’ =>
array (
0 => ‘172.16.22.100’,
),

Ótimo, agora podemos acessar a interface de login:

Nextcloud por dentro, e por fora OpenLiteSpeed: configurando o proxy reverso

Problema resolvido! Agora cada cliente pode usar o "cloud de arquivos" com sua URL pessoal, o servidor de arquivos está isolado da internet, futuros clientes terão a mesma experiência e nenhum endereço IP extra será danificado.
Adicionalmente, pode-se usar um proxy reverso para entregar conteúdo estático, mas no caso do Nextcloud isso não proporcionará um aumento significativo na velocidade. Portanto, isso é opcional e a critério do usuário.

Fico feliz em compartilhar essa história, espero que seja útil para alguém. Se você conhece métodos mais elegantes e eficientes para resolver a tarefa proposta, ficarei grato pelos comentários!

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster