Я хочу ограничить промежуточный сервер базовой аутентификацией, за исключением одного специального места, которое не должно иметь базовой аутентификации, но должно быть ограничено блоком IP-адреса клиента.
Раздел моего виртуального хоста выглядит так:
DocumentRoot /var/www/vhosts/example/public
ServerName beta.example.com
<Directory /var/www/vhosts/example/public>
Options FollowSymLinks -MultiViews
AllowOverride all
Order allow,deny
Allow from all
</Directory>
<Location />
AuthUserFile /var/www/.htpasswd
AuthType Basic
AuthName "Secret"
Require valid-user
</Location>
<Location /payment/ipn>
# How can I disable basic auth here?
Order deny,allow
Deny from all
Allow from 216.113.191
</Location>
Таким образом, никто не должен иметь доступа к сайту, если не знает пароль. Но песочница PayPal (216.113.191.xxx) должна иметь доступ к http://beta.example.com/payment/ipn для отправки мгновенных уведомлений об оплате.
Я размещаю Rails 3 через Passenger на Apache2.
Похоже, ты хочешь Satisfy
.
Satisfy Any
По умолчанию установлено «Удовлетворительно все», тогда все методы аутентификации должны быть истинными. Помните, что подкаталог или подраздел наследует свойство от своего хозяина, и в ваших нуждах require должен быть любым. Если одно требование выполнено, другое не проверяется.
Если вы хотите более сложного поведения, вам следует использовать директивы и. Вы можете вкладывать эти директивы в сложные дела. Все это описано в официальных документах apache, пример здесь: http://httpd.apache.org/docs/current/mod/mod_authz_core.html