Como configurar o OpenLiteSpeed para reverter o proxy no Nextcloud, localizado na rede interna?
Surpreendentemente, uma pesquisa no Habré pelo OpenLiteSpeed não gera nada! Corro para corrigir essa injustiça, porque o LSWS é um servidor Web digno. Eu o amo pela velocidade e pela interface de administração da web da moda:

Apesar do OpenLiteSpeed ser mais famoso como um "acelerador" do WordPress, no artigo de hoje mostrarei sua aplicação bastante específica. Nomeadamente, solicitações de proxy reverso (proxy reverso). Você diz que é mais comum usar o nginx para isso? Eu concordo Mas realmente nos machucou amar o LSWS!
Proxying ok, mas onde? Um serviço igualmente maravilhoso é o Nextcloud. Usamos o Nextcloud para criar "nuvens de compartilhamento de arquivos" privadas. Para cada cliente, alocamos uma VM separada com o Nextcloud e não queremos expô-los "fora". Em vez disso, solicitamos proxy por meio de um proxy reverso comum. Esta solução permite:
- remova o servidor no qual os dados do cliente são armazenados da Internet e
- salvar endereços IP.
O esquema é assim:

É claro que o esquema é simplificado, pois organizar uma infraestrutura de serviços da web não é o tópico do artigo de hoje.
Também neste artigo vou omitir a instalação e a configuração básica de não-clauda, principalmente porque existem materiais sobre este tópico no Habré. Mas definitivamente mostrarei as configurações, sem as quais o Nextcloud não funcionará para o proxy.
Dado: O Nextcloud é instalado no host 1 e configurado para funcionar via http (sem SSL), ele possui apenas uma interface de rede local e um endereço IP "cinza" 172.16.22.110.
Vamos configurar o OpenLiteSpeed no host 2. Ele possui duas interfaces, uma externa (aparência na Internet) e outra interna com um endereço IP na rede 172.16.22.0/24
O nome DNS cloud.connect.link leva ao endereço IP da interface externa do host 2
Tarefa: obter da Internet, através do link ' https://cloud.connect.link ' (SSL), o Nextcloud na rede interna.
- Instale o OpenLiteSpeed no Ubuntu 18.04.2.
Adicione um repositório:
wget -O - http://rpms.litespeedtech.com/debian/enable_lst_debain_repo.sh | sudo bash
sudo apt-get update
definir, executar:
sudo apt-get install openlitespeed
sudo / usr / local / lsws / bin / lswsctrl start
- Minimize o firewall.
sudo ufw permitir ssh
sudo ufw padrão permite saída
padrão sudo ufw negar entrada
sudo ufw permite http
sudo ufw permitir https
sudo ufw permite do seu host de gerenciamento para qualquer porta 7080
sudo ufw enable
- Configure o OpenLiteSpeed como um proxy reverso.
Crie diretórios para o host virtual.
cd / usr / local / lsws /
sudo mkdirc cloud.connect.link
cd cloud.connect.link/
sudo mkdir {conf, html, logs}
sudo chown lsadm: lsadm ./conf/
Configure o host virtual a partir da interface da web LSWS.
Gerenciamento de URL aberto http://cloud.connect.link:7080
Login / senha padrão: admin / 123456

Adicione um host virtual (Hosts Virtuais> Adicionar).
Ao adicionar, uma mensagem de erro será exibida - não há arquivo de configuração. Isso é normal, resolvido clicando em Clique para criar.

Na guia Geral, especifique a Raiz do documento (embora não seja necessária, a configuração não decolará sem ela). O Nome de Domínio, se não especificado, será retirado do Nome do Host Virtual, que denominamos o nome do nosso domínio.

Agora é hora de lembrar que não temos apenas um servidor web, mas um proxy reverso. As seguintes configurações informarão ao LSWS o que fazer proxy e onde. Nas configurações do host virtual, abra a guia Aplicativo Externo e adicione um novo aplicativo, como servidor da Web:

Indique o nome e o endereço. O nome pode ser especificado arbitrariamente, mas deve ser lembrado, útil nas próximas etapas. O endereço é onde o Nextcloud mora na rede interna:

Nas mesmas configurações do host virtual, abra a guia Contexto e crie um novo contexto do tipo Proxy:

Especifique os parâmetros: URI = /, servidor da Web = nextcloud_1 (nome da etapa anterior)

Reinicie o LSWS. Isso é feito com um clique na interface da web, milagres! (o portador hereditário do mouse fala em mim)


- Colocamos o certificado, configuramos https.
Omitiremos o procedimento para obter um certificado , concordaremos que já o temos e permaneceremos com a chave no diretório /etc/letsencrypt/live/cloud.connect.link.
Crie um "ouvinte" (Listeners> Add), chame-o de "https". Apontamos para a porta 443 e observamos que ela será segura:

Na guia SSL, especifique o caminho para a chave e o certificado:

Um "ouvinte" foi criado, agora na seção Mapeamentos de Host Virtual, adicionamos nosso host virtual a ele:

Se o LSWS fizer proxy de apenas um serviço, a configuração poderá ser concluída. Mas planejamos usá-lo para transferir solicitações para diferentes "autoridades", dependendo do nome do domínio. E todos os domínios terão seus próprios certificados. Portanto, você precisa acessar a configuração do host virtual e especificar novamente sua chave e certificado na guia SSL. No futuro, isso deve ser feito para cada novo host virtual.

Resta configurar a reescrita da URL para que as solicitações http sejam endereçadas a https.
(A propósito, quando isso terminará? É hora dos navegadores e outros softwares acessarem https por padrão e fazerem o encaminhamento sem SSL manualmente, se necessário).
Habilite Habilitar Reescrever e escreva Regras de Reescrita:
RewriteCond% {SERVER_PORT} 80
RewriteRule ^ (. *) $ Https: //% {SERVER_NAME}% {REQUEST_URI } [R = 301, L]

É impossível aplicar as regras de reescrita com o reinício gracioso habitual devido a um estranho mal-entendido. Portanto, reiniciar o LSWS não é elegante, mas rude e eficiente:
sudo systemctl restart lsws.service
Para que o servidor escute a 80ª porta, crie outro Ouvinte. Vamos chamá-lo de http, especificar a 80ª porta e ela não será segura:

Por analogia com a configuração do ouvinte https, vamos anexar nosso host virtual a ele.
Agora, o LSWS escutará a 80ª porta e enviará solicitações dela para 443, reescrevendo o URL.
Em conclusão, eu recomendo diminuir o nível de log do LSWS, que é definido como Debug por padrão. Nesse modo, os logs se multiplicam na velocidade da luz! Na maioria dos casos, um nível de aviso é suficiente. Vá para Configuração do servidor> Log:

Isso completa a configuração do OpenLiteSpeed como um proxy reverso. Mais uma vez, reiniciaremos o LSWS, siga o link https://cloud.connect.link e consulte:

Para o Nextcloud nos deixar entrar, você precisa adicionar o domínio cloud.connect.link à lista de domínios confiáveis. Vá em edit config.php. Eu instalei o Nextcloud automaticamente ao instalar o Ubuntu e a configuração está aqui: / var / snap / nextcloud / current / nextcloud / config.
Na chave trust_domains, adicione o parâmetro 'cloud.connect.link':
'domínios_ confiáveis' =>
matriz (
0 => '172.16.22.110',
1 => 'cloud.connect.link',
),

Além disso, na mesma configuração, você deve especificar o endereço IP do nosso proxy. Chamo a atenção para o fato de que o endereço deve ser especificado e visível para o servidor Nextcloud, ou seja, Interface local IP LSWS. Sem essa etapa, a interface da web Nextcloud funciona, mas os aplicativos não são autorizados.
'trust_proxies' =>
matriz (
0 => '172.16.22.100',
),
Bem, depois disso, podemos entrar na interface de autorização:

O problema está resolvido! Agora, cada cliente pode usar com segurança a "nuvem de arquivos" em seu URL pessoal, o servidor com os arquivos é separado da Internet, os futuros clientes obterão a mesma coisa e nenhum endereço IP adicional será afetado.
Além disso, você pode usar o proxy reverso para fornecer conteúdo estático, mas no caso do Nextcloud, isso não dará um aumento notável na velocidade. Portanto, isso é opcional e opcional.
Fico feliz em compartilhar esta história, espero que alguém seja útil. Se você conhece métodos mais elegantes e eficazes para resolver a tarefa - ficarei grato pelos comentários!