Heim Betrieb und Instandhaltung Nginx So verwenden Sie Nginx als Proxy für mehrere Anwendungsseiten in Docker

So verwenden Sie Nginx als Proxy für mehrere Anwendungsseiten in Docker

May 13, 2023 pm 03:55 PM
docker nginx

Wie erfolgt ein Proxy (wie kommuniziert man zwischen Containern)?

Sie können die Proxy-Funktion von Nginx direkt verwenden (siehe entsprechende Funktionen separat).

Docker Es gibt die folgenden 4 Hauptwege der Kommunikation zwischen Containern:

- Zugriff über Container-IP: Nachdem der Container neu gestartet wurde, wird der IP wird sich ändern.

- Zugriff über die IP:Port des Hosts: Wenn sich die IP des Hosts ändert, muss jede Anwendung geändert und der Port gebunden werden, was problematisch ist.

- Verknüpfungen durch Links aufbauen: Eine zu große Abhängigkeit voneinander ist der Aufrechterhaltung nicht förderlich.

- Benutzerdefiniertes Netzwerk: Container im selben Bridge-Netzwerk können aufeinander zugreifen.

Natürlich werden wir eine benutzerdefinierte Netzwerkmethode wählen, um verwandte Anwendungen mit demselben Netzwerk zu verknüpfen. Auf diese Weise besteht tatsächlich keine Abhängigkeit zwischen Anwendungen, Agenten und Proxys pflegen, aber auch einfach zu migrieren. Auch praktisch. Die Konfiguration ist kein Problem. Ersetzen Sie einfach den regulären IP- oder Domänennamen durch den entsprechenden Containernamen.

1. Unified Network

Also müssen Sie zuerst ein gemeinsames Brückennetzwerk erstellen:

docker network create proxy-network

# 查看
docker network ls
Nach dem Login kopieren
# ?? Die endgültige Verzeichnisstruktur ist wie folgt:

proxy-nginx
├── docker-compose.yml
├── logs # 日志
│  └── error.log
├── nginx
│  ├── dockerfile
│  ├── nginx.conf
│  └── startup.sh
├── sites # 被代理站点配置
│  ├── baipiaoquan.com.conf
│  └── chaohuahui.com.conf
└── ssl # 证书文件
  └── baipiaoquan.com.pem
Nach dem Login kopieren
Einige Dateien werden während des anschließenden laufenden Prozesses generiert. Bei der Konfiguration müssen Sie nur die erforderlichen Dateien und Verzeichnisse erstellen.
docker-compose.yml

version: "3"

networks:
 default:
  external:
   name: proxy-network

services:
 nginx:
  build:
   context: ./nginx
  volumes:
   - ./logs:/var/log/nginx
   - ./sites:/etc/nginx/sites-available
   - ./ssl:/etc/nginx/ssl
  ports:
   - "80:80"
   - "443:443"
Nach dem Login kopieren

Binden Sie die externen Ports 80 und 443 an den Proxyserver, und alle Anwendungen können von hier eingehen.

dockerfile


from nginx:alpine

label maintainer="chuoke"

copy nginx.conf /etc/nginx/

run apk update
  && apk upgrade
  && apk add --no-cache openssl
  && apk add --no-cache bash

run set -x ;
  addgroup -g 82 -s www-data ;
  adduser -u 82 -d -s -g www-data www-data && exit 0 ; exit 1

add ./startup.sh /opt/startup.sh

run sed -i 's/.//g' /opt/startup.sh

cmd ["/bin/bash", "/opt/startup.sh"]

expose 80 443
Nach dem Login kopieren

Die laufende Benutzergruppe und die Benutzer-WWW-Daten werden hier erstellt, um die Konfiguration und Steuerung zu erleichtern. Dieser Name wird bei der Konfiguration verwendet Nginx.

nginx.conf


user www-data;
worker_processes 4;
pid /run/nginx.pid;
daemon off;

events {
 worker_connections 2048;
 multi_accept on;
 use epoll;
}

http {
 server_tokens off;
 sendfile on;
 tcp_nopush on;
 tcp_nodelay on;
 keepalive_timeout 15;
 types_hash_max_size 2048;
 client_max_body_size 20m;
 include /etc/nginx/mime.types;
 default_type application/octet-stream;
 access_log /dev/stdout;
 error_log /dev/stderr;

 gzip on;
 gzip_disable "msie6";

 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-sha:ecdhe-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';

 include /etc/nginx/conf.d/*.conf;
 include /etc/nginx/sites-available/*.conf;

 open_file_cache off; # disabled for issue 619
 charset utf-8;
}
Nach dem Login kopieren

Kopieren Sie einfach den Standardinhalt von nginx. Beachten Sie, dass der Benutzername geändert werden muss Das Gleiche wie bei der vorherigen Einstellung.

Startup.sh


#!/bin/bash

# start crond in background
crond -l 2 -b

# start nginx in foreground
nginx
Nach dem Login kopieren

Dies wird zum Starten des Nginx-Programms verwendet. Der Inhalt ist derzeit relativ klein, hauptsächlich aus Gründen der Bequemlichkeit zukünftiger Inhaltserweiterungen.

Starten Sie den Proxy-Service-Container


docker-compose up -d nginx
Nach dem Login kopieren
Nach dem Login kopieren

Überprüfen Sie, ob der Start ein normales Docker-Compose-PS ist. Wenn nicht, überprüfen Sie die Konfiguration auf Fehler.

Das war's, lassen Sie es erst einmal und erstellen Sie die Anwendung.


3. Anwendung hinzufügen

Eine Website hinzufügen https://baipiaoquan.com/.

Anwendungscontainer konfigurieren

Verwenden Sie auch Docker-Compose, um Anwendungen zu erstellen.

Dies ist ein PHP-Projekt, daher erfordert diese Anwendung mindestens zwei Service-Container, Nginx und PHP-FPM. Die Projektverzeichnisstruktur ist wie folgt:

baipiaoquan/
├── docker-compose.yml
├── log
│  └── nginx
│    └── error.log
├── nginx
│  ├── dockerfile
│  ├── log
│  ├── nginx.conf
│  ├── sites
│  │  └── baipiaoquan.com.conf
│  ├── ssl
│  │  ├── baipiaoquan.com.key
│  │  ├── baipiaoquan.com.pem
│  └── startup.sh
└── php-fpm
  ├── dockerfile
  └── php.ini
Nach dem Login kopieren

docker-compose .yml# 🎜🎜#
version: '3'

networks:
 proxy:
  external:
    name: ${proxy_network_name}
 backend:
  driver: ${networks_driver}

services:
 php-fpm:
   build:
    context: ./php-fpm
   volumes:
    - ./php-fpm/php.ini:/usr/local/etc/php/php.ini
    - ${app_code_path_host}:${app_code_path_container}${app_code_container_flag}
   networks:
    - backend

 nginx:
   build:
    context: ./nginx
    args:
     - php_upstream_container=${nginx_php_upstream_container}
     - php_upstream_port=${nginx_php_upstream_port}
   volumes:
    - ${app_code_path_host}:${app_code_path_container}${app_code_container_flag}
    - ./log:/var/log/nginx
    - ./sites:/etc/nginx/sites-available
    - ./ssl:/etc/nginx/ssl
   container_name: ${compose_project_name}_nginx
   depends_on:
    - php-fpm
   networks:
    - proxy
    - backend
Nach dem Login kopieren

Um die Anpassung zu erleichtern, werden hier Umgebungsvariablen verwendet.

Beachten Sie den Containernamen von Nginx Containername: ${compose_project_name}_nginx. Dieser Wert ist kritisch und wird in nachfolgenden Proxys verwendet.

.env

# 宿主机中代码的位置
app_code_path_host=../

# 容器中代码的位置
app_code_path_container=/var/www

# 这个是抄的 laradock
app_code_container_flag=:cached

# 选择机器上的存储路径。适用于所有储存系统
data_path_host=~/.baipiaoquan/data

### drivers ################################################

# all volumes driver 
volumes_driver=local 

# 网络驱动 
networks_driver=bridge 

# 代理网络名称,这是前面创建的 
proxy_network_name=proxy-network

### docker compose files ##################################
# 
compose_file=docker-compose.yml

# change the separator from : to ; on windows
compose_path_separator=:

# 项目名称
compose_project_name=baipiaoquan
Nach dem Login kopieren

Der verwendete Proxy-Netzwerkname lautet: Proxy-Netzwerk, das zuvor erstellt wurde;

Der Containername von nginx lautet: baipiaoquan_nginx.

nginx’s dockerfile

Diese Datei kann direkt aus der vorherigen übernommen und dann über PHP-bezogene Informationen hinzugefügt werden.

from nginx:alpine

copy nginx.conf /etc/nginx/

run apk update
  && apk upgrade
  && apk --update add logrotate
  && apk add --no-cache openssl
  && apk add --no-cache bash

run set -x ;
  addgroup -g 82 -s www-data ;
  adduser -u 82 -d -s -g www-data www-data && exit 0 ; exit 1

arg php_upstream_container=php-fpm
arg php_upstream_port=9000

# set upstream conf and remove the default conf
run echo "upstream php-upstream { server ${php_upstream_container}:${php_upstream_port}; }" > /etc/nginx/conf.d/upstream.conf
  && rm /etc/nginx/conf.d/default.conf

add ./startup.sh /opt/startup.sh
run sed -i 's/.//g' /opt/startup.sh

cmd ["/bin/bash", "/opt/startup.sh"]

expose 80 443
Nach dem Login kopieren

php-fpm dockerfile

from php:7.3-fpm

arg puid=1000

env puid ${puid}

arg pgid=1000

env pgid ${pgid}

run groupmod -o -g ${pgid} www-data &&
  usermod -o -u ${puid} -g www-data www-data

expose 9000

workdir /var/www

cmd ["php-fpm"]
Nach dem Login kopieren
Vergessen Sie nicht die Datei php.ini, Sie können auch deren Standard verwenden, dann müssen Sie dies entsprechend konfigurieren Löschen.

Konfiguration des Dienstes baipiaoquan.com.conf

server {

  listen 80 default_server;

  # for https
  listen 443 ssl default_server;
  ssl_certificate /etc/nginx/ssl/3243258_baipiaoquan.com.pem;
  ssl_certificate_key /etc/nginx/ssl/3243258_baipiaoquan.com.key;
  ssl_session_timeout 5m;
  ssl_protocols tlsv1 tlsv1.1 tlsv1.2;
  ssl_ciphers ecdhe-rsa-aes128-gcm-sha256:high:!anull:!md5:!rc4:!dhe; 
  ssl_prefer_server_ciphers on;

  add_header x-frame-options "sameorigin";
  add_header x-xss-protection "1; mode=block";
  add_header x-content-type-options "nosniff";

  # localhost 一定要
  server_name localhost baipiaoquan.com www.baipiaoquan.com;
  root /var/www/; # 这个和前面的配置保持一致
  index index.php index.html index.htm;

  location / {
     try_files $uri $uri/ /index.php$is_args$args;
  }

  location ~ .php$ {
    try_files $uri /index.php =404;
    fastcgi_pass php-upstream; # 这个是 nginx dockerfile 里配置的
    fastcgi_index index.php;
    fastcgi_buffers 16 16k;
    fastcgi_buffer_size 32k;
    fastcgi_param script_filename $document_root$fastcgi_script_name;
    #fixes timeouts
    fastcgi_read_timeout 600;
    include fastcgi_params;
  }

  location ~ /.ht {
    deny all;
  }

  location /.well-known/acme-challenge/ {
    root /var/www/letsencrypt/;
    log_not_found off;
  }
}
Nach dem Login kopieren

Ich habe hier alles konfiguriert, aber es kann tatsächlich optimiert werden und muss nur konfiguriert werden.

Starten Sie die Anwendung


An diesem Punkt können Sie den Dienst von baipiaoquan.com starten und im Verzeichnis von ausführen baipiaoquan:

docker-compose up -d nginx
Nach dem Login kopieren
Nach dem Login kopieren

Wenn nichts Unerwartetes passiert, sollte die Anwendung starten und Dienste empfangen können. Sie können es auch testen, indem Sie den Container aufrufen und auf localhost zugreifen, um zu sehen, ob das Ergebnis Ihren Wünschen entspricht. Ich habe es so getestet:

docker-compose exec nginx wget localhost
Nach dem Login kopieren
Dann habe ich mir die Größe der zurückgegebenen Daten angesehen und anhand der Situation beurteilt, ob es erfolgreich war.
Mit dem folgenden Befehl können Sie überprüfen, ob die Anwendung erfolgreich mit dem Proxy-Netzwerk verbunden wurde:

docker network inspect proxy-network
Nach dem Login kopieren

Der nächste Schritt besteht darin, diese Anwendung für alle auf der Welt zugänglich zu machen.

Proxy-Konfiguration zum Nginx-Proxy hinzufügen


Hinweis: Sie müssen zuerst die Anwendung und dann den Proxy starten. Andernfalls wird es so aussehen, als ob Nginx den Upstream nicht finden kann und einen Fehler meldet.

Speicherort: Proxy-nginx/sites/baipiaoquan.com.conf Kopieren Sie einfach die obige Konfiguration und ändern Sie einige Stellen. Die endgültige Konfiguration ist wie folgt:

# 我这配的仅支持 https,如果没要求,这个就不需要 

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

server {

  # 如果是 http 就配置这个
  # listen 80 default_server;

  # 如果是 https 就配置这个
  listen 443 ssl;
  ssl_certificate      /etc/nginx/ssl/3243258_baipiaoquan.com.pem;
  ssl_certificate_key    /etc/nginx/ssl/3243258_baipiaoquan.com.key;
  ssl_session_timeout    5m;
  ssl_protocols       tlsv1 tlsv1.1 tlsv1.2;
  ssl_ciphers        ecdhe-rsa-aes128-gcm-sha256:ecdhe:ecdh:aes:high:!null:!anull:!md5:!adh:!rc4;
  ssl_prefer_server_ciphers on;

  server_name baipiaoquan.com www.baipiaoquan.com;

  add_header x-frame-options "sameorigin";
  add_header x-xss-protection "1; mode=block";
  add_header x-content-type-options "nosniff";

  location / {
    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_set_header x-forwarded-host  $host;
    proxy_set_header x-forwarded-port  $server_port;
    proxy_pass http://baipiaoquan_nginx/; # 这个值就是应用 nginx 的容器名称
  }
}
Nach dem Login kopieren
#🎜🎜 # Laden Sie die Konfiguration des Proxyservers neu und führen Sie sie im Nginx-Proxy-Verzeichnis aus:
# 先测试下配置文件,这步一定要执行成功
docker-compose exec nginx nginx -t

# 如果提示成功,则重新加载,否则就按提示检查修改配置文件
docker-compose exec nginx nginx -s reload
Nach dem Login kopieren

Moment mal, wenn alles gut geht, sollten jetzt Menschen auf der ganzen Welt auf diesen https zugreifen können:/ /baipiaoquan.com/ Website.

Wenn Sie weitere Anwendungen hinzufügen müssen, sind die Logik und der Prozess gleich. Ich habe beispielsweise eine weitere Anwendung hinzugefügt: https://chaohhuahui.com/, und ich kann ihre IP-Adressen anpingen, um festzustellen, ob sie identisch sind.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Nginx als Proxy für mehrere Anwendungsseiten in Docker. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So ändern Sie die Docker -Bildquelle in China So ändern Sie die Docker -Bildquelle in China Apr 15, 2025 am 11:30 AM

Sie können zur Quelle der Inlandsspiegel wechseln. Die Schritte sind wie folgt: 1. Bearbeiten Sie die Konfigurationsdatei /etc/docker/daemon.json und fügen Sie die Spiegelquellenadresse hinzu; 2. Starten Sie den Docker Service Sudo SystemCtl Docker neu, um die Download -Geschwindigkeit und -stabilität des Bilddownloads zu verbessern.

So erstellen Sie einen Spiegel in Docker So erstellen Sie einen Spiegel in Docker Apr 15, 2025 am 11:27 AM

Schritte zum Erstellen eines Docker -Images: Schreiben Sie eine Dockerfile, die die Build -Anweisungen enthält. Erstellen Sie das Bild im Terminal mit dem Befehl Docker Build. Markieren Sie das Bild und weisen Sie Namen und Tags mit dem Befehl Docker Tag zu.

So verwenden Sie Docker Desktop So verwenden Sie Docker Desktop Apr 15, 2025 am 11:45 AM

Wie benutze ich Docker Desktop? Docker Desktop ist ein Werkzeug zum Ausführen von Docker -Containern auf lokalen Maschinen. Zu den zu verwendenden Schritten gehören: 1.. Docker Desktop installieren; 2. Start Docker Desktop; 3.. Erstellen Sie das Docker -Bild (mit Dockerfile); 4. Build Docker Image (mit Docker Build); 5. Docker -Container ausführen (mit Docker Run).

So lesen Sie die Docker -Version So lesen Sie die Docker -Version Apr 15, 2025 am 11:51 AM

Um die Docker -Version zu erhalten, können Sie die folgenden Schritte ausführen: Führen Sie den Befehl Docker "Docker --version" aus, um die Client- und Serverversionen anzuzeigen. Für Mac oder Windows können Sie auch Versionsinformationen über die Registerkarte Version der Docker -Desktop -GUI oder das Menü Docker Desktop anzeigen.

So aktualisieren Sie das Bild von Docker So aktualisieren Sie das Bild von Docker Apr 15, 2025 pm 12:03 PM

Die Schritte zur Aktualisierung eines Docker -Images sind wie folgt: Ziehen Sie das neueste Bild -Tag. Neues Bild Löschen Sie das alte Bild für ein bestimmtes Tag (optional) den Container neu (falls erforderlich) neu starten Sie neu (falls erforderlich).

So sehen Sie Protokolle von Docker So sehen Sie Protokolle von Docker Apr 15, 2025 pm 12:24 PM

Zu den Methoden zum Anzeigen von Docker -Protokollen gehören: Verwenden des Befehls docker Protokolle, z. cat /var/log/container_name.log Verwenden Sie den Befehl docker-compose-Protokolle von Docker Compose, zum Beispiel: Docker-compose -f Docker-com

So speichern Sie das Docker -Bild So speichern Sie das Docker -Bild Apr 15, 2025 am 11:54 AM

Um das Bild in Docker zu speichern, können Sie den Befehl docker comit verwenden, um ein neues Bild zu erstellen, das den aktuellen Status des angegebenen Containers Syntax: Docker Commit [Optionen] Container -ID -Bildname enthält. Um das Bild im Repository zu speichern, können Sie den Befehl Docker Push, Syntax: Docker -Push -Bildname [: Tag] verwenden. Um gespeicherte Bilder zu importieren, können Sie den Befehl Docker Pull, Syntax: Docker Pull Bildname [: Tag] verwenden.

So erstellen Sie ein privates Repository von Docker So erstellen Sie ein privates Repository von Docker Apr 15, 2025 am 11:06 AM

Sie können Docker -private Repositorys erstellen, um Containerbilder sicher zu speichern und zu verwalten und strenge Kontrolle und Sicherheit bereitzustellen. Zu den Schritten gehören: Erstellen eines Repositorys, Gewährung von Zugriff, Bereitstellung eines Repositorys, Drückens eines Bildes und Ziehen eines Bildes. Zu den Vorteilen gehören Sicherheit, Versionskontrolle, reduzierter Netzwerkverkehr und Anpassung.

See all articles