Nginx: Как исключить URL с параметром запроса из htpasswd авторизации

Сайт Wordpress имеет его/wp-login.php защищенный с авторизацией HTTP с помощью htpasswd. Веб-сервером является Nginx. Конфигурация для того же дана ниже.

URL, связанный с плагином, использует wp-login.php? параметры запроса для управления внутренними пользователями. Пример URL:
http://beta.timepass.com/wp-login.php?action=wordpress_social_authenticate&mode=login&provider=Facebook

Я должен позволить только те URL, которые соответствуют параметру запроса action=wordpress_social_authenticate обойти htpasswd. Я попробовал несколько вещей, но получение нигде! Nginx не берет auth_basic "off" в его если-условии.

Nginx конфигурируются для ссылки:

server {
  listen 80;
  server_name beta.timepass.com;
  root /var/www/projects/beta.timepass.com;
  index index.php index.html index.htm;
  autoindex off;
  access_log /var/log/nginx/beta.timepass.com-access.log;
  error_log /var/log/nginx/beta.timepass.com-error.log;


  try_files $uri $uri/ /index.php?$args;


## Disallow direct access to wp-login.php
    location ~* ^/wp-login.php {
        #satisfy any;
        #allow 192.168.1.0/24;
        allow 192.168.1.157;
        auth_basic "Site Needs You to Authenticate";
        auth_basic_user_file /etc/nginx/htpass-beta ;

        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  location ~ \.php$ {
    expires off; ## Do not cache dynamic content
    #add_header Pragma public;
    #add_header Cache-Control "public, max-age=300";

    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /var/www/projects/beta.timepass.com$fastcgi_script_name;
    fastcgi_read_timeout 60s;
  }

}
1
задан 20 March 2015 в 15:54
1 ответ

Для этого следует использовать карту , поскольку директива auth_basic разрешает использование переменных.

Например:

map $arg_action $auth {
     default "Site Needs You to Authenticate";
     "wordpress_social_authenticate" "off";
}


server {

    [...]

    location ~* ^/wp-login.php {

        auth_basic $auth;
        auth_basic_user_file /etc/nginx/htpass-beta ;

        [ ...]

    }

}
2
ответ дан 3 December 2019 в 20:57

Теги

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