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

1.情景展示

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

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

如下图所示:

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

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

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

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

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

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

2.具体分析

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

3.解决方案

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

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

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

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

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。

配置网页的虚拟访问路径

说明:虚拟主机配置多个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:使用正则表达式设置跳转规则及跳转页面。

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

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

4.扩展 

如何禁用nginx欢迎页?

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

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

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

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

index.html可以照常访问。

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

在html目录下。

对应的是:

对应的是:

2024-05-29 19:51:50

还有一种实现方式:

那就是将nginx.config文件中80端口配置删掉,但必须保留一个server配置(一般是要部署的项目)。

这样,我们在访问80端口的时候就会出错。

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

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

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

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

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

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

举例:

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

首页访问变成了404

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

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

访问/index.html也是如此

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

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

2024-05-29 18:53:41

nginx常用命令(windows)

前提:切换到nginx所在目录

测试nginx的配置信息是否成功

nginx -t

启动nginx
nginx
start nginx

关闭nginx

第一种方式

nginx -s stop

 

这个操作并不一定就能关闭80端口的占用。

第二种方式

我们可以用下面操作步骤彻底杀死80端口的进程。

netstat -ano | findstr "80"
netstat -ano | findstr :80

以上两种查询方式都可以。

tasklist | findstr 17364

 我们可以看到:80端口仍然被占用。

有上图可以看到80端口对应的pid是:17364,然后,我们把这个进程杀掉就可以了。

taskkill /f /t /pid 17364

 再次查询80端口占用情况。

 这时,我们发现已经没有进程占用80端口了。

第三种方式(推荐使用)

taskkill /F /IM nginx.exe

修改nginx占用的端口号

我们知道,nginx启动时占用的默认端口号是:80。

这个我们在NGINX_HOME/config/nginx.config文件中可以找到。

我们直接将80改成想要的端口就可以了。

前提:需要先确保要使用的端口没有被占用。

访问欢迎页。

前端项目通过nginx启动不起来

第一步:清空logs和temp目录。

注意:如果logs和temp目录不存在,也会造成nginx无法启动!

出现这种情况,一般使用的是80端口。

首先要看nginx.config需要代理的项目所使用的端口号。

然后再查看端口号是否被占用,一般情况下是被占用了。

然后杀死占用此端口的进程,最后再启动nginx就可以了。

2024-05-30 16:07:46

如何判断nginx是否启动成功?

第一种方式:直接在浏览器中访问项目地址。

第二种方式:如果是在cmd下用命令启动的nginx的话,我们可以查看项目所使用的端口是否存在。

第一步:检查项目使用的端口;

在配置文件nginx.config中可以看到,项目使用的端口是80。

检查是否存在项目使用的端口的进程

netstat -ano | findstr :项目准备使用的端口号

启动之后,并没有找到使用80端口的进程。

由此可见,nginx并没有启动成功。

我们在上图中,可以看到存在使用80端口的进程,这就说明nginx已经启动成功了。 

第三种方式:(推荐使用)

tasklist /fi "imagename eq nginx.exe"

nginx目录说明

说明:NGINX_HOME目录下的temp和logs文件夹必须存在,否则nginx将无法启动。

如果需要,可以将temp和logs目录下的内容进行清空。

以VUE项目为例,启动nginx后,temp下生成的内容如下:

以VUE项目为例,启动nginx后,logs下生成的内容如下:

可以将清空temp和logs目录的封装成bat文件。

del /q /f /s logs\*
cd temp
rd /s /q "."
:end
exit

以后直接运行这个bat文件就可以了。

写在最后

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

 相关推荐:

posted @ 2022-03-09 20:33  Marydon  阅读(5826)  评论(0编辑  收藏  举报