Nginx 的 alias 指令不解析符号链接,能否访问取决于 symlink 权限、目标路径可达性及 disable_symlinks 配置;必须确保 Nginx 用户对链接文件有读权限、对目标目录有执行权限、对目标文件有读权限,且未启用 disable_symlinks on。

Nginx 本身没有“配置符号链接属性”的指令,alias 指令不解析或处理 symlink,它只做路径字符串替换;能否通过 alias 访问符号链接,取决于底层权限、内核行为和 Nginx 的安全限制,而非 symlink 本身的“属性配置”。
关键前提:确保符号链接可被 Nginx 正确解析
要让 alias 映射到一个符号链接并正常提供内容,必须同时满足:
- 符号链接文件本身存在,且 Nginx worker 进程用户(如
www-data或nginx)对该链接有 read 权限; - 符号链接指向的目标路径真实存在,且该用户对目标目录有 execute(进入)权限,对目标文件有 read 权限;
- Nginx 配置中未启用
disable_symlinks on或disable_symlinks from=...—— 这是导致 403 的最常见原因。
alias 指令中写法要点
alias 后面的值必须是符号链接的字面路径(即你用 ls -l 看到的链接文件所在位置),不是它指向的目标路径。推荐用双引号包裹,尤其含空格、中文或特殊字符时:
location /media/ {<br> alias "/var/www/shared assets/";<br>}其中 /var/www/shared assets/ 是一个符号链接,实际指向 /mnt/nas/media。Nginx 不会“展开”它,但只要权限和 disable_symlinks 设置允许,就能读取其目标内容。
排查常见失败原因
遇到 403 或 404,请按顺序验证:
-
403 Forbidden:检查配置中是否误加了
disable_symlinks on;。临时注释掉并重载(nginx -t && nginx -s reload),若恢复访问,说明就是它拦截;可改为disable_symlinks off;或限定范围(如仅对上传目录启用); -
404 Not Found:运行
ls -l /var/www/shared assets/确认链接有效(应显示-> /mnt/nas/media);再用sudo -u www-data test -d /mnt/nas/media && echo ok检查目标路径可达性; -
跨文件系统异常:若目标挂载在 NAS 或外部磁盘,确认挂载选项不含
nosymfollow(某些 NFS 或 cifs 挂载可能默认禁用符号链接解析)。
安全提醒:避免意外暴露
符号链接可能指向任意路径(比如 /etc/passwd),因此:
- 不要在
alias值中使用变量(如$arg_path),防止路径遍历; - 若需动态映射,应配合
map指令 + 白名单校验; - 始终以最小权限用户运行 Nginx,禁止用 root 启动。


















