Вопрос

Я настроил аутентификацию htpasswd на своем действующем сайте, и она отлично работает, но я не хочу, чтобы меня спрашивали пароль, когда я работаю в среде разработки.

В моем файле httpd.conf у меня есть:

SetEnv APP_ENV "development"

В моем .htaccess файл у меня есть:

AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/file/.htpasswd
AuthGroupFile /dev/null
require valid-user

Мне было интересно, можно ли как-нибудь поставить условие вокруг htppasswd, чтобы при APP_ENV является development что мне не запрашивают пароль.

Это возможно?

Это было полезно?

Решение

Если у вас есть такая возможность, вам следует подумать об обновлении до Апач 2.4 (или последняя бета-версия 2.3, поскольку версия 2.4 еще не выпущена).

Одна из новых доступных функций: Контейнеры авторизации - значительно упрощает определение требований к доступу с помощью Требовать директива.

В итоге у вас должно получиться что-то вроде:

AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/file/.htpasswd
AuthGroupFile /path/to/file/groups

SetEnv APP_ENV "development"

<RequireAll>
  <RequireAny>
    <RequireAll>
      #main requirements
      Require group user
      #other conditions if needed for non-dev/non-local
    </RequireAll>

    <RequireAll>
      #allow direct if development
      Require env APP_ENV development
    </RequireAll>

    <RequireAll>
      <RequireAny>
        #allow loopback and local network
        Require ip 127.0.0.1
        Require ip 10.2
      </RequireAny>
    </RequireAll>
  <RequireAny>

  #other conditions if needed for everyone

  <RequireNone>
    #blacklist
  </RequireNone>
</RequireAll>

Другие советы

Один из способов создания условных блоков if с переменными env — использование mod_macro модуль.Я уже приводил пример здесь.

В этом конкретном случае у вас будет поверх файла VirtualHost (до определения VirtualHost):

<Macro ConditionalBlockMacroSecurity_production>
    AuthName "Restricted Area"
    AuthType Basic
    AuthUserFile /path/to/file/.htpasswd
    AuthGroupFile /dev/null
    require valid-user
</Macro>
<Macro ConditionalBlockMacroSecurity_development >
    <IfModule mod_headers.c>
       Header set MyHeader "Hello this is DEVELOPMENT envirronment. It took %D microseconds for Apache to serve this request."
    </IfModule>
</Macro>

И внутри Virtualhost:

Use ConditionalBlockMacroSecurity_${APP_ENV}

где путь к файлу htpassword также может быть установлен как параметр макроса.

Недостатком этого решения является то, что вам необходимо установить mod_macro на производственный сервер, это не часто устанавливаемый модуль, и для этого вам понадобится некоторый контроль над рабочей средой.С другой стороны, простое решение — иметь несколько версий ваших виртуальных хостов в зависимости от среды и добавить несколько комментариев в раздел Auth.Но если вы ищете общее решение, это, безусловно, означает, что это повторяющаяся проблема, и вы хотите избежать ручного редактирования файлов. В таких случаях mod_macro может стать очень профессиональным способом использования вашего опыта работы с Apache, пока ваши конфигурации Apache не станут одним макросом. с параметрами, вызывая множество других макросов.

Условные выражения в конфигурации Apache работают только один раз, когда конфигурация [пере]загружается.

Я бы создал второй VirtualHost с тем же корневым каталогом и управлял доступом с помощью Deny/Allow на основе IP-адреса.

Добавьте следующее:

Require valid-user
Allow from <dev IP>
Satisfy Any

Это потребует, чтобы Require valid-user или Allow from <dev IP> применяется.

В вашей .htaccess файл, вы можете вложить блоки в директиву IfDefine, например:

<IfDefine PROD>
  bla bla bla
</IfDefine>

Тогда обязательно пройдите -D PROD в качестве аргумента при запуске Apache.Этот раздел будет работать только в том случае, если определен PROD.В Ubuntu вы можете сделать это, например, отредактировав /etc/apache2/envvars и добавив эту строку в конце:

export APACHE_ARGUMENTS="-D PROD"

Вы можете «инвертировать» его, возможно, используя что-то вроде <IfDefine !DEV> запускать только тогда, когда это не среда разработки, а затем передавать -D DEV в этой среде и оставлять рабочие сайты как есть без необходимости редактировать envvars.

Измените соответствующим образом в соответствии с вашими потребностями!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top