目录

  • 一、安装Nginx
  • 二、Nginx的反向代理
  • 1、反向代理
  • 2、基于Nginx实现反向代理
  • 三、Nginx负载均衡策略
  • 1、轮询方式
  • 2、权重方式
  • 3、ip_hash哈希算法方式
  • 四、Nginx资源动静分离
  • 五、Nginx集群


一、安装Nginx

1、安装Nginx

# 使用docker-compose安装
version: '3.1'
services:
  nginx:
    restart: always
    image: daocloud.io/library/nginx:latest
    container_name: nginx
    ports:
      - 80:80
docker-compose up -d	#安装启动
curl http://localhost:80	#验证访问

2、修改Nginx配置文件(nginx的核心配置文件Nginx.conf)

#全局块
worker_processes	1;	#值越大,Nginx的并发能力越强
error_log	/var/log/nginx/error.log warn	#代表Nginx的错误日志存放路径
pid		/var/run/nginx.pid;

#event块
events {
	worker_connections	1024;	#值越大,Nginx的并发能力越强
}
# 	Nginx并发能力公式:
#	worker_processes * worker_connections /4|2=Nginx最终的并发能力
#	动态资源需要/4	静态资源需要/2
#	Nginx通过动静分离,来提升Nginx的并发能力	

#http块
http{
	include		/etc/nginx/mime.types;	#代表引入一个外部的文件,->/mime.types中放着大量的媒体类型
										#include /etc/nginx/conf.d/*.conf->引入conf.d目录下以conf结尾的文件
	default_type	application/otcet-stream;
	server{
		listen	80;		代表nginx监听的端口
		server_name	localhost;	代表Nginx接受请求的ip
		
		location / {
			root	/usr/share/nginx/html	#将接收到的请求根据/usr/share/nginx/html/下查找静态资源
			index	index.html index/htm	#默认去上述路径中找到index.html或index.htm
		}
	}
}

3、修改docker-compose.yml文件

version: '3.1'
services:
  nginx:
    restart: always
    image: daocloud.io/library/nginx:latest
    container_name: nginx
    ports:
      - 80:80
    volumes:
      - /opt/docker_nginx/conf.d/:/etc/nginx/conf.d	#将docker容器中/etc/nginx/conf.d挂载在主机/opt/docker_nginx/conf.d/文件夹上

4、启动测试

docker-compose up -d
curl localhost:80	#访问到index.html文件

二、Nginx的反向代理

1、反向代理

1、反向代理服务器都是配置在服务端的
	2、客户端不知道访问的是哪一台服务器
	3、负载均衡,通过反向代理服务器来优化网站的负载

docker pgsql高可用 docker nginx高可用_html

2、基于Nginx实现反向代理

启动之前的tomcat服务器
编写nginx的配置文件,通过nginx访问到tomcat服务器

server{
	listen	80;
	server_name	localhost;
	#基于反向代理访问到Tomcat服务器
	location / {
		proxy_pass	http://192.168.112.114:8080/
	}
}

通过访问 localhost:80 直接映射到 http://192.168.112.114:8080/

#1 =匹配
localhost = / {
	#精确匹配,主机名后面不能带任何的字符串	localhost:80/
}

#2 通用匹配
localhoat /xxx{
	#匹配所有以/xxx开头的路径		localhost:80/xxx/xxx
}

#3 正则匹配
localhost ~ /xxx{
	#匹配所有以xxx开头的路径		localhost:80/xxx/xxx
}

#4 匹配开头路径
localhost ^~ /images/{
	#匹配所有以/images/开头的路径		localhost:80/images/xx.jpg
}

#5 ~* \.(gif|jpg|png)$ 
localhost ~* \.(gif|jpg|png)$ {
	#匹配以gif或者jpg或者png结尾的路径
}

三、Nginx负载均衡策略

Nginx为我们默认提供了三种负载均衡策略
	1、轮询:
		将客户端发起的请求,平均的分配给每一台服务器
	2、权重:
		会将客户端的请求,根据服务器的权重不同,分配不同的数量
	3、ip_hash:
		基于发起请求的客户端的ip地址不同,他始终会将请求发送到指定的服务器上

1、轮询方式

upstream	app{	#定义一组服务器
	server	192.168.0.1:8080;
	server	192.168.0.2:8080;
}
server{
	listen	80;
	server_name	localhost;
	
	localhost / {
		proxy_pass	http://app/;	#上面定义的upstream名字
	}
}

2、权重方式

upstream	app{	#定义一组服务器
	server	192.168.0.1:8080 weight=10;	#权重比例
	server	192.168.0.2:8080 weight=2;#权重比例
}
server{
	listen	80;
	server_name	localhost;
	
	localhost / {
		proxy_pass	http://app/;	#上面定义的upstream名字
	}
}

3、ip_hash哈希算法方式

upstream	app{	#定义一组服务器
	ip_hash;	#定义ip_hash的方式负载均衡
	server	192.168.0.1:8080;
	server	192.168.0.2:8080;
}
server{
	listen	80;
	server_name	localhost;
	
	localhost / {
		proxy_pass	http://app/;	#上面定义的upstream名字
	}
}

四、Nginx资源动静分离

1、动态资源代理

localhost / {
	proxy_pass	路径;
}

2、静态资源代理

localhost / {
	root	静态资源路径;
	index	默认访问路径下的什么资源;
	autoindex on;	# 代表展示静态资源的全部内容,/后面不填内容则以列表的形式展开
}
# 先修改docker,添加一个数据接,映射到nginx服务器的一个目录
# 添加了index.html和1.jpg静态资源
# 修改配置文件

docker-compose.yml文件

version: '3.1'
services:
	nginx:
		restart: always
		image: daocloud.io/library/nginx:latest
		container_name: nginx
		ports:
		  - 80:80
		volumes:
		  - /opt/docker_nginx/conf.d:/etc/nginx/conf.d
		  - /opt/docker_nginx/img/:/data/img
		  - /opt/docker_nginx/html/:/data/html

nginx.conf文件

server{
	listen	80;
	server_name	localhost;
	
	#代理到html静态资源
	localhost	/html{
		root 	/data;
		index	index.html;
	}
	#代理到img静态资源
	localhost	/img{
		root		/data;
		autoindex	on;
	}
}

五、Nginx集群

单点故障,避免nginx宕机,导致整个程序的崩溃
准备多台Nginx
准备keepalived,监听nginx的健康状况
准备haproxy,提供一个VIP的路径,统一的去接收用户的请求

docker pgsql高可用 docker nginx高可用_Nginx_02


docker pgsql高可用 docker nginx高可用_Nginx_03


1、dockerfile

FROM nginx:1.13.5-alpine
RUN apk update && apk upgrade
RUN apk add --no-cache bash curl ipvsadm iproute2 openrc keepalived
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
CMD ["/entrypoint.sh"]

2、entrypoint.sh

/usr/sbin/keepalived -D -f /etc/keepalived/keepalived.conf
nginx -g "daemon off;"

3、docker-compose.yml

version: "3.1"
services:
  nginx_master:
    build:
      context: ./
      dockerfile: ./Dockerfile
    ports:
      - 8081:80
    volumes:
      - ./index-master.html:/usr/share/nginx/html/index.html
      - ./faviocon.ico:/usr/share/nginx/html/favicon.ico
      - ./keepalived-master.conf:/etc/keepalived/keepalived.conf
    networks:
      static-network:
        ipv4_address: 192.168.0.2
    cap_add:
      - NET_ADMIN
  nginx_slave:
    build:
      context: ./
      dockerfile: ./Dockerfile
    ports:
      - 8082:80
    vloumes:
      - ./index-master.html:/usr/share/nginx/html/index.html
      - ./faviocon.ico:/usr/share/nginx/html/favicon.ico
      - ./keepalived-master.conf:/etc/keepalived/keepalived.conf	
    networks:
      static-network:
        ipv4_address: 192.168.0.3
    cap_add:
      - NET_ADMIN
  proxy:
    image: haproxy:1.7-alpine
    ports:
      - 80:6371
    volumes:
      - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
    network:
     - static-network
networks:
  static-network:
    ipam:
      config:
        - subnet: 192.168.0.0/16

4、keepalived配置 master节点

vrrp_script chk_nginx{
	script "pidof nginx"
	interval 2
}
vrrp_instance VI_1 {
    state MASTER	#定义为主服务器
    interface eth0	#docker容器内部的网卡名称,承载漂移ip的网卡
    virtual_router_id 77	#定义一个热备组,可以认为这是77号热备组
    priority 200	#优先级
    advert_int 1	#1秒互通一次,检查对方是否还在
    authentication {
        auth_type PASS	#认证类型
        auth_pass letmein	#认证密码,相当于安好
    }
    virtual_ipaddress {
        192.168.0.1 #漂移ip
    }
    track_script{
		chk_nginx
	}
}

5、keepalived配置 slave节点

vrrp_script chk_nginx{
	script "pidof nginx"
	interval 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0	#docker容器内部的网卡名称
    virtual_router_id 77
    priority 100	#优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass letmein
    }
    virtual_ipaddress {
        192.168.0.1
    }
    track_script{
		chk_nginx
	}
}

6、haproxy

global
	log 127.0.0.1 local0
	maxconn 4096
	daemon 
	nbproc 4

defaults
	log 127.0.0.1 local3
	mode http
	option dontlognull
	option redispath
	retries 2
	maxconn 2000
	balance roundrobin
	timeout connect 5000ms
	timeout client 5000ms
	timeout server 5000ms
	
frontend main
	bind *:6301
	default_backend webserver

backend webserver
	server nginx_master 192.168.0.1:80 check inter 2000 rise 2 fall 5