ocker nginx 配置反向代理和负载均衡
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镜像暴露了两个端口,80
和443
。如果需要通过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 配置反向代理和负载均衡的更多相关文章
- Windos环境用Nginx配置反向代理和负载均衡
Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...
- [笔记]nginx配置反向代理和负载均衡
1.nginx配置文件:源码安装情况下,nginx.conf在解压后的安装包内.yum安装,一般情况下,一部分在/etc/nginx/nginx.conf中,一部分在/etc/nginx/conf.d ...
- nginx 配置反向代理,负载均衡实战解析
前言:NGINX的反向代理和负载均衡是网站架构中经常用到的一种高并发,高可用的方案,下面我们直接实战操作,当然理论也是要的. 一.反向代理 过程:反向代理:客户端 一>代理 <一> ...
- nginx配置反向代理和负载均衡
一.反向代理 说明:应该有一个nginx服务器有多个应用服务器(可以是tomcat),本文使用一台虚拟机,安装一个nginx,多个tomcat,来模拟 upstream tomcats{ server ...
- nginx 配置反向代理和负载均衡
Nginx的配置文件: nginx安装目录/conf/nginx.conf 重新加载配置文件 ./nginx -s reload 配置虚拟主机 一个server就是一台虚拟主机 server { li ...
- Nginx配置反向代理与负载均衡
Nginx的upstream目前支持的分配算法: 1.round-robin 轮询1:1轮流处理请求(默认) 每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继 ...
- nginx的反向代理和负载均衡的一个总结
之前一直觉的nginx的反向代理和负载均衡很厉害的样子,最近有机会接触了一下公司的这方面的技术,发现技术就是一张窗户纸呀,捅破了啥都明白了! 接下来先看一下nginx的反向代理: 简单的来说就是ngi ...
- nginx简单反向代理和负载均衡(ubuntu)
nginx简单反向代理与负载均衡 环境:三台ubuntu 12.04.5 虚拟机 均装有nginx 1.1.19 以下u1(192.168.240.129) ,u2(192.168.240.13 ...
- nginx(三)反向代理和负载均衡
nginx(三)反向代理和负载均衡 正向代理概念:比如在学校要上网,在学校内网是一个内网ip,需要连上公网就需要一个正向代理服务器. 反向代理概念: 看下图(Nginx只做请求的转发,后台有多个htt ...
随机推荐
- springboot jpa操作redis
SpringBoot使用Redis缓存 (1)pom.xml引入jar包,如下: <dependency> <groupId>org.springframework.boo ...
- python里pickle模块
Pickle模块用于将复杂的文件转化为二进制的文件 pickle模块一般是在源代码里面含有较大的字典或者列表等复杂文件时,我们如果将文件直接写在源代码里面,这样会使得代码很冗余,并且源代码文件所占空间 ...
- lintcode101 删除排序数组中的重复数字 II
删除排序数组中的重复数字 II 跟进“删除重复数字”: 如果可以允许出现两次重复将如何处理? 在:lintcode100删除排序数组中的重复数字 的基础上进行改进. class Solution ...
- jstat命令
jstat命令使用 jstat命令可以查看堆内存各部分的使用量,以及加载类的数量.命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数] 注意:使用的jdk版本是 ...
- Java进阶知识点:服务端高并发的基石 - NIO与Reactor AIO与Proactor
一.背景 要提升服务器的并发处理能力,通常有两大方向的思路. 1.系统架构层面.比如负载均衡.多级缓存.单元化部署等等. 2.单节点优化层面.比如修复代码级别的性能Bug.JVM参数调优.IO优化等等 ...
- LeetCode 700——二叉搜索树中的搜索
1. 题目 2. 解答 如果根节点为空,直接返回 NULL.如果根节点非空,从根节点开始循环查找,直到节点为空. 如果待查找的值大于当前节点值,节点指向右孩子: 如果待查找的值小于当前节点值,节点指向 ...
- window.open()与window.showModalDialog区别
window.open()与window.showModalDialog区别 弹出窗口两种方式: 1.window.showModalDialog: var feature = &qu ...
- Python中的eval
Python中的eval方法接受一个字符串参数,并且把字符串里面的内容当成Python代码来执行: eval的缺点是执行速度慢,并且会有安全风险
- 软件管理——rpm&dpkg、yum&apt-get
一般来说著名的linux系统基本上分两大类: 1. RedHat系列:Redhat.Centos.Fedora等 2. Debian系列:Debian.Ubuntu等 一.RedHat 系列 ...
- 2017软工第二次作业 - 本周PSP(补交)
每周例行报告 1.本周PSP 2. 本周进度条 3.累计进度图 4. 本周PSP饼状图