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;
}
}

人已赞赏
文章资讯

那些类型网站适合美国服务器?

2021-5-27 15:33:24

文章资讯

逻辑运算符

2021-6-9 22:36:40

主机评测文章收集至网络,真实测评部分为本站原创,部分为商家自行投稿,原则上所有的商家都有可能跑路,请大家自行甄别,小心为上!如收集的文章使您的权利被侵害,请联系站长 QQ:302784768或 点击右侧 私信:Muze 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索