Bagaimana cara mengkonfigurasi OpenLiteSpeed untuk membalikkan proxy di Nextcloud, yang terletak di jaringan internal?
Anehnya, pencarian di Habré untuk OpenLiteSpeed tidak menghasilkan apa-apa! Saya segera memperbaiki ketidakadilan ini, karena LSWS adalah server web yang layak. Saya suka dia untuk antarmuka administrasi web yang cepat dan modis:

Terlepas dari kenyataan bahwa OpenLiteSpeed paling terkenal sebagai "akselerator" WordPress, dalam artikel hari ini saya akan menunjukkan aplikasi yang agak spesifik. Yaitu membalikkan permintaan proxy (reverse proxy). Anda mengatakan bahwa lebih umum menggunakan nginx untuk ini? Saya akan setuju. Tapi itu benar-benar melukai kita untuk mencintai LSWS!
Proksi ok, tapi dimana? Layanan yang sama hebatnya adalah Nextcloud. Kami menggunakan Nextcloud untuk membuat "cloud file-sharing" pribadi. Untuk setiap klien, kami mengalokasikan VM terpisah dengan Nextcloud, dan tidak ingin mengekspos mereka "keluar". Sebagai gantinya, kami mem-proxy permintaan melalui proxy terbalik umum. Solusi ini memungkinkan Anda untuk:
- menghapus server tempat data klien disimpan dari Internet dan
- simpan alamat ip.
Skemanya terlihat seperti ini:

Jelas bahwa skema ini disederhanakan, karena mengatur infrastruktur layanan web bukan topik artikel hari ini.
Juga dalam artikel ini saya akan menghilangkan instalasi dan konfigurasi dasar non-clauda, terutama karena ada materi tentang topik ini di Habré. Tapi saya pasti akan menunjukkan pengaturan, yang tanpanya Nextcloud tidak akan berfungsi untuk proxy.
Diberikan: Nextcloud diinstal pada host 1 dan dikonfigurasikan untuk bekerja melalui http (tanpa SSL), ia hanya memiliki antarmuka jaringan lokal dan alamat IP "abu-abu" 172.16.22.110.
Kami akan mengkonfigurasi OpenLiteSpeed pada host 2. Ini memiliki dua antarmuka, yang eksternal (terlihat di Internet) dan yang internal dengan alamat IP pada jaringan 172.16.22.0/24
Nama DNS cloud.connect.link mengarah ke alamat IP antarmuka eksternal host 2
Tugas: untuk mendapatkan dari Internet melalui tautan ' https://cloud.connect.link ' (SSL) ke Nextcloud di jaringan internal.
- Instal OpenLiteSpeed di Ubuntu 18.04.2.
Tambahkan repositori:
wget -O - http://rpms.litespeedtech.com/debian/enable_lst_debain_repo.sh | sudo bash
sudo apt-get pembaruan
atur, jalankan:
sudo apt-get install openlitespeed
sudo / usr / local / lsws / bin / lswsctrl mulai
- Minimalkan firewall.
sudo ufw izinkan ssh
sudo ufw default memungkinkan keluar
sudo ufw default tolak masuk
sudo ufw memungkinkan http
sudo ufw memungkinkan https
sudo ufw izinkan dari host manajemen Anda ke port 7080
sudo ufw aktifkan
- Atur OpenLiteSpeed sebagai proxy terbalik.
Buat direktori untuk virtualhost.
cd / usr / local / lsws /
sudo mkdirc cloud.connect.link
cd cloud.connect.link/
sudo mkdir {conf, html, logs}
sudo chown lsadm: lsadm ./conf/
Konfigurasikan virtualhost dari antarmuka web LSWS.
Buka manajemen url http://cloud.connect.link:7080
Login / kata sandi default: admin / 123456

Tambahkan host virtual (Host Virtual> Tambah).
Saat menambahkan, pesan kesalahan akan muncul - tidak ada file konfigurasi. Ini normal, diselesaikan dengan mengeklik Klik untuk membuat.

Di tab Umum, tentukan Dokumen Root (meskipun tidak diperlukan, konfigurasi tidak akan lepas landas tanpanya). Nama Domain, jika tidak ditentukan, akan diambil dari Nama Host Virtual, yang kami namai nama domain kami.

Sekarang saatnya untuk mengingat bahwa kita tidak hanya memiliki server web, tetapi juga proxy terbalik. Pengaturan berikut akan memberi tahu LSWS apa yang harus proxy dan di mana. Dalam pengaturan host virtual, buka tab Aplikasi Eksternal dan tambahkan aplikasi baru seperti server Web:

Tunjukkan nama dan alamatnya. Nama dapat ditentukan secara sewenang-wenang, tetapi harus diingat, berguna dalam langkah selanjutnya. Alamatnya adalah tempat tinggal Nextcloud di jaringan internal:

Dalam pengaturan yang sama dari host virtual, buka tab Konteks dan buat konteks baru dari tipe Proxy:

Tentukan parameter: URI = /, server Web = nextcloud_1 (nama dari langkah sebelumnya)

Mulai ulang LSWS. Ini dilakukan dengan satu klik dari antarmuka web, keajaiban! (Pembawa tikus herediter berbicara pada saya)


- Kami menempatkan sertifikat, mengkonfigurasi https.
Kami akan mengabaikan prosedur untuk memperoleh sertifikat , setuju bahwa kami sudah memilikinya dan berbaring dengan kunci di direktori /etc/letsencrypt/live/cloud.connect.link.
Buat "pendengar" (Pendengar> Tambah), sebut saja "https". Kami arahkan ke port 443 dan perhatikan bahwa itu akan Aman:

Di tab SSL, tentukan jalur ke kunci dan sertifikat:

"Pendengar" telah dibuat, sekarang di bagian Pemetaan Host Virtual kami menambahkan host virtual kami ke dalamnya:

Jika LSWS hanya mewakili satu layanan, konfigurasi dapat diselesaikan. Tetapi kami berencana menggunakannya untuk mentransfer permintaan ke "otoritas" yang berbeda tergantung pada nama domain. Dan semua domain akan memiliki sertifikat sendiri. Oleh karena itu, Anda perlu pergi ke konfigurasi virtualhost dan tentukan lagi kunci dan sertifikatnya di tab SSL. Di masa depan, ini harus dilakukan untuk setiap host virtual baru.

Tetap mengonfigurasi penulisan ulang url agar permintaan http ditujukan ke https.
(Omong-omong, kapan ini akan berakhir? Sudah waktunya browser dan perangkat lunak lain untuk membuka https secara default, dan melakukan penerusan tanpa-SSL secara manual jika perlu).
Aktifkan Aktifkan Penulisan Ulang dan tulis Aturan Penulisan Ulang:
RewriteCond% {SERVER_PORT} 80
RewriteRule ^ (. *) $ Https: //% {SERVER_NAME}% {REQUEST_URI } [R = 301, L]

Tidak mungkin untuk menerapkan aturan Menulis Ulang dengan Restart Anggun yang biasa karena kesalahpahaman yang aneh. Karenanya, memulai ulang LSWS tidak elegan, tetapi kasar dan efisien:
sudo systemctl restart lsws.service
Agar server mendengarkan port 80, buat Listener lain. Sebut saja http, tentukan port ke-80 dan tidak aman:

Dengan analogi dengan pengaturan pendengar https, mari lampirkan host virtual kami untuk itu.
Sekarang LSWS akan mendengarkan port ke-80 dan mengirim permintaan dari sana ke 443, menulis ulang url.
Sebagai kesimpulan, saya sarankan menurunkan tingkat logging LSWS, yang ditetapkan sebagai Debug secara default. Dalam mode ini, log berkembang biak dengan kecepatan kilat! Untuk sebagian besar kasus, tingkat Peringatan sudah cukup. Pergi ke Konfigurasi Server> Log:

Ini melengkapi konfigurasi OpenLiteSpeed sebagai proxy terbalik. Sekali lagi kami memulai ulang LSWS, ikuti tautan https://cloud.connect.link dan lihat:

Agar Nextcloud mengizinkan kami masuk, Anda perlu menambahkan domain cloud.connect.link ke daftar yang tepercaya. Pergi edit config.php. Saya menginstal Nextcloud secara otomatis ketika menginstal Ubuntu dan konfigurasi ada di sini: / var / snap / nextcloud / current / nextcloud / config.
Untuk kunci tepercaya_domain, tambahkan parameter 'cloud.connect.link':
'trust_domains' =>
array (
0 => '172.16.22.110',
1 => 'cloud.connect.link',
),

Lebih lanjut, dalam konfigurasi yang sama Anda harus menentukan alamat IP proxy kami. Saya menarik perhatian pada fakta bahwa alamat harus ditentukan yang terlihat oleh server Nextcloud, yaitu IP antarmuka lokal LSWS. Tanpa langkah ini, antarmuka web Nextcloud berfungsi, tetapi aplikasi tidak diotorisasi.
'trust_proxies' =>
array (
0 => '172.16.22.100',
),
Nah, setelah itu kita bisa masuk ke antarmuka otorisasi:

Masalahnya terpecahkan! Sekarang setiap klien dapat menggunakan "file cloud" dengan aman di url pribadinya, server dengan file dipisahkan dari Internet, klien masa depan akan mendapatkan hal yang sama dan tidak ada alamat IP tambahan yang akan terpengaruh.
Selain itu, Anda dapat menggunakan proxy terbalik untuk mengirimkan konten statis, tetapi dalam kasus Nextcloud ini tidak akan memberikan peningkatan kecepatan yang nyata. Jadi ini opsional dan opsional.
Senang berbagi cerita ini, saya berharap seseorang akan membantu. Jika Anda tahu metode yang lebih elegan dan efektif untuk menyelesaikan tugas - saya akan berterima kasih atas komentarnya!