Надеюсь, это правильное место, чтобы спросить. У меня установлен 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 /
правило является первым в порядке использования. С помощью =
меняет это.