在 Nginx 中设置资源请求目录主要涉及配置 location
指令和 root
或 alias
指令。以下是详细的配置方法:
root
指令server {
listen 80;
server_name example.com;
# 设置根目录
root /var/www/html;
location / {
index index.html;
}
# 静态资源目录
location /static/ {
# 实际路径为 /var/www/html/static/
# 会自动将URI中的/static/映射到文件系统的/static/目录
}
}
alias
指令location /images/ {
# 使用alias时,URI中的/images/会被替换为指定的路径
alias /var/www/media/;
# 可选:设置目录列表显示
autoindex on;
}
location /protected/ {
alias /var/www/protected_files/;
# 禁止目录列表
autoindex off;
# 访问控制
allow 192.168.1.0/24;
deny all;
# 基本认证
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
location / {
root /var/www/html;
index index.html index.htm default.html;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
root /var/www/html;
expires 30d;
add_header Cache-Control "public, no-transform";
}
location / {
root /var/www/html;
try_files $uri $uri/ =404;
}
location /assets/ {
# 尝试按顺序查找文件
try_files $uri @fallback;
}
location @fallback {
root /var/www/alternative_assets;
}
server {
listen 80;
server_name example.com;
root /var/www/example.com;
location / {
try_files $uri $uri/ /index.html;
}
location /static/ {
# 静态文件缓存30天
expires 30d;
add_header Cache-Control "public";
}
location /uploads/ {
alias /var/www/shared_uploads/;
# 禁止PHP文件执行
location ~ \.php$ {
deny all;
}
}
}
server {
listen 80;
server_name projects.example.com;
location /project1/ {
alias /var/www/projects/project1/public/;
index index.html;
}
location /project2/ {
alias /var/www/projects/project2/dist/;
index index.html;
}
}
root
和 alias
的区别:
root
会将 location 的 URI 部分附加到指定的路径后alias
会完全用指定的路径替换 location 的 URI 部分路径末尾斜杠:
location /images/
和 alias /path/to/images/
权限问题:
chown -R www-data:www-data /var/www/
测试配置:
nginx -t
测试配置是否正确systemctl reload nginx
重新加载配置通过以上配置,您可以灵活地设置 Nginx 的资源请求目录,满足各种静态资源服务需求。