Я пытаюсь обслуживать изображения, которые хранятся в другом месте, кроме корня документа.
#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;
}
В location
Блок, который вы используете, работает так:
URL http://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;
}