GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Vytvořte NGINX Reverse Proxy v Dockeru a naučte se 1 novou dovednost!

Potřebujete výkonné webové servery pro zpracování požadavků do vaší aplikace Docker? Použití reverzního proxy NGINX v Dockeru vám dává možnost zpracovávat a spravovat požadavky webových aplikací do a z kontejnerové aplikace různými způsoby.

V tomto článku se dozvíte, jak vytvořit NGINX Reverse Proxy v Dockeru a nakonfigurovat kontejner tak, aby reverzoval požadavky proxy do a z jiného kontejneru. Čtěte dále a dozvíte se více!

Předpoklady

Chcete-li pokračovat v tomto tutoriálu, ujistěte se, že máte následující:

  • Docker Desktop – Tento výukový program používá verzi 3.5.2.
  • Windows 10 – Výukový program používá Windows ke spuštění Dockeru, ale stejné obecné kroky lze použít také pro Linux nebo macOS.
  • Motor Docker, pokud používáte Linux.

Všechny příklady v tomto tutoriálu budou používat minimální distribuci Linuxu s názvem Alpine Linux s nejnovější dostupnou verzí NGINX. V době psaní tohoto článku je v1.21.1 nejnovější verze.

Vytvoření reverzního proxy PHP-FPM NGINX v Dockeru

PHP, jeden z nejpopulárnějších programovacích jazyků, je často případem použití pro reverzní proxy. PHP-FPM nebo Fast CGI Process Manager je skvělý produkt, který lze použít pro proxy provoz ve světě PHP. Pomocí PHP-FPM v kontejneru Docker a NGINX v jiném můžete nastavit PHP-FPM tak, aby naslouchalo požadavkům na síťovém portu a odpovídalo na ně, což pomáhá při propojování dvou kontejnerů dohromady.

Bonus! Tento tutoriál také poskytne příklady použití NodeJS jako reverzního proxy. Dávejte pozor na popisky NodeJS.

Pojďme nyní nastavit jak kontejner NGINX, tak kontejner PHP-FPM Docker, abychom viděli, jak spolupracují při zasílání požadavků z prohlížeče přes NGINX na backend PHP-FPM a zpět.

1. Nejprve vytvořte adresář, který bude obsahovat vaše konfigurační soubory. Tento adresář bude obsahovat všechny konfigurační soubory potřebné k zajištění obou kontejnerů. V tomto příkladu je to adresář C:\Articles\NGINX-PHP se používá.

2. Dále vytvořte Dockerfile s následujícím obsahem. Níže uvedený soubor Dockerfile sdělí enginu Docker, aby si stáhl nginx:mainline-alpine obrázek z úložiště Docker Hub a zkopíruje konfigurační soubor NGINX, který budete vytvářet, do obrázku, abyste získali vlastní konfiguraci NGINX.

# 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

Uchopte soubor NodeJS Dockerfile a nastavte obraz NodeJS Docker v úložišti Github ATA Scripts!

3. Dále vytvořte soubor docker-compose.yml soubor, obsahující následující. Tento soubor Docker Compose řekne Dockeru, aby vytvořil dva kontejnery, web a php se systémem NGINX a PHP-FM.

# 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

Uchopte soubor NodeJS Docker Compose a nastavte obraz NodeJS Docker v úložišti Github ATA Scripts!

4. Vytvořte konfigurační soubor NGINX default.conf , s následujícím. Níže uvedený soubor definuje krátkou konfiguraci NGINX, která vytváří posluchače webu a odesílá požadavky na obsah do kontejneru 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;
    }
}

Uchopte konfigurační soubor NodeJS NGINX a nastavte NodeJS v NGINX v úložišti Github ATA Scripts!

5. Otevřete terminálovou relaci a přejděte do C:\Articles\NGINX-PHP adresář.

6. Spusťte příkaz docker-compose up vygenerovat a spustit vlastní službu. Tato akce vyvolá oba kontejnery.

7. Dále vytvořte soubor PHP s názvem index.php v C:\Articles\NGINX-Content a vložte následující obsah. Tento soubor bude použit k testování, že NGINX může obsluhovat a zpracovávat soubory přes PHP. phpinfo() příkaz vypíše informační stránku PHP, aby ověřil, že kontejner funguje.

<?php phpinfo(); ?>

Namísto souboru PHP si stáhněte soubor index.js v úložišti Github ATA Scripts!

8. Nakonec otevřete webový prohlížeč a přejděte na http://localhost/index.php, abyste ověřili, že NGINX poskytuje soubor PHP podle očekávání. V níže uvedeném příkladu PHP vrací verzi 8.0.8, ale vaše verze se může lišit.

Proxying NodeJS i PHP-FPM z NGINX

Nyní, když jste vytvořili proxy PHP i NodeJS jednotlivě, jak byste postupovali při současném proxy obou backendů? Možná máte složitou aplikaci, která se skládá z komponent NodeJS i PHP. Aby to fungovalo, budete muset rozšířit svůj soubor Docker Compose tak, aby zahrnoval oba backendy.

1. Nejprve vytvořte adresář, který bude obsahovat vaše konfigurační soubory. V tomto příkladu je to adresář C:\Articles\NGINX-Both se používá.

2. Vytvořte Dockerfile a vložte pomocí následujícího obsahu. Zatím není žádný velký rozdíl od individuálního vytváření kontejneru PHP-FPM nebo NodeJS.

# 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. Dále vytvořte soubor docker-compose.yml soubor, obsahující následující. Nyní uvidíte, že byl představen další kontejner s názvem 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. Dále vytvořte konfigurační soubor NGINX default.conf , s následujícím. Všimněte si proxy_pass čára. Tento řádek předá požadavek node hostitel.

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. Otevřete terminál a přejděte do C:\Articles\NGINX-Both adresář.

6. Spusťte příkaz docker-compose up vygenerovat a spustit vlastní službu jako dříve.

Dále vytvořte soubor index.js v C:\Articles\NGINX-Content adresář a soubor index.php ve stejném adresáři, pokud ještě neexistuje, otestovat NGINX proxy pro oba backendy.

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. Nakonec otevřete webový prohlížeč a přejděte na http://localhost/index.js a http://localhost/index.php. Nyní byste měli vidět, že oba jsou přístupné, jak je znázorněno níže.

Závěr

Nyní, když jste úspěšně vytvořili proxy kontejner PHP-FPM i kontejner NodeJS, a to i ve stejnou dobu, proč nezkusit vyvažování zátěže více kontejnerů NGINX?

Použití reverzního proxy NGINX v Dockeru otevírá svět možností správného segmentování aplikací a provozu mezi kontejnery!


Docker
  1. Nastavení reverzního proxy serveru Nginx v systému Debian Linux

  2. Jak nastavit Nginx jako reverzní proxy na Ubuntu 20.04

  3. Nainstalujte a nakonfigurujte platformu eXo s Nginx jako reverzní proxy na Debian 8 VPS

  1. Jak nastavit reverzní proxy Nginx

  2. Reverzní proxy s Nginx:Průvodce nastavením krok za krokem

  3. Jak vytvořit Docker Swarm Manager a uzly na Linode

  1. Jak nastavit a používat NGINX jako reverzní proxy

  2. Vytvořte, označte a nahrajte svůj vlastní obrázek dockeru

  3. Jak vytvořit Docker Image z kontejneru a Dockerfile