Nginx新手求助:如何正确部署静态文件(尤其是图片)?
Nginx静态图片加载404问题排查与解答
我是Nginx新手,在Ubuntu系统的Vultr云服务器搭建网站时,图片始终无法正确加载,访问时返回404错误,日志提示“文件或目录不存在”。试过论坛、旧教程和Nginx官方文档都没解决,当前Nginx配置如下:
server { server_name lockheartdynamite.xyz ; root /var/www/lockheart ; index index.html ; location /image { autoindex on ; alias /home/metallic_halls/image ; } location / { try_files $uri $uri/ =404 ; } listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/lockheartdynamite.xyz/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/lockheartdynamite.xyz/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = lockheartdynamite.xyz) { return 301 https://$host$request_uri; } # managed by Certbot listen 80 ; listen [::]:80 ; server_name lockheartdynamite.xyz ; return 404; # managed by Certbot }
我虽然大概理解location块的作用,但还有几个问题:
- 静态文件服务是不是必须依赖服务器本地的实际文件?
- 存放图片的目录是需要我手动通过终端/桌面创建,还是Nginx会自动创建?
- 如果是Nginx创建的,怎么把图片放进这个目录里?
问题排查与解决
定位404核心原因
你的location /image配置使用alias /home/metallic_halls/image,意味着访问https://lockheartdynamite.xyz/image/xxx.jpg时,Nginx会去服务器的/home/metallic_halls/image/xxx.jpg路径查找文件。请依次检查:- 执行
ls -ld /home/metallic_halls/image确认该目录是否存在,不存在则手动创建:sudo mkdir -p /home/metallic_halls/image - 确保Nginx有读取该目录和文件的权限:执行
sudo chown -R www-data:www-data /home/metallic_halls/image修改归属,再执行sudo chmod -R 755 /home/metallic_halls/image设置可读权限 - 确认图片已上传至该目录,且文件名、路径与访问地址完全匹配(Linux系统区分大小写)
- 执行
解答你的疑问
- 静态文件服务完全依赖服务器本地实际存在的文件,Nginx仅负责文件的分发,不会生成或创建文件。
- 存放图片的目录必须手动创建,Nginx不会自动生成目录。你可以通过SSH终端用
mkdir命令创建,或使用SFTP工具可视化创建。 - Nginx不会创建目录,你需要自行将图片上传至已创建的目录:可使用SFTP工具(如FileZilla)拖拽上传,或通过终端
scp命令传输,示例:scp /本地图片路径/xxx.jpg 用户名@服务器IP:/home/metallic_halls/image/
额外注意事项
修改Nginx配置后,必须重启服务生效:sudo systemctl restart nginx
若问题仍存在,可查看详细错误日志排查:sudo tail -f /var/log/nginx/error.log,日志会明确指出无法找到的文件路径,对照检查即可。
内容的提问来源于stack exchange,提问作者rusted
相关产品推荐
相关产品推荐

