Apache-2.4
HTTP Basic Auth 除非從辦公室使用 Apache 2.4 連接?
我們希望建立一個僅用於展示目的的網站,我們可以:
- 通過 HTTP Basic Auth 輸入使用者名和密碼,從 Internet 的任何地方訪問。
- 為了便於使用,我們希望不必從辦公室通過 HTTP Basic Auth,我們的辦公室將從 202.161.24.210 連接。
- 展示站點的某些部分需要向自身發出 REST 請求,因此我們也希望將 127.0.0.1 和 ::1 列入白名單。
我們似乎已經實現了 2 和 3,但 1 並沒有像我們想像的那樣工作,我們的使用者不斷收到 HTTP Basic Auth 使用者名和密碼的提示,即使他們已經過身份驗證並且要訪問不同的頁面網站。我們從日誌中註意到,他們在訪問某些資產時收到以下錯誤消息:
[Tue Jun 09 10:50:03.442834 2015] [access_compat:error] [pid 5740:tid 140705259312896] [client 78.52.242.163:62774] AH01797: client denied by server configuration: /var/www/docroots/stage/lib/yui/build/moodle-core-checknet/assets/checknet.txt, referer: http://stage.example.org/mod/scorm/player.php
這是我們的 Apache 虛擬主機:
<VirtualHost *:80> ServerName stage.example.org DocumentRoot /var/www/docroots/stage <Directory /var/www/docroots/stage> Options Indexes FollowSymLinks MultiViews AllowOverride None # Only visible on Office network or anyone with a valid password. AuthType Basic AuthName "Authorisation Required" AuthUserFile "/var/www/htpasswd" Require valid-user Order allow,deny Allow from 202.161.24.210 127 ::1 Satisfy any </Directory> </VirtualHost>
我們在 CentOS 7 上執行 Apache 2.4.6。我們的配置是否正確?看起來我們的配置確實適用於頂級文件
/var/www/docroots/stage
以及直接位於其下的子目錄下的其他圖像、css 和 javascript 文件,但它是否會在一定數量的子目錄後忘記 HTTP Auth?SELinux 處於許可模式。
如果沒有完整的錯誤消息(我希望是模組和 IP 地址),這有點猜測,但您正在混合來自 Apache 2.4 中兩個不同模組的
Require
指令,來自 mod-authz-core 的指令和“舊版”指令Allow
並且Order
來自 mod-access-compat,它可能不會很好地堆疊。您可以嘗試更換線路
Order allow,deny Allow from 202.161.24.210 127 ::1
與以下
Require ip 202.161.24.210 127 ::1/128
已經存在**
Satisfy any
**的應該滿足您的要求。您的第三個要求:
展示站點的某些部分需要向自身發出 REST 請求…
如您所料,可能不會從環回地址訪問伺服器,但可能配置了與伺服器的公共 IP 地址類似的 FQDN,
http://api.example.com/rest?
並且源自伺服器的公共 IP 地址。您可以添加伺服器的公共 IP 地址,但這更容易從 Apache 2.4 解決;如果以下任一條件為真,則本地提供者允許訪問伺服器:
- 客戶端地址匹配 127.0.0.0/8
- 客戶地址是::1
- 連接的客戶端和伺服器地址都相同
因此,不要列出環回 ip-addresses,而是使用:
Require valid-user # Office Gateway: Require ip 202.161.24.210 # API access from this host: Require local # Only one or more of the above needs to match: Satisfy any