以下是一个基本的Nginx配置示例,用于提供本地静态资源服务:
server {
listen 80;
server_name yourdomain.com; # 替换为你的域名或IP
# 静态资源根目录配置
location /static/ {
alias /path/to/your/static/files/; # 替换为你的实际路径
autoindex on; # 可选:启用目录列表
}
# 图片资源单独配置
location /images/ {
alias /path/to/your/images/;
# 设置图片缓存时间
expires 30d;
}
# 视频资源单独配置
location /videos/ {
alias /path/to/your/videos/;
# 视频文件通常较大,需要特殊配置
sendfile on;
tcp_nopush on;
# 设置视频缓存时间
expires 365d;
}
}
location /static/ {
root /var/www/static;
# 或者使用alias
# alias /var/www/static/;
# 防止目录遍历攻击
location ~* \.(php|php5|sh|pl|py)$ {
deny all;
}
}
注意:root
和alias
的区别:
- root
会将完整URI路径附加到指定目录后
- alias
会使用指定路径完全替换URI中的匹配部分
location ~* \.(jpg|jpeg|png|gif|ico|webp)$ {
root /var/www/images;
expires 30d;
add_header Cache-Control "public, no-transform";
# 启用图片优化
image_filter resize 800 600; # 可选:动态调整图片大小
image_filter_jpeg_quality 85;
}
location ~* \.(mp4|webm|ogg)$ {
root /var/www/videos;
expires 365d;
# 启用视频流媒体支持
mp4;
mp4_buffer_size 1m;
mp4_max_buffer_size 5m;
# 限制视频下载速度(可选)
limit_rate_after 10m;
limit_rate 1m;
}
location /downloads/ {
alias /var/www/downloads/;
# 大文件下载优化
sendfile on;
tcp_nopush on;
aio on;
# 限制下载速度(可选)
limit_rate 500k;
}
location /static/ {
limit_except GET HEAD {
deny all;
}
}
location /static/ {
# 禁止访问隐藏文件
location ~ /\. {
deny all;
}
}
types {
image/webp webp;
video/mp4 mp4;
video/webm webm;
video/ogg ogv;
}
user www-data;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
server {
listen 80;
server_name static.example.com;
# 静态资源根目录
location / {
root /var/www/static;
index index.html;
autoindex off;
}
# 图片服务
location /images/ {
alias /var/www/images/;
expires 30d;
access_log off;
}
# 视频服务
location /videos/ {
alias /var/www/videos/;
mp4;
mp4_buffer_size 1m;
mp4_max_buffer_size 5m;
expires 365d;
}
# 禁止访问隐藏文件
location ~ /\. {
deny all;
}
# 错误页面
error_page 404 /404.html;
location = /404.html {
root /var/www/errors;
internal;
}
}
}
sudo mkdir -p /var/www/{static,images,videos}
sudo chown -R www-data:www-data /var/www
sudo nginx -t
sudo systemctl reload nginx
- 访问 http://yourdomain.com/images/test.jpg
- 访问 http://yourdomain.com/videos/sample.mp4
403 Forbidden错误:
chmod -R 755 /path/to/files
chown -R www-data:www-data /path/to/files
404 Not Found错误:
root
或alias
路径视频无法播放:
性能问题:
sendfile
和tcp_nopush
通过以上配置,你可以高效安全地使用Nginx提供本地静态资源服务。