Nginx功能篇05—目录别名

概述

本章,您将学习到 Nginx 的目录别名功能。

几乎所有的 Web 服务器都支持这个功能,简单理解为一种类似调取资源文件的快捷方式。

默认情况下,当 Nginx 接受客户端请求时,会搜索 location / { }root 指令指定目录下的资源并发送给客户端。但是,有时客户端访问的资源并不在这个指令指定的目录下,我们希望被访问的资源在操作系统中被保留在原始的位置且不需要移动,这就需要目录别名。

在使用 Nginx 的目录别名功能时,需要注意以下几点:

  • 要实现该功能,您需要在 location 上下文中使用 alias 指令
  • alias 指令后面的指令参数必须是一个目录且结尾处必须带有 "/" ,表明这是一个目录,如 alias /test/;
  • 若 location 上下文匹配的是目录资源,则目录也应该在结尾处带有 "/",如 location /images/ { ... }
  • 若使用了目录别名功能,则在对应的 location 上下文中通常都会使用 index 指令定义一个或多个索引文件,若索引文件不存在,Nginx 默认会提示 "403" 错误,除非开启了目录浏览(目录列表)功能

相关指令说明

  • alias 指令 - 启用别名功能,语法为 alias path;。仅能配置在 location 上下文中
  • autoindex 指令 - 当不存在索引文件时,是否启用目录浏览功能,语法为 autoindex on | off;,默认为 autoindex off;

功能演示

修改主配置文件,文件内容如下所示:

Shell > vim /usr/local/nginx/conf/nginx.conf
user  nginx;
worker_processes  4;

error_log  logs/error.log  error;

pid        logs/nginx.pid;

worker_rlimit_nofile 7400;

events {
    use epoll;
    worker_connections  1024;
    multi_accept on;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    sendfile       on;
    tcp_nopush     on;

    keepalive_timeout  30;
    server_tokens off;

    gzip on;
    gzip_vary on;
    gzip_buffers 32 4K;
    gzip_comp_level 5;
    gzip_types text/plain text/css text/xml application/json application/javascript application/xml application/xhtml+xml image/svg+xml application/x-font-ttf application/x-font-opentype application/vnd.ms-fontobject font/woff;
    gzip_min_length 256;

    server {
        listen  192.168.100.20:80;
        server_name  www.games.com;
        access_log  logs/games-access.log  main;
        charset utf-8;

        location / {
            root   /html/games/;
            index  index.html index.htm;
            location ~* \.(jpg|css|jpeg|xml|js|gif) {
                expires 4h;
            }
        }

        location /images/ {
            alias /var/www/attachment/;
            autoindex off;
            location ~* \.(jpg|css|jpeg|xml|js|gif) {
                expires 2h;
            }
        }
    }
}

创建对应的目录:

Shell > mkdir -p /var/www/attachment/

使用 Windows 10/11 的 PowerShell 上传一张图片:

PS > cd E:\

PS > scp -P 22 .\dogs.jpg root@192.168.100.20:/var/www/attachment/

将 Nginx 启动:

Shell > /usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx

验证

请求静态资源:

Shell > curl -I http://192.168.100.20/images/dogs.jpg
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 04 Sep 2026 02:16:13 GMT
Content-Type: image/jpeg
Content-Length: 6040300
Last-Modified: Fri, 04 Sep 2026 02:09:12 GMT
Connection: keep-alive
ETag: "6a9a2848-5c2aec"
Expires: Fri, 04 Sep 2026 04:16:13 GMT
Cache-Control: max-age=7200
Accept-Ranges: bytes

当用户的浏览器请求 http://192.168.100.20/images/dogs.jpg 时,在操作系统看来,实际请求的是 /var/www/attachment/dogs.jpg 。从命令的输出可以看到,静态缓存也是生效的。

Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci",Github - https://github.com/jimcat8
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇