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

Защитить / аналитику на Nginx с базовой аутентификацией, но разрешить доступ к файлам .php и .js?

Надеюсь, это правильное место, чтобы спросить. У меня установлен Piwik, и он работает на веб-сервере Nginx, который я защищал с помощью базовой аутентификации HTTP, как показано ниже.

location /analytics {
    alias /var/www/piwik/;
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/pass;
    try_files $uri $uri/ /index.php;
}

location ~ ^/analytics(.+\.php)$ {
    alias /var/www/piwik$1;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Это отлично подходит для защиты www.example.com/analytics. Однако пользователям предлагается войти в систему на каждой странице из-за того, что тег отслеживания Piwik находится на каждой странице. в официальный FAQ, эта проблема решена для Apache, но не для Nginx.

Если вы используете HTTP-аутентификацию (базовую или дайджест) для своих файлов Piwik, вам следует исключить piwik.php и piwik.js из этой аутентификации, иначе посетителям вашего сайта будет предложено всплывающее окно аутентификации.

Какое правило Nginx можно использовать для защиты всех файлов в этом каталоге, кроме этих двух? Можно ли выполнить отрицательное совпадение регулярного выражения в блоке местоположения? Я видел решения для Apache, использующие .htaccess, но ничего для Nginx. Другие похожие вопросы Вот, Вот, и Вот.

Любая помощь будет оценена по достоинству!

Как насчет этого:

location = /analytics/piwik.php {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param /var/www/piwik/piwik.php;
}

location = /analytics/piwik.js {
    try_files $uri;
}

В = Оператор означает, что эти правила имеют приоритет. Проблема с вашими текущими правилами в том, что location / правило является первым в порядке использования. С помощью = меняет это.