What is .app ? “.App adalah domain yang lebih aman untuk aplikasi. Dari game ke berita hingga pendidikan, .app adalah rumah yang sempurna untuk aplikasi Anda. "(Https://get.app)
Baru-baru ini saya mengerjakan pekerjaan rumah pemrograman web saya, yang merupakan ruang obrolan online dengan express / socket.io sebagai backend. Dan secara pribadi saya ingin membuat ruang obrolan saya mendukung Facebook Login API & Github Login API, tetapi keduanya memerlukan nama domain (url), dan saya tidak dapat mengaksesnya dengan IP statis saja ... Karena itu saya memutuskan untuk membeli domain nama saya sendiri.
Apa yang akan dibahas
Baru-baru ini saya mengerjakan pekerjaan rumah pemrograman web saya, yang merupakan ruang obrolan online dengan express / socket.io sebagai backend. Dan secara pribadi saya ingin membuat ruang obrolan saya mendukung Facebook Login API & Github Login API, tetapi keduanya memerlukan nama domain (url), dan saya tidak dapat mengaksesnya dengan IP statis saja ... Karena itu saya memutuskan untuk membeli domain nama saya sendiri.
Apa yang akan dibahas
- Setup server Node js HTTPS (bukan HTTP)
- Konsol Google Domain & cara menggunakan
- Cara menangani kunci SSL / TLS, dan HTTPS
- Apa itu DNS & Cara memilih
- Cloudflare (Crypto): Sertifikat SSL lengkap
- Konfigurasi server Nginx: penerusan porta, proxy_pass, proxy terbalik
- (CentOS 7) Pengaturan firewall, tambahkan / hapus port untuk HTTP / HTTPS
- (CentOS 7) konfigurasi SELinux
- API SISA
* Langkah-langkah dalam artikel ini mengharuskan pengguna untuk memiliki hak akses root. & Alamat IP statis (untuk saya bergantung pada PPPoE), untuk menyelesaikan konfigurasi ini. harap pastikan Anda menggunakan workstation Anda sendiri (mis. azure, aws) *
1. Instalasi Node.js pada CentOS
Ini cukup mudah dan langsung. Anda dapat menggunakan skrip ini untuk distro Linux tertentu ini: Red Hat® Enterprise Linux® / RHEL, CentOS dan Fedora.
ref: https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora
$ curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash - $ sudo yum -y install nodejs $ sudo yum install gcc-c++ make
2. Instalasi Nginx pada CentOS
Nginx adalah perangkat lunak server web berkinerja tinggi. Ini adalah program yang jauh lebih fleksibel dan ringan daripada Apache HTTP Server.
ref: https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-7
sudo yum install epel-release
sudo yum install nginx
sudo nginx -t # to check if successfully installed
sudo yum install nginx
sudo nginx -t # to check if successfully installed
3. pengaturan firewall
kita harus menambahkan port 80 untuk HTTP dan port 443 untuk HTTPS, untuk membuat pengguna lain mengakses server kita.
$ netstat -tpln # list all ports $ sudo firewall-cmd --list-ports # 9012/tcp is my ssh port 9012/tcp # You must open and enable port 80 and 443 using the firewall-cmd command: $ sudo firewall-cmd --permanent --zone=public --add-service=http $ sudo firewall-cmd --permanent --zone=public --add-service=https $ sudo firewall-cmd --reload
Yang terpenting, kita tidak perlu menambahkan port 8080 meskipun host lokal kami menggunakan port ini sebagai default. Mengapa? karena Nginx kami akan melakukan penerusan port (443 -> 8080 dan 80 -> 8080) agar port 8080 tetap utuh.
4. Pendaftaran Domain Google (.app) & konfigurasi.
Pertama-tama, kita harus berbicara tentang perbedaan antara .appand orang lain (mis. Com, org, ... dll).
Secara singkat, .appdomain hanya mendukung "HTTPS" dan karenanya lebih aman, karena Anda memerlukan TLS / sertifikat SSL atau crypto lainnya (mis. Cloudflare Crypto: SSL Fleksibel) untuk mengaksesnya.
Anda dapat mempelajari lebih lanjut di situs web : https://www.instantssl.com/ssl-certificate-products/https.html
Pada Mei 2018, Google mulai menyediakan beberapa domain .app yang luar biasa untuk pengembang, dan itu tidak mahal atau sulit untuk disiapkan. Namun, tampaknya google masih belum menyediakan SSL untuk domain .app HTTPS mereka, jadi saya memilih untuk menggunakan Cloudflare sebagai server DNS saya.
Ini 14 USD per tahun untuk .app dan 12 USD untuk .com, jadi mengapa tidak memilih .app!
5. Kelola domain Google kami!
Jadi sekarang kita masuk ke konsol domain google kami, jika Anda berhasil mendaftar. Dan hal pertama yang harus kita lakukan adalah mengubah server DNS Google default menjadi custom, kata, Cloudflare.
Alasan mengapa saya tidak menggunakan google DNS adalah karena saya tidak dapat menemukan kunci SSL yang disediakan oleh Google, dan terlebih lagi saya tidak dapat membuat kunci SSL saya sendiri (https://www.sslforfree.com/) walaupun saya mengikuti tutorial mengenkripsi. Saya juga tidak ingin menggunakan openssl atau teknik lain untuk menghasilkan kunci saya sendiri, dan akan lebih aman jika kita bisa menggunakan gen kunci pihak ketiga yang disediakan. Oleh karena itu, saya memilih untuk menggunakan Cloudflare karena mudah untuk mengunduh Sertifikat (kunci, pem) yang disediakan, itu disediakan oleh pihak ketiga, dan selain itu Cloudflare menyediakan banyak fitur CDN. (Juga Cloudflare, ini adalah pilihan lain untuk server DNS.)
- Set up the “Custom resource records”
Anda harus memberikan catatan Tipe A dan alamat IP Anda untuk mengikat IP server Anda dengan nama domain. Dan juga, www juga harus dimasukkan karena kami ingin pengguna mengakses situs web kami baik dari https://contoh.app/ dan https://www.contoh.app/
6. Daftarkan Cloudflare & transfer server DNS dari google ke Cloudflare
Apa itu cloudflare?
CloudFlare adalah jaringan pusat data yang berada di antara server web Anda dan seluruh internet. Ini melakukan dua hal: CloudFlare dapat menayangkan konten web statis yang di-cache ke pengunjung, dan menyaring pengunjung untuk memastikan mereka baik dan bukan lalu lintas yang datang dari serangan, bot jahat, atau hal-hal buruk lainnya. Karena jaringan CloudFlare terdiri dari 32 pusat data global, itu berarti kami dapat melayani konten web pengunjung Anda dengan sangat cepat terlepas dari jarak antara server asal Anda dan pemirsa.
7. Hasilkan Kunci SSL Anda dari pihak ketiga (Cloudflare)
Setelah memeriksa bahwa status DNS aktif, kita dapat melanjutkan untuk mengunduh kunci / pem kita. tolong setel SSL dari “SSL Fleksibel” ke “Penuh (Ketat)” karena kami akan menggunakan file kunci nanti.
Klik "Crypto" di bar bagian atas (yang merupakan ikon kunci), dan kemudian klik "Buat Sertifikat".
Salin dan tempel kedua kode hash ke dalam ‘cert.key’ dan ‘cert.pem’ untuk kunci pribadi dan sertifikat. Kemudian gunakan scp untuk memindahkan kedua file ini ke server Anda
/etc/nginx/ssl/cert.key
and /etc/nginx/ssl/cert.pem
8. Konfigurasi Nginx
Ini adalah bagian paling penting dan membutuhkan banyak pengetahuan domain yang berhubungan dengan web. Jika Anda tidak terbiasa, periksa tutorial ini terlebih dahulu:
- Reverse Proxy: https://www.nginx.com/resources/glossary/reverse-proxy-server/
- Penerusan Port: https://gist.github.com/soheilhy/8b94347ff8336d971ad0
- Konfigurasi sertifikat CA: https://support.cloudflare.com/hc/en-us/articles/217471977-How-to-install-an-Origin-CA-certificate-in-NGINX
buka baris perintah Anda dan gunakan su untuk mengubah ke pengguna super.
Ini adalah pohon direktori saya:
[greynight@localhost]:/etc/nginx $ tree . . ├── conf.d ├── default.d ├── fastcgi.conf ├── fastcgi.conf.default ├── fastcgi_params ├── fastcgi_params.default ├── koi-utf ├── koi-win ├── mime.types ├── mime.types.default ├── nginx.conf ├── nginx.conf.default ├── scgi_params ├── scgi_params.default ├── ssl │ ├── cert.key │ └── cert.pem ├── uwsgi_params ├── uwsgi_params.default └── win-utf3 directories, 17 files
Yang perlu kita modifikasi hanyalah nginx.conf dan masukkan kunci ssl ke ./ssl
Bagian terpenting dalam file konfigurasi ditunjukkan di bawah ini:
server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; server_name adrianhsu.app; ssl_certificate "ssl/cert.pem"; ssl_certificate_key "ssl/cert.key";...... location / { proxy_pass https://0.0.0.0:8080; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } ... }
- listen port 443 untuk HTTPS ssl
- pengaturan nama server
- sertifikat / kunci ssl
- proxy_pass: kita akan menggunakan port forwarding untuk membuat port 8080 diteruskan ke port 443
- proxy_set_header diatur untuk header paket standar http
Selesai!
Setelah itu, silakan jalankan perintah:
sudo systemctl restart nginx
sudo systemctl status nginx -l
sudo systemctl status nginx -l
Jika berhasil diatur, Anda dapat melihat aktif dalam status.
Anda dapat memeriksa hasil Anda menggunakan curl -k https://localhost dan itu akan memberikan file html untuk situs web statis nginx default.
9. Node js pengaturan server
Langkah terakhir! cukup buat server https dan dengarkan di 0.0.0.0:8080 seperti yang kami sebutkan di nginx config.
index.js
// curl -k https://localhost:8080/ const https = require('https'); const fs = require('fs');const options = { key: fs.readFileSync('/etc/nginx/ssl/cert.key'), cert: fs.readFileSync('/etc/nginx/ssl/cert.pem') };https.createServer(options, (req, res) => { fs.readFile('index.html',function (err, data){ res.writeHead(200, {'Content-Type': 'text/html','Content-Length':data.length}); res.write(data); res.end(); }); }).listen(8080, '0.0.0.0');
index.html
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>greynight</title> </head> <body> <div> Hello World! </div> <img src='https://http.cat/200' alt='load img failed'></body> </html>
ok, so now run
sudo node index.js
on server.