0
点赞
收藏
分享

微信扫一扫

nginx 将请求映射到具体文件(为网页配置虚拟路径)

1.情景展示

我们知道,nginx三个核心功能是:静态服务器、反向代理和负载均衡;

nginx可以充当静态服务器,将静态资源文件(HTML、CSS、JS、图片等文件)通过网络进行访问。

如下图所示:

通过网络访问得到demo.html文件,我们直接在nginx服务后面+"/路径/demo.html"即可。

nginx 将请求映射到具体文件(为网页配置虚拟路径)_后台开发工具

对于习惯了全栈式开发的java人员来说,往往会觉得这种方式很别扭,因为,要访问的页面控制权往往在javaWeb后台手里;

换句话说就是:浏览器无法直接访问页面,浏览器只能通过向后台发送请求至后台Controller,由它来决定最终要转发或重定向的页面。

但是,前后端分离后,后端释放了对于页面的控制权,取而代之的是:nginx来充当前端的服务器。

这种直接将本地文件暴露在网络上的方式,我觉得不太好。

能不能,为网页提供虚拟访问路径,通过虚拟路径访问到对应的html文件,而不是直接访问html文件?

2.具体分析

location的网络请求映射和本地目录映射来实现。

3.解决方案

我们先来看一看:如何通过网络访问html文件?

我的demo.html的绝对路径是:C:\Users\Marydon\Desktop\demo.HTML;

找到nginx的安装目录--》找到conf目录下的nginx.conf;

nginx 将请求映射到具体文件(为网页配置虚拟路径)_html_02

使用文本工具打开nginx的配置文件。

nginx 将请求映射到具体文件(为网页配置虚拟路径)_服务器_03

sever:就是服务器的意思,我们通过server{}来进行服务器配置;

listen:这是配置的是服务器使用的端口号(默认值是80);

server_name:配置的是该服务器的访问IP(默认值是localhost);

--------------------------------------------------------------------

以上是默认的nginx服务器配置,代表的含义是:

服务器访问地址:http://localhost:80。

--------------------------------------------------------------------

charset:服务器的字符集(默认没有启用该项配置);

location+请求路径:对指定的请求进行具体处理,具体处理在{}中进行;

root+目录:本地项目所在根路径;

index+目录:本地项目欢迎页所在路径及欢迎文件名。

location / {
root html;
index index.html index.htm;
}

代表的意思是:

访问http://localhost,将会映射到该location标签体,最终指向的是html/index.html。

nginx 将请求映射到具体文件(为网页配置虚拟路径)_html_04

配置网页的虚拟访问路径

说明:虚拟主机配置多个location,根据url的不同,路由到不同的代理路径上。

如何为http://localhost/index配置虚拟访问路径?

#路径包含/index/的请求,跳转到C:\Users\Marydon\Desktop\demo.HTML页
location /index/ {
root C:\Users\Marydon\Desktop;
rewrite ^/index$ \demo.HTML break;
}

location /index/:设置服务器拦截含有/index/的请求

root:要访问的文件所在目录;

rewrite:使用正则表达式设置跳转规则及跳转页面。

nginx 将请求映射到具体文件(为网页配置虚拟路径)_nginx_05

注意:如果配置的映射路径不是静态资源文件的真实访问路径,需要在路径末尾加上"/"。

具体原因,第4部分。↓↓↓ 

4.扩展 

如何禁用nginx欢迎页?

我们通过上面可以知道:通过location /最终指向的是html/index.html文件;

所以,我们有两种实现方式。

错误方式:修改nginx.conf并重新加载配置文件。

可以使用#号将index注释掉或者删掉。

nginx 将请求映射到具体文件(为网页配置虚拟路径)_后台开发工具_06

index.html可以照常访问。

nginx 将请求映射到具体文件(为网页配置虚拟路径)_服务器_07

nginx 将请求映射到具体文件(为网页配置虚拟路径)_服务器_08

正确方式:删除或者重命名index.html。

在html目录下。

nginx 将请求映射到具体文件(为网页配置虚拟路径)_nginx_09

对应的是:

nginx 将请求映射到具体文件(为网页配置虚拟路径)_nginx_10

nginx 将请求映射到具体文件(为网页配置虚拟路径)_html_11

对应的是:

nginx 将请求映射到具体文件(为网页配置虚拟路径)_nginx_12

如何自定义指定nginx的欢迎页?

方式一:修改html目录下的index.html文件。

方式二:修改映射欢迎页的根目录。

nginx 将请求映射到具体文件(为网页配置虚拟路径)_nginx_13

映射路径末尾要不要加"/"?

如果是虚拟路径的话需要加"/",如果是真是路径,不需要加"/"。

映射路径不以"/"结尾,表示的含义是:匹配所有以XX开头的请求。

举例:

我本想将/index映射到demo.html上,但是,location /index {}却拦截了所有以"/index"开头的请求。

nginx 将请求映射到具体文件(为网页配置虚拟路径)_服务器_14

首页访问变成了404

nginx 将请求映射到具体文件(为网页配置虚拟路径)_nginx_15

/请求指定的root无效,实际其作用的是/index对应的root。

因为nginx先是检测到请求是"/",然后转换成index请求,结果被location /index{}截获,最终就成了下面这个样子。

nginx 将请求映射到具体文件(为网页配置虚拟路径)_后台开发工具_16

访问/index.html也是如此

nginx 将请求映射到具体文件(为网页配置虚拟路径)_html_17

此时,我们去访问/50x.html是不受影响的。

nginx 将请求映射到具体文件(为网页配置虚拟路径)_nginx_18

nginx 将请求映射到具体文件(为网页配置虚拟路径)_服务器_19

所以,我们可以断定:请求跑串啦,所以,为了让各个请求互不干扰,我们需要为虚拟路径末尾加上"/"。

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!


举报

相关推荐

0 条评论