Rumah  >  Artikel  >  hujung hadapan web  >  NGINX dengan Node.js: Pengimbangan Beban, Menyajikan Kandungan Statik dan SSL

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

Barbara Streisand
Barbara Streisandasal
2024-09-26 07:23:22496semak imbas

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

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;
        }
    }
}

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 &

Langkah 4: Mulakan NGINX

Setelah NGINX dikonfigurasikan, mulakannya menggunakan:

sudo systemctl start nginx

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;
    }
}

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/

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

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;
    }
}

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;
}

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;
        }
    }
}

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!

Kenyataan:
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