GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak nasadit NGINX Reverse Proxy na Docker

Úvod

Reverzní proxy zachycuje příchozí požadavky a přesměrovává je na příslušný server. Nejenže to zrychluje výkon, ale také posiluje zabezpečení serveru.

Nejjednodušší způsob, jak nastavit a spravovat reverzní proxy, je použít Nginx a Docker. Tato příručka nastavuje dvě vzorové webové služby v kontejnerech Docker a reverzní proxy Nginx pro tyto služby.

V tomto kurzu se dozvíte, jak nastavit reverzní proxy na Dockeru pro dva ukázkové webové servery.

Předpoklady

  • Uživatelský účet s sudo privilegia
  • Okno příkazového řádku/terminálu (Ctrl-Alt-T )
  • Docker nainstalovaný ve vašem systému
  • Docker Compose nainstalovaný ve vašem systému
  • Registrovaný název domény s přidruženým certifikátem SSL

Proč potřebujete reverzní proxy?

Zatímco standardní proxy server chrání klienty, reverzní proxy chrání server .

Reverzní proxy je typ proxy zřízeného za firewallem privátní sítě. Jeho primární rolí je zachytit provoz a směrovat požadavek na příslušný server na backendu.

Hlavními důvody pro použití reverzního proxy je zlepšení zabezpečení a výkon . Pokud máte služby spuštěné na více modulech, můžete přesměrovat všechny požadavky přicházející do sítě tak, aby prošly určitým počtem zadaných portů.

Reverzní proxy navíc zvládnou také šifrování SSL, ukládání do mezipaměti a komprimaci dat.

Krok 1:Vytvořte ukázkovou webovou službu

1. Začněte vytvořením nového adresáře pro první ukázkovou webovou službu. V tomto tutoriálu vytvoříme adresář example1 , ale můžete použít název podle svého výběru.

mkdir example1

2. Přesuňte se do tohoto adresáře:

cd example1

3. Vytvořte konfigurační soubor YAML sestavený pomocí dockeru pro první kontejner, který definuje službu. Použijte textový editor dle vašeho výběru (v tomto příkladu používáme Nano).

sudo nano docker-compose.yml

4. Poté do souboru .yaml přidejte následující obsah:

version: '2'
services:
 app:
  image: nginx
  volumes:
   - .:/usr/share/nginx/html
  ports:
   - "80"

Soubor docker-compose uvádí, že se jedná o aplikaci službu, která používá nginx obraz. Připojí kořenový adresář example1 z hostitele Docker na /usr/share/nginx/html/ . Nakonec konfigurace zpřístupní službu na portu 80 .

Soubor docker-compose.yml soubor se liší v závislosti na službě, kterou chcete spustit. Výše uvedená konfigurace je specifická pro webovou službu, kterou pro tento výukový program vytváříme.

4. Uložte a ukončete soubor.

5. Ve stejném příkladu1 adresář, vytvořte indexový soubor pro webovou službu:

sudo nano index.html

6. Přidejte několik jednoduchých řádků, které se zobrazí na ukázkové webové stránce:

<!DOCTYPE html>
<html>
<head>
<title>Website 1</title>
</head>
<body>
<h1>Hello! This is the first sample website.</h1>
</body>
</html>

7. Uložte a zavřete soubor.

8. Vytvořte nově vytvořenou službu pomocí docker-compose příkaz:

sudo docker-compose build

Pokud používáte předem vytvořený obrázek, jako v tomto příkladu, výstup odpoví aplikace používá obrázek, přeskakující .

9. Dále spusťte kontejner pomocí:

sudo docker-compose up -d

Krok 2:Vytvořte druhou ukázkovou webovou službu

Stejným postupem vytvořte druhou ukázkovou webovou službu.

Pokud jste stále v příkladu 1, vraťte se do domovského adresáře . Chcete-li tak učinit, spusťte cd v okně terminálu.

1. Vytvořte nový adresář, kam uložíte soubor docker-compose a index pro druhý web. Tento adresář pojmenujeme example2 .

mkdir example2

2. Přejděte do příkladu 2 spuštěním:

cd example2

3. Vytvořte soubor docker-compose:

sudo nano docker-compose.yml

4. Definujte službu pomocí stejných specifikací jako v kroku 1. Přidejte do souboru následující obsah:

version: '2'
services:
 app:
  image: nginx
  volumes:
   - .:/usr/share/nginx/html
  ports:
   - "80"

5. Uložte a ukončete soubor.

6. Poté vytvořte indexový soubor pro druhou webovou službu spuštěním:

sudo nano index.html

7. Přidejte obsah do souboru:

<!DOCTYPE html>
<html>
<head>
<title>Website 2</title>
</head>
<body>
<h1>Hello! This is the second sample website.</h1>
</body>
</html>

8. Uložte změny a ukončete soubor.

9. Sestavte druhou službu a spusťte kontejner spuštěním příkazů:

sudo docker-compose build
sudo docker-compose up -d

Krok 3:Seznam kontejnerů

Chcete-li ověřit, zda jsou kontejnery pro obě služby v provozu, vypište všechny kontejnery pomocí příkazu:

docker ps -a

Ve výstupu byste měli vidět kontejnery pro obě webové služby.

Krok 4:Nastavení Reverse Proxy

Dále je třeba nastavit a nakonfigurovat reverzní proxy kontejner. To vyžaduje vytvoření více souborů a podadresářů, které by měly být všechny uloženy v proxy adresář.

Prvním krokem je tedy vytvoření a navigace do proxy adresář. Chcete-li tak učinit, spusťte příkazy:

mkdir proxy
cd proxy

Nakonfigurujte Dockerfile

1. Jakmile se dostanete do proxy adresář, vytvořte Dockerfile pro nový vlastní obrázek:

sudo nano Dockerfile

2. Soubor by měl obsahovat následující:

FROM nginx

COPY ./default.conf /etc/nginx/conf.d/default.conf

COPY ./backend-not-found.html /var/www/html/backend-not-found.html

COPY ./includes/ /etc/nginx/includes/

COPY ./ssl/ /etc/ssl/certs/nginx/

Dockerfile je založen na obrázku nginx. Zkopíruje také řadu souborů z místního počítače:

  • výchozí konfigurace pro službu proxy
  • chybová odpověď HTML
  • Konfigurace a certifikáty proxy a SSL

3. Uložte a ukončete Dockerfile.

Nakonfigurujte soubor nenalezený na backendu

Vytvořte indexový soubor pro nenalezeno odpověď:

sudo nano backend-not-found.html

Přidejte obsah:

<html>
<head><title>Proxy Backend Not Found</title></head>
<body>
<h2>Proxy Backend Not Found</h2>
</body>
</html>

3. Uložte změny a zavřete soubor.

Nakonfigurujte soubor default.conf

1. Vytvořte soubor default.conf soubor v adresáři proxy:

sudo nano default.conf

2. Přidejte obsah:

# web service1 config.
server {
listen 80;
listen 443 ssl http2;
server_name example1.test;

# Path for SSL config/key/certificate
ssl_certificate /etc/ssl/certs/nginx/example1.crt;
ssl_certificate_key /etc/ssl/certs/nginx/example1.key;
include /etc/nginx/includes/ssl.conf;

location / {
include /etc/nginx/includes/proxy.conf;
proxy_pass http://example_app_1;
}

access_log off;
error_log /var/log/nginx/error.log error;
}

# web service2 config.
server {
listen 80;
listen 443 ssl http2;
server_name example2.test;

# Path for SSL config/key/certificate
ssl_certificate /etc/ssl/certs/nginx/example2.crt;
ssl_certificate_key /etc/ssl/certs/nginx/example2.key;
include /etc/nginx/includes/ssl.conf;

location / {
include /etc/nginx/includes/proxy.conf;
proxy_pass http://example2_app_1;
}

access_log off;
error_log /var/log/nginx/error.log error;
}

# Default
server {
listen 80 default_server;

server_name _;
root /var/www/html;

charset UTF-8;

error_page 404 /backend-not-found.html;
location = /backend-not-found.html {
allow all;
}
location / {
return 404;
}

access_log off;
log_not_found off;
error_log /var/log/nginx/error.log error;
}

Konfigurace se skládá ze dvou webových služeb – example1.test a example2.test . Obě součásti serveru naslouchají portu 80 a směrují Nginx na příslušný certifikát SSL.

Nakonfigurujte soubor docker-compose.yml

1. Vytvořte nový docker-compose.yml soubor pro službu proxy:

sudo nano docker-compose.yml

2. Zkopírujte a vložte následující obsah do souboru:

version: '2'
services:
proxy:
build: ./
networks:
- example1
- example2
ports:
- 80:80
- 443:443

networks:
example1:
external:
name: example1_default
example2:
external:
name: example2_default

V tomto souboru připojíte proxy a externí sítě (webové služby příklad1 a příklad2 ). Porty 80/443 služby proxy jsou také vázány na porty 80/443 hostitele Docker.

Generovat klíče a certifikáty

1. Začněte vytvořením podadresáře (ssl ) uvnitř proxy složka:

mkdir ssl

2. Přejděte do ssl podadresář s:

cd ssl

3. Dále spusťte každý dotykový příkaz uvedený níže a vytvořte požadované soubory:

touch example1.crt
touch example1.key
touch example2.crt
touch example2.key

4. Poté pomocí OpenSSL vygenerujte klíče a certifikáty pro vaše webové služby. Pro první webovou službu (příklad1 ), spusťte příkaz:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout example1.key -out example1.crt

Příkaz vygeneruje 2048bitový soukromý klíč RSA a uloží jej do example1.key soubor.

Budete také požádáni o poskytnutí některých informací, které jsou součástí žádosti o certifikát. Některá pole můžete nechat prázdná.

5. Opakujte proces pro vygenerování klíčů a certifikátů pro druhou webovou službu (příklad2 ). V okně terminálu zadejte následující příkaz:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout example2.key -out example2.crt

Tím se vygeneruje 2048bitový soukromý klíč RSA pro example2 a uloží jej do example2.key soubor.

Upravte konfiguraci proxy a SSL

1. Ukončete ssl podadresář a zpět do proxy . Chcete-li to provést, použijte příkaz:

cd ..

2. Poté vytvořte nový podadresář pod názvem includes :

mkdir includes

3. Přejděte do zahrnuje a vytvořte soubory proxy.conf a ssl.conf :

cd includes
touch proxy.conf
touch ssl.conf

4. Dále otevřete proxy.conf soubor:

sudo nano proxy.conf

5. Přidejte následující konfiguraci:

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;
proxy_buffering off;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_intercept_errors on;

6. Uložte a ukončete proxy.conf .

7. Otevřete soubor ssl.conf:

sudo nano ssl.conf

8. Do souboru vložte následující řádky:

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-
ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-
SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-
GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-
AES128-SHAECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-
SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:
DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-
DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:
AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-
CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

Upravit soubor hostitelů

1. Vraťte se na proxy adresář:

cd

2. Otevřete /etc/hosts soubor:

sudo nano etc/hosts

3. Přidejte následující řádky k mapování názvů hostitelů webových služeb na soukromou IP adresu hostitelů Docker:

10.0.2.15 example1.test
10.0.2.15 example2.test

4. Uložte změny a zavřete soubor.

Krok 5:Spusťte reverzní proxy

1. S konfiguračními soubory vytvořte kontejner pomocí příkazu docker-compose:

sudo docker-compose build

2. Poté spusťte kontejner:

sudo docker-compose up -d

3. Ověřte, že máte tři kontejnery – dvě webové služby a jeden kontejner reverzního proxy:

sudo docker ps -a

Krok 6:Zkontrolujte, zda funguje reverzní proxy

Použijte curl pro kontrolu, zda webové služby a reverzní proxy fungují správně. Každá doména by měla odpovědět příslušným výstupem.

1. Spuštěním následujícího příkazu zkontrolujte první webovou službu:

sudo curl example1.test

Výstup odpoví kódem HTML vytvořeným pro example1.test .

2. Poté ověřte, zda druhá webová služba pracuje s reverzním proxy serverem:

sudo curl example2.test

Výstup odpovídá example2.test HTML.


Ubuntu
  1. Jak nastavit reverzní proxy Nginx

  2. Jak nasadit kontejner nginx s Dockerem na Linode

  3. Jak nainstalovat Odoo 10 na CentOS 7 s Nginx jako reverzní proxy

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

  2. Jak nasadit mikroslužby s Dockerem

  3. Jak nainstalovat Odoo 11 na CentOS 7 s Nginx jako reverzní proxy

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

  2. Jak nainstalovat Flectru na CentOS 8 s Nginx jako reverzní proxy

  3. Jak nainstalovat Odoo 14 na CentOS 8 s Nginx jako reverzní proxy