Devops sendiri atau konfigurasikan proxy Nginx untuk Apache Tomcat di Ubuntu dalam 5 menit dengan https dan firewall



Saya bukan admin, tetapi terkadang ada tugas yang lebih mudah (dan lebih menarik) untuk diselesaikan sendiri daripada didelegasikan kepada seseorang.

Kadang-kadang, kita perlu "meningkatkan" wadah servlet (paling sering Apache Tomcat) dan mengkonfigurasi proxy untuk itu, penghentian ssl (atau hanya https) dan tutup semuanya dengan firewall (hanya menyisakan ssh dan http / https keluar).

Kebetulan pada minggu terakhir saya memecahkan masalah ini tiga kali (ketika bintang menjadi, dan sebelum itu - dua tahun lalu) dan pengalaman ini ditransformasikan menjadi karya kecil ini.

Jadi, mengingat server Ubuntu 18.04 atau 16.04 (kemungkinan besar Anda tidak akan memiliki masalah dengan versi sebelumnya 14,04 atau lebih). Jika Anda tidak memiliki server Ubuntu, Anda dapat dengan cepat "mengambilnya", misalnya, ke Digital Ocean (tautan rujukan saya). Setelah menulis artikel, saya perhatikan bahwa DO untuk akun baru memberi $ 100 selama 60 hari untuk dicoba, jika Anda menunjukkan pinjaman.

DNS


Untuk skema sederhana untuk mendapatkan sertifikat https gratis dari Let's Encrypt, kami memerlukan akses ke server DNS. Kami menuliskan alamat IP dari server Ubuntu kami dengan nama, katakanlah, xyz. Katakanlah, untuk jelasnya, bahwa Anda memiliki mydomain.com, mis. Nama DNS server kami adalah xyz.mydomain.com

Instalasi


Instal Apache Tomcat (Saya akan menggunakan versi 8)

apt install tomcat8 

Dan sekarang Nginx

 apt install nginx-core 

Kustomisasi


Nginx


Konfigurasikan Nginx yang sebelumnya terdaftar dalam nama server DNS (file / etc / nginx / sites-available / default )

 server_name xyz.mydomain.com; 

Kami mendaftarkan tautan ke Apache Tomcat yang diinstal (jika Anda belum mengubah apa pun, maka "tinggal" di port 8080). Kita perlu menambahkan blok upstream ke blok server .

 upstream tomcat { server 127.0.0.1:8080 fail_timeout=0; } server { ... 

Buat perubahan pada blok lokasi dan arahkan semua lalu lintas ke Apache Tomcat

 server { ... location / { # try_files $uri $uri/ =404; include proxy_params; proxy_pass http://tomcat/; } 

Kami memeriksa bahwa semuanya dimasukkan dengan benar

 service nginx configtest 

dan mulai kembali nginx

 service nginx restart 

Tomcat Apache


Pada prinsipnya, bagian ini adalah opsional, dan jika itu tidak masalah bagi Anda bahwa alamat ip asli, port, skema untuk mana permintaan akan datang (saya berbicara tentang https) dan server yang diminta dikirim ke kucing jantan, maka langkah ini dapat dihilangkan. Namun, dalam beberapa kasus langkah ini diperlukan (misalnya, untuk Java Web Start alias teknologi JNLP).

Tambahkan ke file /etc/tomcat8/server.xml di blok <Host /> .

 <Host> ... <Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="x-forwarded-for" remoteIpProxiesHeader="x-forwarded-by" protocolHeader="x-forwarded-proto" /> </Host> 

Mulai kembali kucing jantan

 service tomcat8 restart 

Sertifikat Https


Sertifikat https dengan verifikasi via http akan membantu kami mendapatkan bot certbot, atau lebih tepatnya modifikasinya untuk nginx'a - python-certbot-nginx

Di Ubuntu 18.04, untuk menginstal certbot, jalankan saja

 apt install python-certbot-nginx 

Untuk Ubuntu 16.04 - Anda harus mengotak-atik menambah repositori, dll. (Lihat panduan terperinci untuk tautannya ).

Kami meluncurkan

 certbot --nginx 

Dalam prosesnya, tentukan email Anda, terima perjanjian lisensi, jangan izinkan kami untuk "mencari-cari" data kami dengan Let's Encrypt, konfirmasikan nama DNS yang akan dikeluarkan sertifikat, setujui bahwa bot itu sendiri akan "mengonfigurasi" nginx.

Voila :)

Untuk jaga-jaga, kami memeriksa bahwa pembaruan sertifikat akan berlalu tanpa masalah (sertifikat diterbitkan selama 90 hari dan setelah itu dapat diperpanjang tanpa batas waktu untuk periode yang sama).

 certbot renew --dry-run 

Dan untuk paranoia internal, kami memeriksa apakah file cron sudah ada

 ls -al /etc/cron.d/certbot 

Firewall


Kami berhenti dan membuat cadangan (snapshot) dari mesin virtual.

 ufw allow ssh ufw allow http ufw allow https ufw default allow outgoing ufw default deny incoming ufw show added 

Berdoa!
 ufw enable ufw status 

Kami memverifikasi bahwa semuanya berhasil - situs dapat diakses melalui https, lalu lintas http diarahkan, dan port selain yang tercantum di atas dan ssh ditutup dengan aman.

PS Saya dengan tulus berharap teks ini dapat bermanfaat bagi seseorang dan saya akan dengan senang hati memberikan kritik yang membangun.

PPS Atau mungkin SEMUA yang mengetahui segalanya akan memberi tahu saya penggantian certbot untuk Windows? Anda perlu mendapatkan sertifikat awal (idealnya, memperbaruinya sesuai jadwal, atau secara umum chic shine) saya mengkonfigurasi nginx sendiri. Ya, saya mengerti bahwa Anda mungkin dapat menggunakan alat ini untuk mengenkripsi + IIS dan menggunakannya dalam skrip saya, tetapi tiba-tiba ada "ideal" yang sudah jadi?

Source: https://habr.com/ru/post/id434010/


All Articles