除IP外,我想阻止所有人访问我的登台服务器站点。 问题是其中一个页面具有动态URL,由于某种原因,我仍然可以使用其他IP访问该页面。
location / {
satisfy any;
# allow my ip
allow 1.2.3.4;
# drop rest of the world
deny all;
auth_basic "Authentication Required";
auth_basic_user_file /etc/nginx/passwd;
index index.php index.html index.htm;
# remove .php extension
try_files $uri $uri/ @rewrite;
sendfile off;
rewrite ^/color/(.*)$ /color.php?url=$1&name=&submitBtn=check;
}
location @rewrite {
rewrite ^ $uri.php last;
}
上面的代码将使我的IP无需密码即可访问站点上的任何页面,但在授予访问权限之前,将要求其他任何人输入密码。
这适用于除动态URL页面之外的所有页面。在动态URL页面上,从其他IP访问页面时会显示密码,但该页面仍会加载,因此该密码无用。
我尝试给动态URL提供自己的location
块,该块可以阻止所有IP(我的IP除外)访问动态页面而无需先提供密码,但是当我这样做时,我得到了尝试从我的IP地址访问动态页面时出现404
错误。
location / {
...
}
location ~ ^/color/(.*)$ {
satisfy any;
# allow my ip
allow 1.2.3.4;
# drop rest of the world
deny all;
auth_basic "Authentication Required";
auth_basic_user_file /etc/nginx/passwd;
}
编辑:我认为重写的URL是导致问题的原因,例如rewrite ^/color/(.*)$ /color.php?url=$1&name=&submitBtn=check;
,因为我也可以导航到mysite.com/color
,并且即使显示了浏览器密码字段,也可以加载其他IP。 / p>