nginx配置静态文件

一、背景

我们在使用nginx的时候会进行静态资源的配置,网上有很多方法,这里记录一下自己遇到的问题。

 二、nginx下载与目录结构

下载nginx的服务器:下载地址,下载完成后解压一下就可以了。

核心目录结构如下

# 相同
1. html文件夹
默认的文件,存放默认的html
2.logs文件夹
记录错误和运行日志,这个可以进行排错
3.conf文件夹
最为重要的文件,用于uri的配置

# 不同
# nginx.exe
Windows下的nginx启动目录
# sbin文件
Linux下的nginx启动目录

三、基础命令

列举一些常用的指令,在不同的语法上,运行的指令都差不多。

# windows下的
# 启动nginx
nginx start 
# nginx重载
nginx -s reload
# nginx停止
nginx -s stop
# nginx退出
nginx -s quit
# linux下的(与前面一致)
./nginx  [args]

四、路由配置

4.1 location配置

4.1.1 路由配置含义

# 路由匹配前缀内容
=:精确匹配
^~:精确前缀匹配
~:区分大小写的正则匹配
~*:不区分大小写的正则匹配
/uri:普通前缀匹配
/:通用匹配

4.1.2 规则路由与请求uri

# 规则设置
location = / {
   echo "规则A";
}
location = /login {
   echo "规则B";
}
location ^~ /static/ {
   echo "规则C";
}
location ^~ /static/files {
    echo "规则X";
}
location ~ .(gif|jpg|png|js|css)$ {
   echo "规则D";
}
location ~* .png$ {
   echo "规则E";
}
location /img {
    echo "规则Y";
}
location / {
   echo "规则F";
}
# uri配置下的请求路由
       请求uri                               匹配路由规则
http://localhost/                              规则A
http://localhost/login                         规则B
http://localhost/register                      规则F
http://localhost/static/a.html                 规则C
http://localhost/static/files/a.txt            规则X
http://localhost/a.png                         规则D
http://localhost/a.PNG                         规则E
http://localhost/img/a.gif                     规则D
http://localhost/img/a.tiff                    规则Y

4.1.3 路径选择

在进行配置的时候需要使用到一些路径的管理,这里包括两个方法root和alias,其中alias只能在location中使用,而root可以任意使用。其中root和alias的区别如下:

1. root

root的默认是html的根目录,把资源都放到html下基本不会出现问题,然后搜索的路径就是root和请求的路径一起作为搜索路径,这样就可以实现整个路由的访问和资源的获取。

# 请求公式
搜索路径=root+请求路径

# location配置
location  {
    root html;
}

# 请求路由
http:localhost/video/1.webm

# 搜索路径就是
root下的video文件夹下的1.webm资源

2. alias

alias会替换原来的路径,因此需要在最后添加反斜杠()这样来拼接路由,否则就会直接是请求的路由和alias连接在一起。这样的做法可以进行任意路径的匹配,尤其是在不使用默认的html目录文件作为映射资源的时候更为重要。

# 请求公式
搜索路由 = 配置路由

# location配置

location  {
        alias E:\sources\;
}

# 请求路由
http:localhost/video/1.webm

# 搜索路径
# 就是alias文件下的video文件夹中1.webm资源
E:\sourcesvideo/1.webm

4.2 实例

如我需要在nginx下使用video来进行视频数据的代理请求,就会访问下面这样的url,如果不将其放在默认的HTML下那么在url请求就会出现一些不合理的结果。

# 访问的url路由
http://localhost/video/1291543.webm

首先需要配置它的路由/video/

目录结构是video目录在这个文件目标文件下面,不在默认的html文件中。

使用root的配置情况如下,需要指定video所在文件的上级目录文件,而不是video文件本身所在的层级。

location  /video/ {    #指定视频、音频存放路径
        alias  E:\web_server\nginx-1.18.0\;
        autoindex on;
}

在video文件夹所在级目录就会出现,如果带上video的访问就会出现下面的问题,如果不带video文件访问就会出现和访问通配路由冲突的情况,或者在video的文件夹下面在嵌套一层video这都不合理。

CreateFile()"E:web_server
ginx1.18.0video/video/1291543.webm"

出现上述的情况,因为存在一个通配路由/,因此直接使用url匹配会出现定位会冲突或者无此路由规则,解决办法可以使用正则匹配高于一般的路由配置或者直接使用alias。

因此使用alias的配置如下

location  /video/ {    #指定视频、音频存放路径
        alias  E:\web_server\nginx-1.18.0\video\;
        autoindex on;
}

这样就可以直接访问video下面的数据信息,如果还是访问不到就关闭所有的nginx进程重新启动。

4.3 其他配置

nginx的其他配置

include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
sendfile on; #开启高效文件传输模式,
autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; #防止网络阻塞
tcp_nodelay on; #防止网络阻塞
keepalive_timeout 120; #长连接超时时间,单位是秒
gzip on; #开启gzip压缩输出

4.4 url访问

通过上述内容,最后设计的nginx代理内容如下,包括文件位置、路由设置、url如何访问

# 目录文件结构
video和nginx.exe目录同级

# nginx配置
# alias版本:
location  /video/ {    #指定视频、音频存放路径
        alias  E:\web_server\nginx-1.18.0\video\;
        autoindex on;
}

# root版本
location  /video/ {    #指定视频、音频存放路径
        root  E:\web_server\nginx-1.18.0;
        autoindex on;
}

# url访问
# 在video中添加这个视频资源就可以了
http://localhost/video/1291543.webm

五、总结

1.nginx的信息会记录在log文件中,可以查看运行记录来查看日志信息,以此查询出错原因。

2.可以通过结束进程重新启动nginx来更新数据,单纯的使用reload加载可能会出现一些问题,就是运行了多个进程。

参考

以下的博客有更加详细的记载。

路由配置详细介绍

root和alias区别

nginx的其他配置

原文地址:https://www.cnblogs.com/future-dream/p/14672365.html