本文档基于 CentOS 系统,指导您如何部署 Nginx 作为高性能图片访问服务器,并提供详细的故障排除步骤。
一、部署方法 (Nginx 配置)
以下步骤假定图片文件存放在 /data/images 目录下,并通过 注册的域名或外网地址 提供访问。
1. 准备图片存储目录与权限
重要性: 正确的权限是避免 403 Forbidden 错误的关键。
# 1. 创建图片存储目录
sudo mkdir -p /data/images
# 2. 更改所有权 (解决 'root' 文件无法访问的问题)
# 将所有权递归地更改为 Nginx 运行用户 (通常是 nginx)
sudo chown -R nginx:nginx /data/images/
# 3. 设置权限
# 递归地设置文件权限为 644 (所有者可读写,其他人只读)
sudo find /data/images -type f -exec chmod 644 {} ;
# 递归地设置目录权限为 755 (所有者可读写执行,其他人只读执行/可进入)
sudo find /data/images -type d -exec chmod 755 {} ;
2. 安装与启动 Nginx
# 安装 Nginx
sudo yum install nginx
# 启动 Nginx 服务
sudo systemctl start nginx
# 设置开机自启
sudo systemctl enable nginx
3. 配置 Nginx 虚拟主机
编辑 Nginx 配置文件,确保 root 路径指向您的图片目录。
创建或编辑虚拟主机配置文件
sudo vi /etc/nginx/conf.d/default.conf
server {
listen 80;
# 替换为您的域名,如 注册的域名.cn
server_name localhost 注册的域名.cn;
# 关键配置:location 块
location / {
# ⭐⭐⭐ 核心配置:root 必须指向图片的绝对存储路径 ⭐⭐⭐
# 解决日志中出现 'open() "/usr/share/nginx/html/..." failed' 的 404 错误
root /data/images;
# 尝试查找文件,如果找不到则返回 404
try_files $uri $uri/ =404;
# 可选:设置图片缓存时间 (提高浏览器访问速度)
expires 30d;
}
# ... 其他配置,如错误页 ...
}
4. 测试与重载 Nginx
# 1. 测试配置文件语法是否正确 (必须显示 test is successful)
sudo nginx -t
# 2. 如果测试通过,重载 Nginx 服务
sudo systemctl reload nginx
5. 开放防火墙端口
确保您的服务器防火墙和云服务商的安全组都开放了 80 端口(HTTP)。
# CentOS 防火墙开放 80 端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
想让 注册的域名.cn 同时提供网站和图片服务,如何做更复杂的 location 配置来区分?
🛠️ 推荐配置: (基于路径区分更灵活)
假设:
- 网站主体根目录:
/usr/share/nginx/html - 图片存储根目录:
/data/images
您可以将之前的 default.conf 修改为如下配置:
server {
listen 80;
server_name localhost iloveknowledge.cn www.iloveknowledge.cn;
# 1. 网站主体 location 块 (最低优先级,作为默认处理)
# 网站服务
location / {
root /usr/share/nginx/html; # <-- 网站 HTML/CSS/JS 文件的根目录
index index.html index.htm;
# 尝试查找文件,如果找不到则返回 404
try_files $uri $uri/ =404;
}
#图片资源访问服务
location /images/ {
# 'root' 指令:Nginx 会将请求 URI (/images/logo.jpg) 附加到 root 路径上
# 实际查找路径: /data/images/images/logo.jpg <-- 注意这里有重复的 /images/
# 因此,你需要确保你的图片文件放在 /data/images/images/ 目录下
# root /data/images;
# 更好的做法是使用 alias,但如果目录结构一致,root 也可以:
alias /data/images/;
# 提高图片访问性能
expires 30d;
access_log off;
log_not_found off;
}
# ... 其他错误页配置 ...
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}