游客发表
小皮面板里点开网站,小皮浏览器直接甩回来一个403。面板页面白底黑字,打开冷冰冰一句“Forbidden”,网站误连个登录框都不给。报错这事儿我上周刚碰上一回,小皮客户急得直跺脚,面板说网站昨天还好好的打开,今天连首页都打不开。网站误
403跟404不一样。报错404是小皮文件没了,403是面板文件还在,但服务器不让你看。打开小皮面板本身不生产403,网站误它只是报错个传话的。真正卡住你的是背后的Nginx或者Apache,再往上追,可能是文件权限,也可能是目录索引没开,还可能是伪静态规则写岔了。
先看最蠢的情况:根目录下压根没有index文件。小皮默认站点目录是wwwroot/你的域名,里面如果只有一张图片或者一个压缩包,没有index.html、index.php,Nginx又没开autoindex,那它只能回403。我见过有人把源码解压到上一级目录,结果网站根目录空着,浏览器一访问当然吃闭门羹。
权限问题更常见。Linux下跑小皮,网站目录的属主得是www或者nginx,权限至少755。有人用root解压,文件全归root,Nginx以www身份去读,读不动,403。改法不复杂,SSH里一句chown -R www:www /www/wwwroot/你的域名,再chmod -R 755,多半能救回来。但别手贱给777,小皮后台会红字警告,而且真不安全。
伪静态规则写错也会触发403。比如ThinkPHP项目,Nginx里没配try_files,请求全打到目录上,Nginx一看是个文件夹又没索引,直接403。这时候去小皮面板的“网站-设置-伪静态”里选对框架,或者手动补一段location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; } },保存重载,页面就活了。
还有一种隐蔽的:Nginx的autoindex被关了,但你又想列目录。小皮默认是关的,因为开着容易暴露文件结构。如果你确实需要,去配置文件里找autoindex off;改成on;,重载Nginx。不过我得说一句,生产环境别开,谁开谁挨打。
Apache那边也类似。小皮可以切Apache,如果httpd.conf里Options没给Indexes,或者Require all denied没改成granted,一样403。我见过一个案例,客户从Nginx切到Apache,忘了改.htaccess里的Order deny,allow,结果整站403,折腾一下午。
排查顺序我习惯这样:先看小皮面板里网站根目录设对没有,再看目录下有没有默认首页文件,然后SSH进去ls -l看权限和属主,接着查Nginx/Apache错误日志——小皮面板里直接能看,路径一般是/www/wwwlogs/你的域名.error.log。日志里会写清楚是directory index of ... is forbidden还是permission denied,比瞎猜快得多。
最后提一嘴,小皮面板的“网站”页面有个“防跨站攻击”开关。这玩意儿开着的时候,PHP的open_basedir会被限制在网站目录内。如果你用了include或者require去引上级目录的文件,PHP层面可能报错,但有时候表现就是403。关掉它试试,能过就是它捣的鬼。不过关之前想清楚,安全性和方便性从来都是跷跷板。
403不是绝症,它只是服务器在说“我懂你意思,但我不干”。顺着权限、索引、规则三条线摸下去,十分钟内基本能定位。最怕的是不看日志乱改配置,改到最后连500都出来了,那才真叫一个头两个大。
友情链接