一. 什么是Nginx
Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强。事实上Nginx的并发能力,确实在同类型的网页服务器中表现较好,中国大陆使用Nginx的网站有:百度、京东、新浪、网易、腾讯、淘宝等。
二. Docker安装
为了更方便地安装配置Nginx,我们可以采用Docker容器来进行安装配置。
1.基本安装
1.1 拉取Nginx镜像
docker pull nginx:latest
1.2 查看本地镜像列表
docker images
1.3 运行容器
docker run --name nginx-test -p 80:80 -d nginx
参数说明:
- –name nginx-test:容器名称;
- -p 80:80:进行端口映射,将本地 8080 端口映射到容器内部的 80 端口;
- -d nginx:设置容器在后台一直运行。
1.4 安装成功
如果出现以下界面,就代表我们的Nginx安装成功了。

2.高级安装
为了方便开发和配置,我们可以将Docker容器内的信息在宿主机间进行打通。我们可以通过如下命令进入到容器内部。
docker exec -it nginx-test bash
2.1 创建目录
mkdir -p /usr/local/nginx
2.2 依次在该目录下创建三个文件目录
#创建 www目录
mkdir -p /usr/local/nginx/html
#创建日志目录
mkdir -p /usr/local/nginx/logs
#创建配置文件目录
mkdir -p /usr/local/nginx/conf
2.3 拷贝配置文件
docker cp 容ID:/etc/nginx/nginx.conf /usr/local/nginx/conf
docker cp 容器ID:/etc/nginx/conf.d/ /usr/local/nginx/conf
2.4 修改配置文件
接着我们再将usr/local/nginx/conf/nginx.conf内容中的 include 默认路径,改为当前路径。

2.5 重新创建/运行容器(conf.d只挂载文件夹,不挂载文件)
docker run -d -p 80:80 --name nginx-80
-v /usr/local/nginx/html:/usr/share/nginx/html
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /usr/local/nginx/conf/conf.d/:/etc/nginx/conf.d/
-v /usr/local/nginx/logs:/var/log/nginx nginx
2.6 测试重新访问

三. Nginx 三大功能实现
1.配置静态资源
1.1 配置处理静态文件
由于Nginx性能很高,对于常用的静态资源,我们可以直接交由Nginx进行访问处理。加载静态资源的配置可以如下所示:
location / {
root D:/nginx-tomcat/exam; # /opt/static/exam /usr/local/nginx/html/exam;
index index.html index.htm;
}
1.2 Docker配置示例
如果是采用Docker配置,可以采用如下所示:
location / { root /usr/share/nginx/html/exam; #运行时部署数据卷-v。外部完成映射。此处需要指定的是Docker内部的目录 index index.html index.htm; }
2.配置反向代理
2.1 让nginx进行转发,即所谓的反向代理访问localhost时转到tomcat
修改nginx.conf文件,查看server节点,相当于一个代理服务器,这里可以配置多个。
- listen:表示当前的代理服务器监听的端口,默认的是监听80端口;
- server_name:表示服务名称;
- location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里;
- root:root表示当匹配这个请求路径时,将会在这个文件夹内寻找相应的文件;
- index:当没有指定主页时,默认会选择这个指定的文件。它可以有多个,并按顺序来加载,如果第一个不存在,则找第二个,依此类推;
- error_page:代表错误页面,
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404
2.2 localhost时转到tomcat时,要修改两个地方:
server_name exam_qf;
location / {
proxy_pass http://127.0.0.1:8080;
}
proxy_pass:表示代理路径,相当于转发,而不像之前说的root必须指定一个文件夹。
3.实现动静分离
我们可以按照文件类型来进行过滤,比如jsp直接给tomcat处理,因为nginx并不是servlet 容器,没办法处理JSP。而html、js、css这些文件不需要处理,直接给nginx进行缓存即可。
- 动态资源:如JSP由Tomcat或其它WEB服务器处理;
- 静态资源:如图片、css、js等由nginx服务器完成。
动静分离可以充分利用各自的优势完成高性能访问,让JSP页面交给tomcat处理,而html、png等一些图片和JS等直接给nginx进行缓存。
location ~ \.jsp$ {
proxy_pass http://127.0.0.1:8080;
}
location ~ \.(html)$ {
root /usr/share/nginx/html;
}
~ .*\.(html|js|css|images|png|gif|jpg|jpeg|swf|ioc|rar|zip|txt|fiv|mid|doc|ppt|xls|mp3|wma)$
~:表示正则匹配,后面的内容可以是正则表达式匹配;
.:点表示任意字符;
*:表示一个或多个字符;
\.:是转移字符;
|:表示或;
$:表示结尾;
整个配置代表括号晨面的后缀请求都由nginx处理。
配置方案:
location ~ \.jsp$ {
proxy_pass http://127.0.0.1:8080;
}
location ~ \.(html|js|css|png|gif)$ {
root static/maven_exam; #此处在nginx 目录下创建该文件夹(存储静态资源访问)
}
同时,页面上方要进行静态资源的变更,应该以绝对路径方式进行访问。
<script type="text/javascript" src="/js/jquery-3.1.1.js"></script>
<script src="/js/quiz.js"></script>
nginx对location访问,优先是以精确优先为原则,故将精确细的请求放在前面,这样就可以完成基本的动静分离配置了。
location ~ \.(html|js|css|png|gif)$ {
root D:/static; #可以是nginx 外部的文件
}
location /{
proxy_pass http://127.0.0.1:8080;
}
现在你知道怎么利用Docker安装配置Nginx了吗?