综合

nginx网站目录

时间:2010-12-5 17:23:32  作者:娱乐   来源:休闲  查看:  评论:0
内容摘要:nginx的默认网站目录在多数发行版上是/usr/share/nginx/html,但真正干活的人早把这一行改掉了。我见过太多新手直接往这个目录扔文件,然后权限报错、路径冲突、重启服务后页面还是404

nginx的站目默认网站目录在多数发行版上是/usr/share/nginx/html,但真正干活的站目人早把这一行改掉了。我见过太多新手直接往这个目录扔文件,站目然后权限报错、站目路径冲突、站目重启服务后页面还是站目404——问题十有八九出在“你以为的目录”和“nginx实际监听的目录”不是同一个。

打开nginx配置文件,站目server块里的站目root指令才是网站目录的最终裁决者。比如root /var/www/mysite;,站目那么请求/index.html时,站目nginx实际读取的站目是/var/www/mysite/index.html。这个路径可以随便放,站目但别放/home下——除非你清楚SELinux或AppArmor的站目规矩,否则光权限就能折腾你半天。站目我习惯把站点放在/var/www/下,站目按域名分文件夹,比如/var/www/example.com/,里面再分public和logs,清晰又省心。

有个细节常被忽略:root和alias是两码事。如果你在location /static/里写root /data/files;,那请求/static/a.jpg会去/data/files/static/a.jpg找文件——多了一层static目录。想剥掉这层,得用alias /data/files/;,它会把/static/直接映射到/data/files/。这个坑我踩过,线上图片全部404,排查半天才发现是root和alias搞混了。

还有一处容易翻车:index指令。它决定访问目录时默认加载哪个文件。默认是index index.html;,但如果你用PHP或Python框架,大概率得改成index index.php;或index app.py;。更隐蔽的是,nginx会按顺序尝试这些文件,如果第一个不存在就试第二个,全部不存在就返回403或目录列表(如果开了autoindex)。曾经有个客户把index.html删了,只留index.htm,结果整站打不开——就为这一个字母的差异。

实际部署时,别忘了检查user指令。nginx的worker进程以什么用户运行,决定了它有没有权限读取网站目录里的文件。默认是user nginx;,但如果你把目录所有者设成www-data或自己的账号,那就得改配置或调权限。我通常把目录所有者设为nginx用户,然后chmod 755,文件644,简单粗暴不出错。要是目录里有上传功能,还得单独给可写目录设775并加组权限,否则用户传个图都能报500。

最后提一嘴硬链接和符号链接。nginx默认会解析符号链接,但如果你出于安全考虑关了disable_symlinks,那网站目录里的快捷方式就全废了。我见过有人把静态资源用软链指到另一块磁盘,结果忘了这茬,上线后所有图片打不开。所以要么别用软链,要么在配置里显式允许。

说白了,nginx网站目录就是个路径游戏。你给它一个root,它就按这个路径找文件。改对目录,重启服务,一切顺畅。改错地方,日志里全是open() failed,一行行看下去,总能找到那个让你抓狂的绝对路径。别问我怎么知道的——我电脑里还存着当年排查三小时的截图呢。

最近更新
热门排行
copyright © 2026 powered by 烟消火灭网   sitemap