Nginx配置静态资源目录规则匹配问题

nginx与apache都是常用的web服务器,两者之间有各自的优缺点,最大的区别在于apache是同步多进程处理请求,一个连接对应一个进程,而nginx是异步的,多个连接(万级别)可以对应一个进程。

由于apache出现的比较早,因此apache的重点在于功能模块的精进且相对非常稳定,随着互联网的飞速发展,网站的访问量以指数增长,大型网站的除了加大硬件投入外,曾经的王者Apache此时有点力不从心,于是高性能的Nginx开始崛起,逐步取代apache。

总结一句话:在二次开发能力有限的前提条件下,求稳定以及功能丰富则考虑apache,求性能则考虑nginx。比如典型的静态资源服务器还是优先考虑nginx比较好。

当然今天的主题并不是讨论apache和nginx的优缺点,以上基本属于跑题,但公司的更新服务模块由原使用的apache改用nginx时,不得不了解一下两者之间的区别,了解过后可以确定改用nginx比较合理,期间也遇到一些问题,因此记录下来。

问题1

nginx在windows中的安装相对apache复杂一点,想要作为service自启动,需要借助第三方工具winsw。当然这也不算什么问题,顶多算nginx并没有实现添加到service的功能。由于apache可以直接命令添加到服务,习惯性的还是使用winsw安装nginx到服务中了。

问题2

配置nginx时发现其location路由指向静态目录的匹配规则与apache也有差异。

使用root关键字指向目录,并按照apache的匹配习惯来配置时,总是404。具体如下:

server {
listen 80;
server_name update.xxxxx.com;
location /serverlist {
root D:/ServerList;
}
}

 

如此配置的期望是
url访问update.xxxxx.com/serverlist/*.txt
对应文件路径应该在D:/ServerList/*.txt
以及包括子目录,也就是说,路由/serverlist应该直接指向到D:/ServerList的根目录,这才应该跟apache的匹配规则对应。
结果却一直是404。

详细了解后,原来nginx的root关键字的匹配规则是将location中路由作为目录去root指定的根目录寻找,因此location /serverlist则会在root指定的D:/ServerList目录中再次寻找serverlist目录,最终寻找的目录路径为D:/ServerList/serverlist/*.txt,所以按照此规则重新新建好目录,就可以正常访问了,然而很不舒服,无缘无故多了一层目录看着挺别扭。然而最后找到,nginx除了root关键字,也有跟apache相同的alias关键字,好吧,还是这种方式比较舒服,路由地址随便指定不影响实际根目录路径就可以了。具体修改如下:

server {
listen 80;
server_name update.xxxxx.com;
location /serverlist {
alias D:/ServerList;
}
}
文章资讯

逻辑运算符

2022-6-12 13:05:32

文章资讯

安卓苹果手机如何远程连接Windows云服务器?

2022-6-13 11:50:00

声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:147-5673-5673;邮箱:hostpc@qq.com
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索