簡體   English   中英

Docker Nginx 反向代理

[英]Docker Nginx Reverse Proxy

我需要運行多個 WordPress 容器,這些容器全部鏈接到單個 MySQL 容器 + Nginx 反向代理,以便輕松處理 VIRTUAL_HOSTS。

這是我正在嘗試做的事情(目前只有一個 WP):

  • Wordpress (hub.docker.com/_/wordpress/)
  • mysql (hub.docker.com/_/mysql/)
  • Nginx 反向代理 (github.com/jwilder/nginx-proxy)

我在 OSX 上工作,這就是我在終端上運行的:

docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:latest
docker run -e VIRTUAL_HOST=wordpress.mylocal.com --name wordpress --link some-mysql:mysql -p 8080:80 -d wordpress

我的 Docker 在 192.168.99.100 上運行,這讓我遇到了 503 nginx/1.9.12 錯誤 ofc。

然后 192.168.99.100:8080 按預期將我帶到 WordPress。

但是http://wordpress.mylocal.com它不起作用; 它沒有重定向到 192.168.99.100:8080,我不明白我做錯了什么。

有什么建議? 謝謝!

首先,我建議您開始使用 docker-compose ,運行您的容器並查找錯誤將變得更加容易。

至於您的情況,您似乎應該使用 VIRTUAL_PORT 來定向到 8080 上的容器。

其次,您不能將兩個容器(nginx-proxy + wordpress)打盹到主機上的同一個端口。

祝你好運!

根據您的情況,我認為最適合您的解決方案是使用 nginx 反向代理,該代理偵聽 docker 套接字並可以將請求傳遞給不同的虛擬主機。

例如,假設您有 3 個 WP。

WP1 -> port binding to 81:80
WP2 -> port binding to 82:80
WP3 -> port binding to 83:80 

對於它們中的每一個,您都應該使用 docker 環境變量和您要使用的虛擬主機名。

WP1-> foo.bar1
WP2-> foo.bar2
WP3-> foo.bar3

這樣做之后,你應該有 3 個不同的 WP,端口暴露在 81 82 83 上。

現在在這里下載並啟動這個 nginx docker 容器(反向代理) 它應該監聽 docker 套接字並檢索端口 80 上到達您機器的所有數據。當您啟動 WP 容器並通過您提供的環境變量時,他將能夠檢測哪個請求應該到達哪個 WP 實例......

這是您應該如何運行其中一個 WP docker 映像的示例

> docker run -e VIRTUAL_HOST=foo.bar1.com -p 81:80 -d wordpres:tag

在這種情況下,虛擬主機將是來自 http 請求的虛擬主機

一:
使用泊塢窗撰寫。

vi docker-compose.yaml

二:
將其粘貼到文件中:

version: '3'

services:
  nginx-proxy:
    image: budry/jwilder-nginx-proxy-arm:0.6.0
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - certs:/etc/nginx/certs:ro
      - confd:/etc/nginx/conf.d
      - vhostd:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
    labels:
      - com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy
    environment:
      - DEFAULT_HOST=example2.com
    networks:
      - frontend

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion:stable
    restart: always
    volumes:
      - certs:/etc/nginx/certs:rw
      - confd:/etc/nginx/conf.d
      - vhostd:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
#      - LETSENCRYPT_SINGLE_DOMAIN_CERTS=true
#      - LETSENCRYPT_RESTART_CONTAINER=true
      - DEFAULT_EMAIL=example@mail.com
    networks:
      - frontend
    depends_on:
      - nginx-proxy
#########################################################
..The rest of the containers go here..
#########################################################
networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge

volumes:
  certs:
  html:
  vhostd:
  confd:
  dbdata:
  maildata:
  mailstate:
  maillogs:

三:
根據需要配置盡可能多的 docker,並根據自己的喜好進行配置。 這里有些例子:

mysql (MariaDB):

  mysql:
    image: jsurf/rpi-mariadb:latest #MARIADB -> 10 #82eec62cce90
    restart: always
    environment:
      MYSQL_DATABASE: nameExample
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_RANDOM_ROOT_PASSWORD: passwordRoot
      MYSQL_ROOT_HOST: '%'
    ports:
      - "3306:3306"
    networks:
      - backend
    command: --init-file /data/application/init.sql
    volumes:
      - /path_where_it_will_be_saved_on_your_machine/init.sql:/data/application/init.sql
      - /physical_route/data:/var/lib/mysql

nginx-php7.4:

  nginx_php:
    image: tobi312/php:7.4-fpm-nginx-alpine-arm
    hostname: example1.com
    restart: always
    expose:
      - "80"
    volumes:
      - /physical_route:/var/www/html:rw
    environment:
      - VIRTUAL_HOST=example1.com
      - LETSENCRYPT_HOST=example1.com
      - LETSENCRYPT_EMAIL=example1@mail.com
      - ENABLE_NGINX_REMOTEIP=1
      - PHP_ERRORS=1
    depends_on:
      - nginx-proxy
      - letsencrypt
      - mysql
    networks:
      - frontend
      - backend

WordPress:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=exampleuser
      - WORDPRESS_DB_PASSWORD=examplepass
      - WORDPRESS_DB_NAME=exampledb
      - VIRTUAL_HOST=example2.com
      - LETSENCRYPT_HOST=example2.com
      - LETSENCRYPT_EMAIL=example2@mail.com
    volumes:
      - wordpress:/var/www/html #This must be added in the volumes label of step 2

您可以在此處找到許多示例和文檔
您必須小心,因為在某些示例中我放置了用於rpi 的圖像,它們很可能會在amd64intel32系統中出現問題。您應該根據您的 CPU 和操作系統搜索並選擇您感興趣的圖像

四:
運行此命令以啟動所有泊塢窗

docker-compose up -d --remove-orphans

“--remove-orphans”用於刪除不再存在於 docker-compose 文件中的 docker

五:
完成上述步驟后,您可以來詢問您想要什么,我們將很樂意閱讀您的 dockerFile,而不會因為嘗試閱讀大量命令而死

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM