NGINX dengan Node.js: Pengimbangan Beban, Menyajikan Kandungan Statik dan SSL

Barbara Streisand
Lepaskan: 2024-09-26 07:23:22
asal
630 orang telah melayarinya

NGINX with Node.js: Load Balancing, Serving Static Content, and SSL

NGINX ialah pelayan web yang berkuasa dan serba boleh yang memainkan peranan penting dalam menskalakan aplikasi Node.js. Ia biasanya digunakan sebagai proksi terbalik untuk mengendalikan pengimbangan beban, menyampaikan kandungan statik dan mengurus penamatan SSL. Dalam artikel ini, kami akan meneroka cara menggunakan NGINX bersama Node.js, menerangkan cara setiap fungsi ini berfungsi dengan contoh praktikal.

Mengapa Menggunakan NGINX dengan Node.js?

Walaupun Node.js cemerlang dalam membina aplikasi berskala, didorong peristiwa, ini mungkin bukan cara yang paling berkesan untuk mengendalikan tugas seperti pengimbangan beban, menyajikan kandungan statik atau penamatan SSL. Di sinilah NGINX masuk. NGINX dioptimumkan untuk mengendalikan sejumlah besar sambungan serentak dengan cekap, menjadikannya teman yang sempurna untuk aplikasi Node.js yang perlu skala.

Faedah Utama Menggunakan NGINX dengan Node.js:

  1. Pengimbangan Beban: NGINX boleh mengagihkan trafik merentasi berbilang kejadian Node.js, memastikan tiada pelayan tunggal yang terharu.
  2. Menyajikan Kandungan Statik: Ia menyediakan fail statik dengan cekap (cth. CSS, JS, imej), membebaskan Node.js untuk memfokus pada kandungan dinamik.
  3. Penamatan SSL: NGINX mengendalikan penyulitan dan penyahsulitan SSL/TLS, mengurangkan beban pada Node.js.

1. Pengimbangan Beban dengan NGINX

Apabila menskala secara mendatar, anda perlu menjalankan berbilang tika aplikasi Node.js anda. NGINX boleh mengagihkan trafik masuk merentas kejadian ini, memastikan beban yang sekata.

Langkah 1: Pasang NGINX

Pada sistem Ubuntu, anda boleh memasang NGINX dengan arahan berikut:

sudo apt update
sudo apt install nginx
Salin selepas log masuk

Langkah 2: Konfigurasi NGINX untuk Pengimbangan Beban

Fail nginx.conf ialah tempat anda menentukan cara NGINX mengendalikan permintaan masuk. Begini cara anda boleh menyediakan NGINX untuk memuatkan baki merentas tiga tika Node.js.

http {
    upstream node_app {
        server 127.0.0.1:3000;
        server 127.0.0.1:3001;
        server 127.0.0.1:3002;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://node_app;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}
Salin selepas log masuk

Penjelasan:

  • Blok hulu mentakrifkan kumpulan kejadian Node.js yang NGINX akan mengimbangi trafik antara.
  • Arahan proxy_pass memajukan permintaan kepada salah satu kejadian Node.js.

Langkah 3: Mulakan Berbilang Contoh Node.js

node app.js --port 3000 &
node app.js --port 3001 &
node app.js --port 3002 &
Salin selepas log masuk

Langkah 4: Mulakan NGINX

Setelah NGINX dikonfigurasikan, mulakannya menggunakan:

sudo systemctl start nginx
Salin selepas log masuk

Uji Persediaan:
Sekarang, melawati alamat IP atau domain pelayan anda harus mengedarkan permintaan antara tiga contoh Node.js.

2. Menyediakan Kandungan Statik dengan NGINX

Aplikasi Node.js selalunya perlu menyediakan fail statik (seperti imej, CSS dan JavaScript). NGINX jauh lebih cekap dalam tugas ini, kerana ia direka bentuk untuk mengendalikan sejumlah besar permintaan fail statik.

Langkah 1: Konfigurasi NGINX untuk Fail Statik

Ubah suai fail nginx.conf untuk menentukan lokasi kandungan statik.

server {
    listen 80;

    # Serve static content directly
    location /static/ {
        root /var/www/html;
    }

    # Proxy dynamic requests to Node.js
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
Salin selepas log masuk

Penjelasan:

  • Lokasi /static/ blok memberitahu NGINX untuk menyampaikan fail daripada /var/www/html/static/ apabila permintaan dibuat kepada /static/.
  • Permintaan lain diproksikan ke aplikasi Node.js.

Langkah 2: Alihkan Fail Statik

Alihkan fail statik anda (cth., imej, CSS, JavaScript) ke direktori /var/www/html/static/.

sudo mkdir -p /var/www/html/static
sudo cp -r path/to/static/files/* /var/www/html/static/
Salin selepas log masuk

Kini, permintaan untuk sumber /statik akan dikendalikan secara langsung oleh NGINX, meningkatkan prestasi pelayan Node.js anda.

3. Penamatan SSL dengan NGINX

SSL (Lapisan Soket Selamat) adalah penting untuk menjamin komunikasi antara pengguna anda dan aplikasi anda. NGINX boleh memuat naik permintaan penamatan, penyulitan dan penyahsulitan SSL, jadi aplikasi Node.js anda tidak perlu mengendalikan SSL sendiri.

Langkah 1: Dapatkan Sijil SSL

Anda boleh mendapatkan sijil SSL secara percuma menggunakan Let’s Encrypt:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com
Salin selepas log masuk

Langkah 2: Konfigurasi SSL NGINX

Setelah sijil SSL dikeluarkan, anda boleh mengkonfigurasi NGINX untuk mengendalikan trafik SSL.

server {
    listen 80;
    server_name yourdomain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
Salin selepas log masuk

Penjelasan:

  • Blok pelayan pertama mengubah hala semua trafik HTTP ke HTTPS.
  • Blok kedua mendengar pada port 443 (HTTPS), mengendalikan penyulitan SSL dengan sijil yang dikeluarkan oleh Let’s Encrypt.

Langkah 3: Uji Persediaan SSL

Lawati domain anda (cth., https://yourdomain.com) dan apl Node.js anda kini harus disediakan melalui HTTPS.

Konfigurasi NGINX Tambahan untuk Mengoptimumkan Node.js

1. Mengendalikan Tamat Masa

Untuk mengelakkan permintaan yang berjalan lama daripada ditutup sebelum waktunya, konfigurasikan tetapan tamat masa NGINX.

server {
    proxy_read_timeout 90s;
    proxy_send_timeout 90s;
    send_timeout 90s;
}
Salin selepas log masuk

2. Rate Limiting

Rate limiting can help prevent abuse and manage high traffic by limiting the number of requests a user can make in a given time.

http {
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;

    server {
        location / {
            limit_req zone=mylimit burst=5;
            proxy_pass http://localhost:3000;
        }
    }
}
Salin selepas log masuk

Explanation:

  • The limit_req_zone directive defines a rate limit of 1 request per second.
  • The burst parameter allows a small number of requests to exceed the limit before throttling kicks in.

Conclusion

NGINX is a powerful tool that can significantly enhance the performance, security, and scalability of your Node.js applications. By offloading tasks such as load balancing, serving static content, and handling SSL termination to NGINX, your Node.js server can focus on what it does best: processing dynamic content and handling real-time events.

Atas ialah kandungan terperinci NGINX dengan Node.js: Pengimbangan Beban, Menyajikan Kandungan Statik dan SSL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!