GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Buat Proxy Terbalik NGINX di Docker dan Pelajari 1 Keterampilan Baru!

Apakah Anda memerlukan server web yang kuat untuk menangani permintaan ke aplikasi Docker Anda? Menggunakan proxy terbalik NGINX di Docker memberi Anda kemampuan untuk menangani dan mengelola permintaan aplikasi web ke dan dari aplikasi kemas dengan berbagai cara.

Pada artikel ini, Anda akan mempelajari cara membuat NGINX Reverse Proxy di Docker dan mengonfigurasi container untuk membalikkan permintaan proxy ke dan dari container lain. Baca terus untuk mempelajari lebih lanjut!

Prasyarat

Untuk mengikuti tutorial ini, pastikan Anda memiliki yang berikut:

  • Desktop Docker – Tutorial ini menggunakan versi 3.5.2.
  • Windows 10 – Tutorial ini menggunakan Windows untuk menjalankan Docker, tetapi langkah umum yang sama juga dapat diterapkan ke Linux atau macOS.
  • Mesin Docker jika Anda menggunakan Linux.

Semua contoh dalam tutorial ini akan menggunakan Distribusi Linux minimal yang disebut Alpine Linux, menjalankan versi NGINX terbaru yang tersedia. Pada tulisan ini, v1.21.1 adalah versi terbaru.

Membuat Proxy Terbalik NGINX PHP-FPM di Docker

Salah satu bahasa pemrograman paling populer, PHP sering menjadi kasus penggunaan untuk proxy terbalik. PHP-FPM atau Fast CGI Process Manager adalah produk hebat yang digunakan untuk mem-proxy lalu lintas di dunia PHP. Menggunakan PHP-FPM dalam wadah Docker dan NGINX di wadah lain, Anda dapat menyiapkan PHP-FPM untuk mendengarkan dan menanggapi permintaan pada port jaringan, membantu dalam jaringan dua wadah bersama-sama.

Bonus! Tutorial ini juga akan memberikan contoh penggunaan NodeJS sebagai proxy terbalik. Waspadai pemanggilan NodeJS.

Sekarang mari kita siapkan container NGINX dan container PHP-FPM Docker untuk melihat bagaimana keduanya bekerja sama dalam mem-proxy permintaan dari browser melalui NGINX ke backend dan backend PHP-FPM.

1. Pertama, buat direktori untuk memuat file konfigurasi Anda. Direktori ini akan berisi semua file konfigurasi yang diperlukan untuk menyediakan kedua kontainer. Dalam contoh ini, direktori C:\Articles\NGINX-PHP digunakan.

2. Selanjutnya buat Dockerfile dengan isi sebagai berikut. Dockerfile di bawah ini akan memberi tahu mesin Docker untuk mengunduh nginx:mainline-alpine image dari repositori Docker Hub dan akan menyalin file konfigurasi NGINX yang akan Anda buat ke dalam image untuk menyediakan konfigurasi NGINX kustom.

# The image to pull the base configuration from
FROM nginx:mainline-alpine
# The directory where additional files will be referenced
WORKDIR C:\Articles\NGINX-PHP
# Copy the custom default.conf from the WORKDIR (.) and overwrite the existing internal configuration in the NGINX container
COPY ./default.conf /etc/nginx/conf.d/default.conf

Ambil NodeJS Dockerfile untuk menyiapkan image NodeJS Docker di repositori ATA Scripts Github!

3. Selanjutnya, buat file docker-compose.yml file, yang berisi sebagai berikut. File Docker Compose ini akan memberitahu Docker untuk membuat dua container, web dan php menjalankan NGINX dan PHP-FM, masing-masing.

# The specification version of docker-compose
version: "3.9"
# The collection of applications composing this service
services:
  # The NGINX custom container, and the name, web, will function as the host name of the container
  web:
    # Instead of referencing image: nginx:mainline-alpine here, use build to
    # reference the current directory (.), which will look for a dockerfile
    # by default. In this tutorial, this is C:\Articles\NGINX-PHP
    build: .
    # The external directory location to map to an internal location
    volumes:
      - C:\Articles\NGINX-Content:/usr/share/nginx/html
    # The external port mapping to internal port mapping
    ports:
      - "80:80"
  # The name, php, will also function as the host name of the container
  php:
    image: php:fpm-alpine
    ports:
      - "9000:9000"
    # It is important that both containers can reference the same files
    volumes:
      - C:\Articles\NGINX-Content:/usr/share/nginx/html

Ambil file NodeJS Docker Compose untuk menyiapkan image NodeJS Docker di repositori ATA Scripts Github!

4. Buat file konfigurasi NGINX, default.conf , dengan berikut ini. File di bawah ini mendefinisikan konfigurasi NGINX singkat yang membuat pendengar situs dan mengirimkan permintaan konten ke penampung PHP.

server {
    # The port to listen on
    listen 80;
    # The root directory, which must exactly match the internal volume share
    root /usr/share/nginx/html;

    # For all files with the PHP extension run the following
    location ~ ^/.+\.php(/|$) {
        # Pass the request to the host "php" and port 9000 (default PHP-FPM port).
        # The "php" host name is generated from the application name in the
        # Docker Compose file that was previously defined.
        fastcgi_pass  php:9000;
				# Include the default NGINX FastCGI Parameters
        include       fastcgi_params;
				# Define one additional parameter telling PHP-FPM where to find the file
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Ambil file konfigurasi NodeJS NGINX untuk menyiapkan NodeJS di NGINX di repositori ATA Scripts Github!

5. Buka sesi terminal dan navigasikan ke C:\Articles\NGINX-PHP direktori.

6. Jalankan perintah docker-compose up untuk menghasilkan dan memulai layanan kustom Anda. Tindakan ini akan memunculkan kedua kontainer.

7. Selanjutnya, buat file PHP bernama index.php di C:\Articles\NGINX-Content dan rekatkan konten berikut. File ini akan digunakan untuk menguji apakah NGINX dapat melayani dan memproses file melalui PHP. phpinfo() perintah akan menampilkan halaman informasi PHP untuk memverifikasi bahwa wadah berfungsi.

<?php phpinfo(); ?>

Alih-alih file PHP, unduh file index.js di repositori ATA Scripts Github!

8. Terakhir, buka browser web dan navigasikan ke http://localhost/index.php untuk memverifikasi bahwa NGINX menyajikan file PHP seperti yang diharapkan. Dalam contoh di bawah ini, PHP mengembalikan versi 8.0.8, tetapi versi Anda mungkin berbeda.

Mem-proxy NodeJS dan PHP-FPM dari NGINX

Sekarang setelah Anda mem-proksi PHP dan NodeJS satu per satu, bagaimana cara Anda mem-proksi kedua backend secara bersamaan? Mungkin, Anda memiliki aplikasi kompleks yang terdiri dari komponen NodeJS dan PHP. Agar ini berfungsi, Anda perlu memperluas file Docker Compose Anda untuk menyertakan kedua backend.

1. Pertama, buat direktori untuk memuat file konfigurasi Anda. Dalam contoh ini, direktori C:\Articles\NGINX-Both digunakan.

2. Buat Dockerfile dan rekatkan menggunakan konten berikut. Sejauh ini, tidak banyak perbedaan sama sekali dari membangun PHP-FPM atau wadah NodeJS secara individual.

# The image to pull the base configuration from
FROM nginx:mainline-alpine
# The directory where any additional files will be referenced
WORKDIR C:\Articles\NGINX-Both
# Copy the custom default.conf and overwrite the existing internal configuration
COPY ./default.conf /etc/nginx/conf.d/default.conf

3. Selanjutnya, buat file docker-compose.yml file, yang berisi sebagai berikut. Sekarang Anda akan melihat bahwa wadah lain telah diperkenalkan bernama node .

# The specification version of docker-compose
version: "3.9"
# The collection of containers making up your application
services:
  # The NGINX custom container
  web:
    # Instead of referencing image: nginx:mainline-alpine here, use build to
    # reference the current directory (.) and will look for a dockerfile by default
    build: .
    # The external directory location to map to an internal location
    volumes:
      - C:\Articles\NGINX-Content:/usr/share/nginx/html
    # The external port mapping to internal port mapping
    ports:
      - "80:80"
  node:
    image: node:current-alpine
    # Override the existing entrypoint to tell Node to execute the index.js file
    entrypoint: ['node','/usr/share/nginx/html/index.js']
    ports:
      - "3000:3000"
    # It is important that all containers can reference the same files
    volumes:
      - C:\Articles\NGINX-Content:/usr/share/nginx/html
  php:
    image: php:fpm-alpine
    ports:
      - "9000:9000"
    volumes:
      - C:\Articles\NGINX-Content:/usr/share/nginx/html

4. Selanjutnya, buat file konfigurasi NGINX, default.conf , dengan berikut ini. Perhatikan proxy_pass garis. Baris ini akan meneruskan permintaan ke node tuan rumah.

server {
    # The port to listen on
    listen 80;
    # The root directory should exactly match the internal volume share
    root /usr/share/nginx/html;

    # For all files with the PHP extension run the following to route to PHP-FPM
    location ~ ^/.+\.php(/|$) {
        # Pass the request to the host "php" and port 9000 (default PHP-FPM port)
        fastcgi_pass  php:9000;
		# Include the default NGINX FastCGI Parameters
        include       fastcgi_params;
		# Define one additional parameter telling PHP-FPM where to find the file
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # For all files with the JS extension run the following to route to NodeJS
    location ~ ^/.+\.js(/|$) {
        # Pass the request to the host "node" and port 3000 (default NodeJS port)
        proxy_pass  http://node:3000;
    }
}

5. Buka terminal dan navigasikan ke C:\Articles\NGINX-Both direktori.

6. Jalankan perintah docker-compose up untuk menghasilkan dan memulai layanan kustom Anda seperti sebelumnya.

Selanjutnya, buat file index.js di C:\Articles\NGINX-Content direktori dan file index.php di direktori yang sama, jika belum ada, untuk menguji proxy NGINX kedua backend.

index.js

// Assign the HTTP server object, built-in to NodeJS
var http = require('http');

// Create the server, on port 3000, and output the text content "Hello World!"
http.createServer(function (req, res) {
    res.write('Hello World!');
    res.end();
}).listen(3000, function(){
    console.log("server start at port 3000");
});

index.php

<?php phpinfo(); ?>

8. Terakhir, buka browser web dan navigasikan ke http://localhost/index.js dan http://localhost/index.php. Anda sekarang akan melihat bahwa keduanya dapat diakses, seperti yang ditunjukkan di bawah ini.

Kesimpulan

Sekarang setelah Anda berhasil mem-proksi container PHP-FPM dan container NodeJS, bahkan pada saat yang sama, mengapa tidak mencoba load-balancing beberapa container NGINX?

Menggunakan proxy terbalik NGINX di Docker membuka dunia kemungkinan untuk mengelompokkan aplikasi dan lalu lintas dengan benar di antara wadah!


Docker
  1. Menyiapkan server Nginx Reverse Proxy di Debian Linux

  2. Cara Mengatur Nginx sebagai Proxy Terbalik di Ubuntu 20.04

  3. Cara Membuat Docker Swarm Manager dan Node di Linode

  1. Reverse Proxy dengan Nginx:Panduan Pengaturan Langkah-demi-Langkah

  2. Buat, Beri Tag, dan Unggah Gambar Docker Anda Sendiri

  3. Cara membuat Gambar Docker dari Wadah dan File Docker

  1. Cara Mengatur &Menggunakan NGINX sebagai Proxy Terbalik

  2. Cara Mengatur Proksi Terbalik Nginx

  3. Instal dan konfigurasikan Platform eXo dengan Nginx sebagai proxy terbalik pada Debian 8 VPS