Обслуживание нескольких каталог в одном пути/местоположении с nginx

Я пробовал, вручают несколько каталогов в одном месте так, чтобы все файлы могли быть доступом на/sys/assets/-ФАЙЛЕ - независимо от того, где файл, физически располагаются в следующей папке

location /sys {
    alias /var/www/website_api/sys/public;
    try_files $uri $uri/ /sys/index.php$is_args$args;
    location ~ \.php {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    include /etc/nginx/fastcgi_params;
    }
        location /sys/assets {
           alias /var/www/website_api/sys/app/assets/javascripts/;
        }
        location /sys/assets {
           alias /var/www/website_api/sys/app/assets/stylesheets/;
        }
        location /sys/assets {
           alias /var/www/website_api/sys/app/assets/images/;
        }
}

Цель:

/sys/assets/javascriptFile.js
/sys/assets/stylesheetFile.css
/sys/assets/image.png
0
задан 17 September 2014 в 19:57
2 ответа

В вашей конфигурации не может быть повторяющихся местоположений с префиксом. Однако можно сделать то, что вы ожидаете, используя директиву try_files :

location /sys {

    alias /var/www/website_api/sys/public;
    try_files $uri $uri/ /sys/index.php$is_args$args;

    location ~ \.php {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        include /etc/nginx/fastcgi_params;
    }

    location ~ ^/sys/assets/?(.*)$ {
        root /var/www/website_api/sys/app/assets;
        try_files /javascripts/$1 /stylesheets/$1 /assets/images/$1;
    }

}

Если вам абсолютно необходимо избавиться от несоответствующих операций поиска в файловой системе (например, вызовов ядра stat () в Linux), вы можете также сделайте это более точно, используя несколько местоположений регулярных выражений, соответствующих подходящим расширениям файлов:

location /sys {

    alias /var/www/website_api/sys/public;
    try_files $uri $uri/ /sys/index.php$is_args$args;

    location ~ \.php {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        include /etc/nginx/fastcgi_params;
    }

    location ~ ^/sys/assets/?.*\.css$ {
        rewrite '^/sys/assets/(.*)$' '/$1' break;
        root /var/www/website_api/sys/app/assets/stylesheets;
    }

    location ~ ^/sys/assets/?.*\.(gif|ico|jpe?g|png|svg)$ {
        rewrite '^/sys/assets/(.*)$' '/$1' break;
        root /var/www/website_api/sys/app/assets/images;
    }

    location ~ ^/sys/assets/?.*\.js$ {
        rewrite '^/sys/assets/(.*)$' '/$1' break;
        root /var/www/website_api/sys/app/assets/javascripts;
    }

}
4
ответ дан 4 December 2019 в 11:27

Если вам нужно обслуживать файлы из нескольких разных корней, попробуйте использовать именованные местоположения.

    location / {
        root "E:\Directory1";
        try_files $uri $uri/ @dir2;
        index  index.php;
        autoindex on;
    }
    location @dir2 {
        root "F:\Directory2";
        index  index.php;
        try_files $uri $uri/ =404;
    }

Установите автоиндекс для первого и 404 для последнего (как показано). Должен иметь возможность связать столько, сколько захотите. Вы также можете сделать то же самое для своего местоположения .php .

1
ответ дан 4 December 2019 в 11:27

Теги

Похожие вопросы