• 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的其他配置

  • 相关阅读:
    我们毕业了!!!@全体成员
    华东交通大学编译原理期末试卷
    软件设计师中级下午答题解题策略分析~
    Java实现旅行商最短距离
    基于SSH的医院在线挂号
    基于Java的模拟写字板的设计与实现
    基于java的雷电游戏
    基于Java的飞机大战游戏的设计与实现
    基于Java的超级玛丽游戏的设计与实现
    基于Javaee的影视创作论坛的设计与实现
  • 原文地址:https://www.cnblogs.com/future-dream/p/14672365.html
Copyright © 2020-2023  润新知