Nginx如何实现动静分离?看这篇Docker的详细实现教程

什么是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;  
}  

 *威哥Java学习交流Q群:691533824
加群备注:CSDN
 


版权声明:本文为finally_vince原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。