nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。
docker pull nginx
docker images nginx
# 创建挂载目录
mkdir -p /usr/local/src/nginx/conf
mkdir -p /usr/local/src/nginx/log
mkdir -p /usr/local/src/nginx/html
// 启动容器
docker run --name myNginx -d -p 80:80 nginx:latest# 将容器nginx.conf文件复制到宿主机
docker cp 008aee5bc129:/etc/nginx/nginx.conf /usr/local/src/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp 008aee5bc129:/etc/nginx/conf.d /usr/local/src/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp 008aee5bc129:/usr/share/nginx/html /usr/local/src/nginx// 停止容器
docker stop 008aee5bc129
// 删除容器
docker rm 008aee5bc129
注:008aee5bc129为容器id
docker run \
-p 80:80 \
--name myNginx \
-v /usr/local/src/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/src/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /usr/local/src/nginx/log:/var/log/nginx \
-v /usr/local/src/nginx/html:/usr/share/nginx/html \
-d nginx:latest
默认在Linux上安装的Nginx,配置文件在安装的nginx目录下的conf目录下,名字叫做nginx.conf。ginx.conf主要由三部分组成:全局块、events块、http块。
----------------------- 全局块 ------------------------------# 全局配置
# user nobody nobody;
worker_processes 2;
# error_log logs/error.log
# error_log logs/error.log notice
# error_log logs/error.log info
# pid logs/nginx.pid
worker_rlimit_nofile 1024;
-------------------------------------------------------------
************************events块*****************************# nginx工作模式配置
events { worker_connections 1024;multi_accept on;use epoll;
}
*************************************************************
==========================http块=============================# http设置
http { # http全局块....# server块server { # server全局块 ....# location块location { ....}# location块location path {....}# location块location otherpath {....}}# server块server {....location {....}}# upstream块upstream name { ....}
}
===============================================================
# 优先级1,精确匹配,根路径
location =/ {proxy_pass http://192.168.80.102:8080;
}# 优先级2,以某个字符串开头,以test开头的,优先匹配这里,区分大小写
# http://test.com/test/test1.html
location ^~ /test{root /data/; # 匹配成功,实际访问路径为:/data/test/test1.htmlindex index.php index.html;
}# 优先级3,区分大小写的正则匹配,匹配/image*****路径
# http://test.com/image/image1.html
location ~ /image{alias /data/static/; # 匹配成功,实际访问路径为:/data/static/image1.htmlindex index.php index.html;
}# 优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里
location ~* .*\.(jpg|gif|png|js|css)$ {root /data/image/;index index.php index.html;
}# 优先7,通用匹配
location / {return 403;
}location:后面跟的是请求地址路径匹配规则;
proxy_pass:设置反向代理的路径,匹配成功后跳转到该指定的路径;
root:用于指定访问虚拟主机的目录,实际访问文件路径会拼接URL中的路径;
alias:用于指定访问虚拟主机的目录,实际访问文件路径不会拼接URL中的路径;
index:在不指定访问具体资源时,默认展示的资源文件列表;
3.2.3、upstream块:主要负责负载均衡的配置,通过默认的轮询调度方式来分发请求到后端服务器。
upstream name {
ip_hash;
server 192.168.1.100:8000;
server 192.168.1.100:8001 down;
server 192.168.1.100:8002 max_fails=3;
server 192.168.1.100:8003 fail_timeout=20s;
server 192.168.1.100:8004 max_fails=3 fail_timeout=20s;
}
ip_hash:指定的负载均衡调度算法是ip_hash;
server host:port:分发服务器的列表配置;
-- down:表示该主机暂停服务;
-- max_fails:表示失败最大次数,超过失败最大次数暂停服务;
-- fail_timeout:表示如果请求受理失败,暂停指定的时间之后重新发起请求
主要运用在分布式场景,客户端的所有请求都将会先到nginx上,再由nginx根据相应的规则,将这些请求按时间顺序逐一分配到不同的后端服务器上处理。nginx负载均衡的实现规则有以下5种:
upstream myserver { server 192.168.1.11:8081; server 192.168.1.12:8082;
}
upstream myserver { server 192.168.1.11:8081 weight=2; server 192.168.1.12:8082 weight=8;
}
upstream myserver { ip_hash; server 192.168.1.11:8081; server 192.168.1.12:8082;
}
upstream myserver { server 192.168.80.102:8081;server 192.168.80.102:8082;fair;
}
upstream myserver { server 192.168.80.102:8081;server 192.168.80.102:8082;hash $request_uri; hash_method crc32;
}
将静态资源 css、html、js等和动态资源(jsp servlet)进行分开部署,我们可以将静态资源直接部署在专门的服务器上,也可以直接放在反向代理服务器上(Nginx)所在在的服务器上,动态资源还是部署在真实的服务器上。然后请求来的时候,静态资源从专门的静态资源服务器获取,动态资源还是转发到后端服务器上。可以提高用户访问静态资源的响应速度,降低对后台服务的访问频率。