实验 7:服务访问的用户认证

实验目的:配置 Nginx 实现 HTTP 基本认证,保护特定目录。

1. 创建密码文件

# 创建密码文件 .htpasswd,用户名为 admin,密码为 lee
# -c: 创建新文件 (create)
# -m: 使用 MD5 加密密码 (md5)
# -b: 批处理模式,密码直接在命令行提供 (batch)
[root@Nginx ~]# htpasswd -cmb /usr/local/nginx/conf/.htpasswd admin lee
Adding password for user admin

2. 配置 Nginx

server {
    listen 80;
    server_name lee.timinglee.org;
    location /admin {
        root /usr/local/nginx/html;
        # 开启认证,括号内为浏览器弹窗显示的提示信息
        auth_basic  "login passwd ";
        # 指定密码文件路径
        auth_basic_user_file  "/usr/local/nginx/conf/.htpasswd";
    }
}

3. 重启服务并测试

# 重启 Nginx 服务使配置生效
[root@Nginx ~]# systemctl restart nginx.service

# 测试 1:直接访问,应返回 401 未授权
[root@Nginx ~]# curl  lee.timinglee.org/admin/
# 返回内容包含 <title>401 Authorization Required</title>
# 测试 2:带用户名密码访问,应成功
# -u: 指定用户名和密码 (user)
[root@Nginx ~]# curl  -u admin:lee http://lee.timinglee.org/admin/
# 返回内容:admin

实验 8:自定义错误页面

实验目的:当访问出现特定错误(如 404, 502)时,显示自定义内容。

1. 准备错误页面内容

# 创建错误页面目录
[root@Nginx ~]# mkdir  /usr/local/nginx/errorpage

# 创建错误提示文件,写入自定义内容
[root@Nginx ~]# echo "太不巧了,你要访问的页面辞职了!!" > /usr/local/nginx/errorpage/errormessage

# 验证文件内容
[root@Nginx ~]# cat /usr/local/nginx/errorpage/errormessage
太不巧了,你要访问的页面辞职了!!

2. 配置 Nginx

server {
    listen 80;
    server_name lee.timinglee.org;
    # 定义错误代码对应的内部跳转 URI
    # 当出现 404, 405, 503, 502 时,内部跳转到 /error
    error_page 404 405 503 502 /error;
    
    location /lee {
        root /usr/local/nginx/html;
    }

    # 处理 /error 请求
    location /error {
        # 别名映射,将 /error 请求直接映射到具体文件路径
        alias /usr/local/nginx/errorpage/errormessage;
    }
}

3. 测试验证

# 访问不存在的路径触发错误页面
[root@Nginx ~]# curl  lee.timinglee.org/lee/
# 返回内容:太不巧了,你要访问的页面辞职了!!

实验 9:自定义错误日志

实验目的:为特定虚拟主机配置独立的错误日志文件,便于排查问题。

1. 创建日志目录

# 创建多级目录用于存放特定域名的日志
[root@Nginx ~]# mkdir  -p /usr/local/nginx/logs/timinglee.org/

2. 配置 Nginx

server {
    listen 80;
    server_name lee.timinglee.org;
    error_page 404 405 503 502 /error;
    
    # 指定错误日志的路径、文件名及日志级别 (error)
    error_log logs/timinglee.org/lee.error error;
    
    location /lee {
        root /usr/local/nginx/html;
    }

    location /error {
        alias /usr/local/nginx/errorpage/errormessage;
    }
}

3. 重启服务并验证日志

# 重启服务
[root@Nginx ~]# systemctl restart nginx.service

# 进入日志目录
[root@Nginx ~]# cd  /usr/local/nginx/logs/timinglee.org/
[root@Nginx timinglee.org]# ls
lee.error

# 触发错误前查看日志(应为空)
[root@Nginx timinglee.org]# cat lee.error

# 触发错误请求
[root@Nginx timinglee.org]# curl  lee.timinglee.org/lee/
太不巧了,你要访问的页面辞职了!!

# 再次查看日志,应包含错误详情
[root@Nginx timinglee.org]# cat lee.error
# 内容示例:... "/usr/local/nginx/html/lee/index.html" is not found (2: No such file or directory) ...

实验 10:Nginx 中建立下载服务器

实验目的:配置目录浏览、下载限速、文件大小及时间显示格式优化。

1. 准备测试文件

# 创建下载目录
[root@Nginx ~]# mkdir  -p /usr/local/nginx/download

# 复制一个小文件用于测试
[root@Nginx ~]# cp /etc/passwd  /usr/local/nginx/download/

# 使用 dd 命令创建一个 100MB 的大文件用于测速
# if=/dev/zero: 输入源为零设备
# of=...: 输出文件路径
# bs=1M: 块大小 1MB
# count=100: 复制 100 个块
[root@Nginx ~]# dd if=/dev/zero of=/usr/local/nginx/download/bigfile bs=1M count=100

2. 基础下载配置 (启用列表功能)

location /download {
    root /usr/local/nginx;
    # 开启目录自动索引功能 (目录浏览)
    autoindex on;
}

3. 下载控速

location /download {
    root /usr/local/nginx;
    autoindex on;
    # 限制下载速度为 1024k (1MB/s)
    limit_rate 1024k;
}

测试命令:

# 使用 wget 下载测试速度
[root@Nginx ~]# wget http://lee.timinglee.org/download/bigfile
# 观察输出中的速度是否被限制在 1.00MB/s 左右

4. 显示文件大小优化

location /download {
    root /usr/local/nginx;
    autoindex on;
    limit_rate 1024k;
    # 关闭精确大小显示,改为人类可读格式 (如 100M, 1K)
    autoindex_exact_size off;
}

5. 时间显示调整

location /download {
    root /usr/local/nginx;
    autoindex on;
    limit_rate 1024k;
    autoindex_exact_size off;
    # 使用本地时间显示文件修改时间,而非 GMT 时间
    autoindex_localtime on;
}

6. 设定页面风格

location /download {
    root /usr/local/nginx;
    autoindex on;
    limit_rate 1024k;
    autoindex_exact_size off;
    autoindex_localtime on;
    # 设置索引页面输出格式,支持 html, xml, json, jsonp
    autoindex_format xml; 
}

操作命令:

# 每次修改配置后重载 Nginx
[root@Nginx ~]# nginx -s reload

# 测试访问 (注意目录后需加 / 否则可能 301 跳转)
[root@Nginx ~]# curl  lee.timinglee.org/download/

实验 11:Nginx 的文件检测

实验目的:使用 try_files 指令检测文件是否存在,实现伪静态或默认页 fallback。

1. 准备默认页面

# 创建默认返回内容的文件
[root@Nginx ~]# echo default  > /usr/local/nginx/errorpage/default.html
[root@Nginx ~]# cat /usr/local/nginx/errorpage/default.html
default

2. 配置 Nginx

server  {
    listen 80;
    server_name lee.timinglee.org;
    error_page 404 405 503 502 /error;
    error_log logs/timinglee.org/lee.error error;
    
    # 设置根目录
    root /usr/local/nginx/errorpage;
    
    # 文件检测指令
    # 依次检查:$uri (请求路径) -> $uri.html -> $uri/index.html
    # 如果都不存在,则内部重定向到 /default.html
    try_files $uri $uri.html $uri/index.html /default.html;
}

3. 重载并测试

# 重载配置
[root@Nginx ~]# nginx -s reload

# 测试访问一个不存在的路径
# 由于 try_files 的存在,不会返回 404,而是返回 default.html 的内容
[root@Nginx ~]# curl -v  lee.timinglee.org/aaaaaaaaaa/
# 返回状态码:HTTP/1.1 200 OK
# 返回内容:default

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐