尝试提供文档根目录以外的文件时,简单的 nginx 别名不起作用

尝试提供文档根目录以外的文件时,简单的 nginx 别名不起作用

我正在尝试提供存储在文档根目录以外的不同位置的图像。

#avatar files block
location ~^/pics/profile/(.*)$ {
        alias   /home/data/site_data/profile/$1;
}

我已经在文件中添加了上述代码块nginx .conf并做了

systemctl restart nginx

当我尝试访问

http://www.example.com/pics/profile/1/1.jpg

它给了我404 未找到错误

我该如何修复这个问题?我在文件顶部指定了文档根目录,nginx configuration如下所示

root   /usr/share/nginx/site.com/html;

我已经检查过并且文件存在于

/home/data/site_data/profile/1/1.jpg

更新 :

我的完整配置是这样的

server {
        listen       80;
        server_name  example.com;
        charset utf-8;
        client_max_body_size 6M;

root   /home/data/nginx/example.com/html;

location / {
        index  index.php index.html;
}

#error_page  403 404 500 502 503 504             /404.html;

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
  expires 1M;
  access_log off;
  add_header Cache-Control "public";
}

access_log  /dev/null;

#restrict php execution from these directories
location ^~ /cache/ {location ~* \.php$ { return 404; }}
location ^~ /content/ {location ~* \.php$ { return 404; }}
location ^~ /css/ {location ~* \.php$ { return 404; }}
location ^~ /images/ {location ~* \.php$ { return 404; }}
location ^~ /js/ {location ~* \.php$ { return 404; }}
location ^~ /pics/ {location ~* \.php$ { return 404; }}


# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.(php)$ {
        try_files       $uri =404;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        include         fastcgi_params;
        }


#avatar files block
location ~^/pics/profile/(.*)$ {
        alias   /home/data/site_data/profile/$1;
}


include /etc/nginx/example.com_rewrite_rules.conf;
}

答案1

您使用的块location的工作原理如下:

此 URLhttp://your-site.com/pics/profile/pic.jpg由 提供/home/data/site_data/profile/pic.jpg/pic.jpg

这是因为它alias指的是提供文件的目录。

如果您想/home/data/site_data/profile/pic.jpg在该 URL 上提供服务,您可以使用此位置块:

location /pics/profile {
    alias /home/data/site_data/profile;
}

另外,我将使用如下位置来防止 PHP 执行:

location ^~ ^/(cache|content|css|images|js|pics)/.+\.php$ {
    return 404;
} 

相关内容