Назад | Перейти на главную страницу

простой псевдоним 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;
}

В 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;
}