Рейтинг:1

NGINX auth_basic исключает GET-запрос к определенному php-скрипту

флаг cn

Я не могу понять, как исключить конкретное местоположение из auth_basic.

сервер {
        имя_сервера пример.com;

        корень /var/www/html;

        индекс index.php;

        auth_basic "Неин неин неин";
        auth_basic_user_file .htpasswd;

        место расположения / {
                try_files $uri $uri/ =404;
        }

        расположение ~ \.php$ {
                включить фрагменты/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }

        # этот скрипт требует свободного доступа и принимает параметры строки запроса
        расположение /sub/script.php {
                auth_basic выключен;
        }

        # это работает нормально
        расположение /sub/a-javascript.js {
                auth_basic выключен;
        }
...

Расположение /sub/script.php требует свободного доступа. Также было бы неплохо, если бы он мог разрешить только GET-запрос. Моя проблема, похоже, заключается в параметрах запроса, которые идут после него.

Скрипт всегда запрашивается со многими параметрами запроса script.php?param=something&other_param=somethingelse&etc=etc

Paul avatar
флаг cn
Я не понимаю, почему `location ~ /sub/script\.php$ { auth_basic off; включить фрагменты/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; limit_except GET { запретить все; } }`, но раньше я их не использовал.
флаг sv
Пол прав. Помните, что использование limit_except для разрешения GET также разрешает запросы HEAD.
флаг cn
@Пол все еще получает 401 балл
Paul avatar
флаг cn
В логах есть что-то еще? Дает ли установка `error_log debug;` что-нибудь еще?
Paul avatar
флаг cn
Также попробуйте переместить блок `location ~ /sub/script\.php$...` над блоком `location ~ \.php$...`, если вы еще этого не сделали.
флаг cn
@Paul Да, кажется, перемещение над блоком php помогло. Спасибо!
Рейтинг:1
флаг cn

Ваша текущая конфигурация соответствует запросам на /sub/скрипт\.php$ на следующем место расположения блокировать:

        расположение ~ \.php$ {
            включить фрагменты/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }

Используйте следующую конфигурацию, которая размещает /sub/скрипт\.php$ расположение над \.php$ место, потому что нгинкс прекратит оценку на первом совпавшем регулярном выражении место расположения.

сервер {
        имя_сервера пример.com;

        корень /var/www/html;

        индекс index.php;

        auth_basic "Неин неин неин";
        auth_basic_user_file .htpasswd;

        место расположения / {
                try_files $uri $uri/ =404;
        }

        расположение ~ /sub/script\.php$ {
                auth_basic выключен;
                включить фрагменты/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
                limit_except GET { запретить все; } # Также разрешает HEAD
                }

        расположение ~ \.php$ {
                включить фрагменты/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }

        # это работает нормально
        расположение /sub/a-javascript.js {
                auth_basic выключен;
        }
...

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.