一、背景
我们在使用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:\\sources\video/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\nginx1.18.0\video/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加载可能会出现一些问题,就是运行了多个进程。
参考
以下的博客有更加详细的记载。