长期使用Nginx的后果就是,Apache都不会用了。
Nginx启用目录的HTTP验证非常简单:
auth_basic "DD-WRT-Wireless-Access";
auth_basic_user_file pass.txt;
甚至可以直接在Server配置节里面指定。
要关闭某个目录的验证 也很简单
location ~* /route\/? {
auth_basic off;
index index.html index.htm index.php;
}
Apache可以用Satisfy来实现(当然Nginx也支持satisfy)
Satisfy可以实现这样一个功能:当一个目录abc启用了密码保护,想单独开放它的一个子目录def,让这个子目录无须密码即可访问,或者对某些IP段落,比如192.168.2.0/24免密码访问,那么可以这样设置:
[text]
AllowOverride All
AuthName "Admin required"
AuthType Basic
AuthUserFile /path/to/pwd/file
require valid-user
Allow from all
Satisfy any
[/text]
这样就可以取消子目录的验证了
原理摘自此处
同时使用
Allow
和Require
时的访问策略。参数可以设置为All
或Any
。这个指令仅在某个特定区域的访问控制同时被用户名/密码和客户端主机地址进行限定的时候起作用。默认行为(All
)采取客户端首先通过地址访问限制并且输入有效的用户名和密码的方式。使用可选项Any
将使客户端在通过主机限制或是输入一个有效的用户名和密码两种方式之一得到访问权限。这样,就可以通过密码来限制一个区域的访问,但允许某些特定地址的客户端访问时不需要输入密码。比如,如果您想让您局域网内的用户访问您的web网站时不受限制,但局域网外的用户需提供密码才能进行访问,您可以采取类似如下的配置:
Require valid-user
Allow from 192.168.1
Satisfy Any
附上强制重新定向http到https的规则
Nginx:
#重定向所有http到https
if ( $scheme = 'http' ) {
rewrite ^(.*)$ https://$server_name$1 permanent;
}
$server_name换成$host是最好的啦
Apache:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
写成%{HTTPS} !on 也可以