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