1. 获取及配置nginx  

  如果需要全站通过docker部署,那么nginx或许是不可或缺的。通过配置nginx,可以迅速实现负载均衡和反向代理服务。值得一提的是,docker官网恰好也有nginx镜像。通过以下命令获取:

$ docker pull nginx:latest
  • 1

  nginx镜像的配置和正常使用时是一样的,一般都是在/etc/nginx/conf.d目录下建立自己的filename.cnf文件即可。不同的,docker nginx通过挂载的方式将配置文件应用到nginx。 
  例如,我在本地$HOME/nginx/conf.d文件夹下建立default.cnf文件,文件内容:

upstream backends {
    server app1:8080;
    server app2:80801;
}

server {
    listen        80;
    listen       443 ssl;
    server_name example.com;
    # SSL
    # ssl on; # 只允许ssl方式访问
    ssl_certificate /etc/ssl/certs/example.pem;
    ssl_certificate_key /etc/ssl/certs/example.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1 www.huarenyl.cn.1dasheng178.com/ TLSv1.2;
    ssl_prefer_server_ciphers on;

    #proxy to webs
    location ~.*/ {
        proxy_redirect off;
        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_pass http://backends;      # 这里设置你要代理的ip+端口
    

其中, 
upstream backends {}:实现了名称为backends的负载均衡。可存在多个,如有需要,还可以自行创建其他。 
listen 80:监听80端口。 
listen 443 ssl;监听443端口,并且开启ssl。 
ssl_certificate, ssl_certificate_key:加载ssl证书。他们指定的是镜像中ssl证书文件的位置,推荐将证书放到如上位置。他们后面的几个配置,都是ssl的默认配置,不需要修改。 
location ~.*/{}:nginx文件路径的正则匹配,将外部对服务器的访问,自动分配到docker应用程序容器,交给这些应用程序处理请求。

  这个文件实现了简单地http访问、https访问,以及简单地负载均衡(将外部对服务器的请求,随机地分配到app1和app2这两个容器处理)。

2. 启动nginx

  通过upstream的配置,我们看到,nginx还关联着其他两个容器:app1、app2,并且需要能够和这两个容器相互通信。所以,启动nginx之前,需要先启动其他两个容器,这样通过命令行纪委不方便,我们通过docker-compose的编写配置文件的方式来启动nginx。 
  文件内容如下: 
docker-compose.yml 

version: "3"
services:
  nginx:
    image: nginx
    container_name: www.boshenyl.cn nginx
    depends_on:
      - todolist
    ports:
      - "443:443" # https访问端口
      - "80:80" # http访问端口
    volumes:
      - $HOME/etc/nginx/conf.www.wanmeiyuele.cn d:/etc/nginx/conf.d # 挂载配置文件
      - $HOME/etc/ssl/certs:/etc/ssl/certs # 挂载证书文件
    links:
      - app1 # 相当于 docker run 中的 --link
      - app2

  app1: # 镜像服务的名称(不指定container_name,docker-compose在此基础上构建名称)
    image: web # 既然是负载均衡,那么启动的镜像必然是相同的
    container_name: app1 # 这样写是必要的,否则docker-compose将采用默认命名方式
    ports:
      - "8080:8080" # 端口映射不是必要的。详情请连接docker的通信
  app2:
    image: web
    container_name: app2
    ports:
      - "8081:8081" # 端口映射不是必要的。详情请连接docker的通

  在以上文件所在的目录运行以下命令,即可启动nginx,体验配置结果了:

$ docker-compose www.233077.cn    www.233077.cn     up -d
  • 1

需要注意地地方:

1. nginx镜像暴露了两个端口,80443。如果需要通过http的方式访问,一定要映射80端口;如果需要通过https的方式访问,一定要映射443端口。默认同时映射就好了,更新配置方便。 
2. docker-compose中指定镜像的名字,使用container_name属性。

我看了网上的很多教程,都没有提到nginx的启动问题,尤其是端口映射。如果你启动时,没有映射443端口,单独配置http访问或者https访问,不会发生任何问题,一旦要配置二者可以同时访问,或者http重定向到https,必要会出现问题。常见的为,本地curl出现如下结果:

curl: (35) gnutls_handshake() failed: An unexpected TLS packet was received.

ocker nginx 配置反向代理和负载均衡的更多相关文章

  1. Windos环境用Nginx配置反向代理和负载均衡

    Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...

  2. [笔记]nginx配置反向代理和负载均衡

    1.nginx配置文件:源码安装情况下,nginx.conf在解压后的安装包内.yum安装,一般情况下,一部分在/etc/nginx/nginx.conf中,一部分在/etc/nginx/conf.d ...

  3. nginx 配置反向代理,负载均衡实战解析

    前言:NGINX的反向代理和负载均衡是网站架构中经常用到的一种高并发,高可用的方案,下面我们直接实战操作,当然理论也是要的. 一.反向代理 过程:反向代理:客户端 一>代理 <一> ...

  4. nginx配置反向代理和负载均衡

    一.反向代理 说明:应该有一个nginx服务器有多个应用服务器(可以是tomcat),本文使用一台虚拟机,安装一个nginx,多个tomcat,来模拟 upstream tomcats{ server ...

  5. nginx 配置反向代理和负载均衡

    Nginx的配置文件: nginx安装目录/conf/nginx.conf 重新加载配置文件 ./nginx -s reload 配置虚拟主机 一个server就是一台虚拟主机 server { li ...

  6. Nginx配置反向代理与负载均衡

    Nginx的upstream目前支持的分配算法: 1.round-robin 轮询1:1轮流处理请求(默认) 每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继 ...

  7. nginx的反向代理和负载均衡的一个总结

    之前一直觉的nginx的反向代理和负载均衡很厉害的样子,最近有机会接触了一下公司的这方面的技术,发现技术就是一张窗户纸呀,捅破了啥都明白了! 接下来先看一下nginx的反向代理: 简单的来说就是ngi ...

  8. nginx简单反向代理和负载均衡(ubuntu)

    nginx简单反向代理与负载均衡 环境:三台ubuntu 12.04.5 虚拟机    均装有nginx 1.1.19 以下u1(192.168.240.129) ,u2(192.168.240.13 ...

  9. nginx(三)反向代理和负载均衡

    nginx(三)反向代理和负载均衡 正向代理概念:比如在学校要上网,在学校内网是一个内网ip,需要连上公网就需要一个正向代理服务器. 反向代理概念: 看下图(Nginx只做请求的转发,后台有多个htt ...

随机推荐

  1. 海思NB-IOT模块HI2115芯片I2C通信

    1. 首先确定硬件上I2C的引脚,手册上并没有,海思技术支持说是14和15脚,我们用的是12和13脚,问题在于,如果是硬件I2C应该不能随便换个引脚吧,难道是模拟的时序? 2. 下一个奇怪的地方,这个 ...

  2. join_tab计算代价

    此路不通,还是需要按照顺序进行计算

  3. PS 旋转任意角度的照片

    1.选择标尺工具 2.在图片上画一个线,然后工具栏--图像--图像旋转

  4. 惊喜Skr人,Istio的创始人Shriram Rajagopalan手把手教你如何使用Istio

    Shriram与来自Google.Lyft.IBM和其他公司的社区贡献者们一起并肩作战,积极地向Istio和Envoy项目作贡献.同时,Shriram是IBM的Amalgam8项目的创始成员之一.目前 ...

  5. 180605-Linux下Crontab实现定时任务

    Linux下Crontab实现定时任务 基于Hexo搭建的个人博客,是一种静态博客页面,每次新增博文或者修改,都需要重新的编译并发布到Github,这样操作就有点蛋疼了,一个想法就自然而然的来了,能不 ...

  6. JMeter录制Web脚本

    设置Firefox浏览器代理, 点击右上角的菜单: 点击选项: 点击高级: 点击设置: 点击手动配置代理, 输入本地的IP地址和端口号8888,与JMeter代理服务器的端口号保持一致: 好了,浏览器 ...

  7. 【SpringCloud】第五篇: 路由网关(zuul)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  8. 谜题 (Puzzle,ACM/ICPC World Finals 1993,UVa227)

    题目描述:算法竞赛入门经典习题3-5 题目思路:模拟题 #include <stdio.h> #include <string.h> #define maxn 55 char ...

  9. 数据库Mysql的学习(二)-数据类型和创建

    数据类型:数据列,存储过程参数,表达式和局部变量的数据特征. 整形: tinyint:一个字节,-128到127:2的7次方 smallint:两个字节,-32768到32767:2的15次方 med ...

  10. [Clr via C#读书笔记]Cp12泛型

    Cp12泛型 Generic: 特点 源代码保护 类型安全 清晰代码 更佳性能 Framework中的泛型 System.Collections.Generic; 开放类型,封闭类型:每个封闭类型都有 ...