nginx实现动静分离
Posted 杀手不太冷!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx实现动静分离相关的知识,希望对你有一定的参考价值。
文章目录
nginx实现动静分离
什么是动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
其实动静分离,就是把动态页面和静态页面分离到不同的服务器上面。
说明:像html,css,js这些一直都不会变,他们都是静态资源。但是像jsp,servlet这些可能是会发生变化的,它们是动态资源。我们之前是把静态资源和动态资源全部都部署到了tomcat服务器里面。但是这种方式有一个缺点,就是我们请求动态资源的时候和请求静态资源的时候都会去请求tomcat服务器,这会给tomcat带来更大的压力。
动静分离逻辑如下图:
在Windows下安装Nginx
Windows下安装nginx,首先去下载Ngnix,下载地址:http://nginx.org/en/download.html,
解压后的Ngnix目录如下图:
进入命令行启动nginx,如下图:
nginx的默认端口号是80,直接去浏览器里面输入localhost,如下图:
Nginx常用的命令
使用Nginx命令的时候的前提条件:必须要进入到Nginx的安装目录中去。
查看nginx的版本号:nginx -v
启动nginx:start nginx
关闭nginx服务:nginx.exe -s stop
重载nginx服务:nginx.exe -s reload 说明:如果我们修改了nginx的配置文件,那么我们必须要重新启动nginx服务,配置文件才会生效,但是我们现在不想要重新启动,那么我们就可以进行重加载,然后我们的配置文件就会生效了。
Nginx的配置文件
nginx.conf配置文件主要分为三部分。
第一部分:全局块
从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行Nginx服务器的用户(组),允许生成的worker process数,进程PID存放路径,日志存放路径和类型以及配置文件的引入等。
比如上面第一行配置的:worker_processes 1,这是Nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量也越多,但是会受到硬件,软件等设备的制约。
第二部分:events块
events块设计的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同事接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个word process可以同时支持的最大连接数等。
第三部分:http块
这算是Nginx服务器中配置最频繁的部分,代理,缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,需要注意的是:http块也可以包括http全局块,server块。
如果启动或者关闭错误可以去错误日志中查看日志信息
常见异常
SSL证书过期
直接去nginx的配置文件中把SSL证书相关的东西注释掉就可以了。
hosts没有添加域名映射
关闭nginx的时候报错
如下图:
关闭nginx的时候,会去logs目录下查找一个nginx.pid文件,这个文件中只有一个数字,这个数字代表的是nginx.pid的进程id。那么为什么关闭nginx的时候会报这个错呢?因为我还没有开启nginx,这样就会导致我没办法在logs目录下生成nginx.pid文件,因为我关闭的时候去查找是查找不到的,所以就会报错。
引入公司的nginx配置文件
首先把公司的nginx配置文件存储到本地nginx安装目录中,如下图:
然后在本地nginx配置文件中引入公司的nginx配置文件,如下图:
以后我们只要修改公司的nginx配置文件就可以了。
项目写8085端口本地启动之后不能在浏览器访问
如下图:
原因:back项目会回调back项目,回调的时候只有域名back.kedou.com,因此它的默认端口号是80,所以如果你的启动端口号是8085就会出错。
Nginx代理
基本概念
只要Nginx服务开启了,那么我们在浏览器中访问的地址就会先去找找看有没有Nginx代理,如下图:
我们在浏览器输入域名back.kedou.com之后,其实这个域名的默认端口号就是80,因此我们去查看一下Nginx的代理,如下图:
本地启动我们的back项目,端口号必须要设置成8069,因为要不然Nginx无法代理,其实也就相当于是在浏览器和本地项目之间加了一层,加了一层Nginx代理。启动本地项目,如下图:
但是我们的back本地项目它会用到公司服务器上的静态资源,我们这里是本地启动的,因为路径肯定是和公司服务器的路径是不一样的,因此我们需要在Nginx的配置文件中让公司服务器静态目录和我们本地项目的静态目录映射起来,具体怎么操作呢?请看下面这个标题:
在Nginx的配置文件指定访问本地的静态资源
如果我们的项目没有进行前后端分离,前端文件也写到了后端项目里面,如果是在线访问这个项目那是不会出现问题的,但是如果是本地启动这个项目是会出错的,因为我们本地的静态资源路径肯定和在线的是不一样的,如下图:
上图中在线的静态资源访问路径是http://static.kedou.com/back/1.0.0//styles/xadmin.css,但是我本地的静态资源访问路径却是D:\\workspace\\com.shunwang.back\\back-web\\src\\main\\resources\\static,因此我如果是本地启动项目,它是找不到我们的静态资源的,针对这个问题,我们需要在Nginx中的配置文件中映射一下,使每次访问http://static.kedou.com/back/1.0.0的时候就自动的映射成本地静态目录D:\\workspace\\com.shunwang.back\\back-web\\src\\main\\resources\\static,怎么在nginx的配置文件中进行配置呢?如下图:
正则表达式中的一些符号
^ 表示匹配字符串的开始位置
$ 表示匹配字符串的结束位置
*表示匹配零次到多次
+表示匹配一次到多次(至少有一次)
? 表示匹配零次到一次
. 表示匹配单个字符
| 表示为或者,两项中取一项
() 小括号表示匹配括号中全部字符
[] 中括号表示匹配括号中一个字符,范围描述如[0-9 a-z A-Z]
大括号用于限定匹配次数,如n表示匹配n个字符,n,表示至少匹配n个字符,n,m表示至少n最多m
\\ 转义字符,如上面的基本符号匹配都需要转义字符,如\\?就表示?号
\\w 表示英文字母和数字
\\d 表示数字 \\D 表示非数字
以上是关于nginx实现动静分离的主要内容,如果未能解决你的问题,请参考以下文章