欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > Docker中使用Nginx代理多個應用站點的方法

Docker中使用Nginx代理多個應用站點的方法

熱門標簽:大連電銷外呼系統運營商 泰州智能外呼系統排名 長春電銷外呼系統代理商 百度地圖標注尺寸無法顯示 外呼系統虛擬號碼 接電話機器人罵人 代理外呼系統創業 400電話申請知乎 400電話干嘛怎么申請信用卡

 前言

代理的作用是什么?
- 多個域名解析到同一個服務器

- 方便一臺服務器多個應用只對外開放一個端口

- 訪問應用不需要帶著煩人的端口,直接域名訪問

- 應用隔離

- 降低耦合度

- ...

總的來說就是方便維護,并且在維護一個應用的時候,不影響其他應用。

如何代理 (容器間如何通信)?

直接使用 nginx 的代理功能即可 (相關能力另行查閱),這里麻煩的就是 docker 容器間的通信。

Docker 容器間通信的主要方式有以下 4 種:

- 通過容器 IP 訪問:容器重啟后,IP 會發生變化。

- 通過宿主機的 ip:port 的方式訪問:如果宿主機 IP 改變,就得每個應用都得改一遍,并且還要綁定端口,麻煩。

- 通過 link 建立鏈接:相互依賴的太緊,不利于維護。

- 自定義 network: 在同一個橋接網絡中的容器可以相互訪問。

很明顯,會選擇 自定義 network 的方式,讓相關應用鏈接到同一個網絡,這樣應用與應用、代理與被代理之間其實就沒什么依賴,不僅維護方便,而且遷移也方便。配置也不麻煩,只需要將常規的 IP 或域名換成相應的容器名即可。

一、統一網絡

那么,首先需要創建一個共用的橋接網絡:

docker network create proxy-network

# 查看
docker network ls

 二、代理服務容器

創建一個專門用來代理的 nginx 服務容器,取名:proxy-nginx,這里使用 docker-compose 構建,其目錄結構最終如下:

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

有些文件是在后續的運行過程產生的,配置時,只需要把必要的文件和目錄創建好就行。

 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"

把對外的 80、443 的端口綁定到代理服務器,所有的應用都可以從這里進來。

 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

這里將會創建運行用戶組和用戶 www-data,方便配置和控制,這個名字會用在 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;
}

這個的內容拷貝 nginx 的默認就行,需要改的就是運行用戶名,注意用戶名要和前面的設置的保持一致。

 startup.sh

#!/bin/bash

# Start crond in background
crond -l 2 -b

# Start nginx in foreground
nginx

這個是用來啟動 nginx 程序用的,內容目前比較少,主要是為以后擴充內容方便。

 啟動代理服務容器

docker-compose up -d nginx

 查看啟動是否正常 docker-compose ps ,如果不正常,檢查下配置是否有錯誤。

這個就這樣,先放著,去創建應用。

 三、添加應用

添加一個站點 https://baipiaoquan.com/。

 配置應用容器

同樣使用 docker-compose 創建應用。

這是一個 php 項目,所以這個應用里至少需要 nginx 和 php-fpm 兩個服務容器,項目目錄結構如下:

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

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

為了方便調整,這里使用了環境變量。

注意 nginx 的容器名稱 container_name: ${COMPOSE_PROJECT_NAME}_nginx,這個值很關鍵并且會在后續代理中用到。

.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

使用的代理網絡名稱是:proxy-network,這是在前面創建的;
nginx 的容器名稱會是:baipiaoquan_nginx。

nginx 的 Dockerfile

這個文件可以把前面的那個直接拿來,然后加上關于 php 相關的就行了。

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

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"]

別忘了 php.ini 文件,也可以使用它默認的,那就要把這個相關的配置刪掉。

 服務 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;
  }
}

我這里算是配全了,其實可以精簡,只需要配置需要的即可。

 啟動應用

此時,已經可以啟動 baipiaoquan.com 的服務了,在 baipiaoquan 的目錄下運行:

docker-compose up -d nginx

如果沒有意外,應用應該啟動并可以接收服務。亦可以測試下,進入容器訪問下 localhost,看看結果是不是想要的。我是這樣測試的:

docker-compose exec nginx wget localhost

然后產看返回的數據大小,根據情況判斷是不是成功了。
可以通過下面的命令查看該應用是否成功連接到 proxy-network:

docker network inspect proxy-network

接下來要讓全世界的人都能訪問到這個應用。

添加代理配置到 nginx-proxy

注意:要先啟動應用,然后再開始代理,不然會出現 nginx 找不到 upstream 報錯。

存放位置:proxy-nginx/sites/baipiaoquan.com.conf,只需要把上面的配置拷貝下來,改幾個地方就行,最終配置如下:

# 我這配的僅支持 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 的容器名稱
  }
}

重新加載代理服務器的配置,在 nginx-proxy 目錄下運行:

# 先測試下配置文件,這步一定要執行成功
docker-compose exec nginx nginx -t

# 如果提示成功,則重新加載,否則就按提示檢查修改配置文件
docker-compose exec nginx nginx -s reload

稍等片刻,如果一切順利,那么現在全世界的人應該能訪問到這個 https://baipiaoquan.com/ 網站了。 

如果還需要添加其他應用,是一樣的邏輯,流程照搬。例如我又加了一個應用:https://chaohuahui.com/ ,可以 ping 一下他們的 IP 是一樣的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:大慶 中衛 清遠 安陽 臺灣 雅安 長治 興安盟

巨人網絡通訊聲明:本文標題《Docker中使用Nginx代理多個應用站點的方法》,本文關鍵詞  Docker,中,使用,Nginx,代理,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Docker中使用Nginx代理多個應用站點的方法》相關的同類信息!
  • 本頁收集關于Docker中使用Nginx代理多個應用站點的方法的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    最好看的中文字幕久久| 亚洲国产精品第一页| 日本一级免费视频| 精品久久国产97色综合| 首页国产欧美日韩丝袜| 久久福利小视频| 91麻豆精品国产自产在线| 亚洲一级在线观看| 日本wwwwwww| 欧美猛男gaygay网站| 亚洲第一福利一区| 久久免费精品国产| 欧美一区二区人人喊爽| 日韩精品1区2区3区| 性高潮久久久久久久| 精品久久久久久久人人人人传媒 | 久久精品亚洲麻豆av一区二区| 美国十次了思思久久精品导航| 不卡一区二区在线观看| 精品免费视频.| 狠狠色丁香婷婷综合久久片| 四虎影视一区二区| 亚洲欧洲日韩在线| 男男受被啪到高潮自述| 欧美日本一区二区三区四区| 肉色丝袜一区二区| 精品无人区无码乱码毛片国产| 久久久国产午夜精品| 国产成人夜色高潮福利影视| av女名字大全列表| 亚洲国产视频在线| 亚洲精品成人无码| 国产精品毛片高清在线完整版| 99久久精品一区| 欧美精品xxxxbbbb| 久久99国产精品久久| 久久国产波多野结衣| 一区二区三区在线视频观看| 国产激情视频网站| 久久久99免费| 99热这里都是精品| 欧美一级片免费看| 国产麻豆精品theporn| 在线影院国内精品| 日本不卡一二三| 黑人狂躁日本娇小| 亚洲线精品一区二区三区| 粉嫩av懂色av蜜臀av分享| 久久嫩草精品久久久精品| 不卡免费追剧大全电视剧网站| 欧美日韩久久不卡| 精品写真视频在线观看| 国产大学生自拍| 日韩精品欧美精品| 91视频综合网| 日韩高清不卡在线| 国产一二三四区| 天堂成人免费av电影一区| 青青操在线播放| 亚洲成人动漫精品| 97精品在线播放| 丝袜国产日韩另类美女| 国产中文av在线| 亚洲bdsm女犯bdsm网站| 亚洲综合久久av一区二区三区| 亚洲一级电影视频| 中文乱码字幕高清一区二区| 午夜伊人狠狠久久| 日本福利片在线观看| 免费一级欧美片在线观看| 色先锋资源久久综合| 久久精品av麻豆的观看方式| 色婷婷激情久久| 黄页网站大全一区二区| 欧美三区在线视频| 国产成人综合网| 欧美一区二区网站| 97精品国产露脸对白| 久久久www成人免费毛片麻豆 | 国产精品福利一区二区三区| 波多野结衣先锋影音| 日韩毛片一二三区| 极品尤物一区二区| 三级久久三级久久| 欧美亚洲国产一区二区三区va| 国产老女人精品毛片久久| 69成人精品免费视频| 97久久久精品综合88久久| 久久精品一区二区三区不卡牛牛| 日本一区二区在线免费观看| 亚洲视频网在线直播| 在线看片中文字幕| 青青草原综合久久大伊人精品| 日本道色综合久久| 国产a久久麻豆| 久久麻豆一区二区| 少妇真人直播免费视频| 午夜电影网亚洲视频| 日本精品一区二区三区高清 | 欧美成人久久久免费播放| 日本视频在线一区| 欧美猛男男办公室激情| 91亚洲资源网| |精品福利一区二区三区| 日日碰狠狠添天天爽| 久久99国产精品麻豆| 日韩欧美www| 无码一区二区精品| 亚洲h精品动漫在线观看| 欧美亚洲免费在线一区| 99久久国产综合精品女不卡| 国产精品色眯眯| 国产免费嫩草影院| 国内精品伊人久久久久影院对白| 精品日韩99亚洲| 久久精品国产亚洲AV熟女| 日韩激情视频在线观看| 7777女厕盗摄久久久| 精品人妻一区二区三区日产| 亚洲国产成人tv| 欧美精品少妇一区二区三区| 美女流白浆视频| 亚洲成人动漫精品| 3d成人动漫网站| 精品国产av色一区二区深夜久久| 亚洲大片一区二区三区| 欧美精品在线一区二区| 一级少妇精品久久久久久久| 亚洲成人午夜电影| 7777精品伊人久久久大香线蕉| youjizz.com国产| 欧美日免费三级在线| 91麻豆国产自产在线观看| 亚洲色图视频网站| 欧美亚洲国产bt| 性折磨bdsm欧美激情另类| 亚洲图片欧美视频| 欧美一区二区啪啪| 欧美大波大乳巨大乳| 国产麻豆成人传媒免费观看| 欧美激情一区二区三区四区| 婷婷激情四射网| 99久久久久久| 亚洲va在线va天堂| 欧美成人一区二区三区片免费 | 国产高清亚洲一区| 最新热久久免费视频| 在线观看视频91| 久久久高清视频| 久久成人久久鬼色| 国产精品丝袜久久久久久app| 一本一道久久a久久精品| 亚洲欧美日韩中文字幕在线观看| 丝瓜av网站精品一区二区| 精品国偷自产国产一区| 日韩av手机在线免费观看| 91免费观看视频| 日韩成人av影视| 国产亚洲一区二区三区| 一本大道av一区二区在线播放| 午夜性福利视频| 另类小说视频一区二区| 国产精品久久久久一区二区三区共| 欧洲日韩一区二区三区| 亚洲综合自拍网| 懂色av中文字幕一区二区三区| 亚洲黄色免费网站| 日韩一区和二区| 久久国产波多野结衣| 老熟女高潮一区二区三区| 久久av老司机精品网站导航| 一区在线观看视频| 欧美一级xxx| 国精品无码一区二区三区| 精品无码人妻少妇久久久久久| 精品在线视频一区| 亚洲日本va午夜在线电影| 欧美成人伊人久久综合网| 国精品无码一区二区三区| 手机在线成人av| 东方欧美亚洲色图在线| 午夜av电影一区| 国产精品网站在线观看| 欧美日本国产一区| 精品一区二区在线观看视频| 911亚洲精选| 国产精品一二三| 日韩一区精品视频| 中文字幕中文字幕在线一区| 日韩情涩欧美日韩视频| 色综合中文综合网| 黄色a级片在线观看| 网站免费在线观看| 成人午夜碰碰视频| 奇米亚洲午夜久久精品| 日韩美女视频一区| 久久久一区二区三区捆绑**| 在线观看网站黄不卡| 国产免费嫩草影院| 国产人妻人伦精品1国产丝袜|