Nginx запрещает не блокировать динамические URL - PullRequest
0 голосов
/ 15 февраля 2019

Я хочу заблокировать доступ к сайту промежуточного сервера для всех, кроме моего IP.Проблема в том, что одна из страниц имеет динамический URL, и по какой-то причине я все еще могу получить доступ к этой странице с помощью других IP-адресов.


location / {

    satisfy  any;
    # allow my ip
    allow  1.2.3.4;
    # drop rest of the world
    deny    all;

    auth_basic            "Authentication Required";
    auth_basic_user_file  /etc/nginx/passwd;

    index  index.php index.html index.htm;

    # remove .php extension
    try_files $uri $uri/ @rewrite;

    sendfile   off;

    rewrite ^/color/(.*)$ /color.php?url=$1&name=&submitBtn=check;
}

location @rewrite {
      rewrite ^ $uri.php last;
}

Приведенный выше код позволит моему IP-адресу получить доступ к любой странице сайта безпароль, но кому-либо еще будет предложено ввести пароль, прежде чем ему будет предоставлен доступ.

Это работает на всех страницах, кроме страницы с динамическим URL.На странице с динамическим URL-адресом пароль отображается при доступе к странице с разных IP-адресов, но страница все еще загружается, поэтому пароль бесполезен.

Я пытался присвоить динамическому URL-адресу свой собственный блок location, иэто работает при блокировке доступа всех IP-адресов (кроме моего IP-адреса) к динамической странице без предварительного ввода пароля, но при этом я получаю ошибку 404 при попытке доступа к динамической странице с моего IP-адреса.

location / {
    ...
}

location ~ ^/color/(.*)$ {
    satisfy  any;
    # allow my ip
    allow  1.2.3.4;
    # drop rest of the world
    deny    all;

    auth_basic            "Authentication Required";
    auth_basic_user_file  /etc/nginx/passwd;
}

РЕДАКТИРОВАТЬ: Я думаю, что перезаписанный URL-адрес является причиной проблемы, например rewrite ^/color/(.*)$ /color.php?url=$1&name=&submitBtn=check;, потому что я также могу перейти к mysite.com/color, и это также загружает для других IP-адресов, даже если отображается поле пароля браузера.

...