网站403的解决办法

自己用lnmp一键安装包安装了php的环境。上传了网站代码,也申请了域名,网站也可以通过域名访问了。但是不懂是运气还是啥,服务器宕机了,服务器被人入侵了,账号密码都别人暴力破解了,服务器里啥都没有,还会遭遇这样的不幸。在腾讯云里看了一下木马文件好几百个,没有办法,只能把服务器恢复出厂设置,重新安装一键安装包。又是几个小时过去了,网站终于恢复了。可以睡个安稳觉了。。。。。。几天后,网站打不开了,说是access denied(拒接访问),看了一下具体的东西是原来是403了。没有办法,只能老老实实折腾

1、打开php.ini里error_log 和php-fpm的错误日志 重启php-fpm ,神奇的发现网站又可以了。可是几天后网站又挂了,一看还是403错误

2、打开php日志,发现说"什么没有权限访问,说地址不在open_dir里”,但是我open_dir都是关闭的。

3、top了一下,发现内存突然不行了,于是,立马 df -h 看了一下 ,发现/tmp/文件夹快满了,立即进去看了一下,sess_文件太多,就是session文件太多,还有很多其他的临时文件。于是立马百度了一把。

4、百度说yum安装 yum install tmpwatch  ,来定时的清理这些文件,但是发现sess_文件还是不会立马删掉,突然想到是自己代码问题。

5、马上在代码上给session加上过期时间,重构代码逻辑,如下

/**
 	 * Session-设置session值
 	 * 使用方法:$this->getUtil('session')->set('ccccccc', 'dddddd');
	 * @param  string $key    key值,可以为单个key值,也可以为数组
	 * @param  string $value  value值
	 * @param  int $expire  expire
 	 * @return string
	 */
	public function set($key, $value='', $expire = 1440) {
		if (!session_id()) $this->start();
        $session_data = array();
        if (!is_array($key)) {
            $session_data['expire'] = time()+$expire;
            $session_data['data'] = $value;
			$_SESSION[$key] = $session_data;
		} else {
			foreach ($key as $k => $v) {
                $session_data['expire'] = time()+$expire;
                $session_data['data'] = $v;
			    $_SESSION[$k] = $session_data;
            }
		}
		return true;
	}
	
	/**
 	 * Session-获取session值
 	 * 使用方法:$this->getUtil('session')->get('ccccccc');
	 * @param  string $key    key值
 	 * @return string   
	 */
	public function get($key) {
		if (!session_id()) $this->start();
		if ($_SESSION[$key]['expire']>time()) {
            return (isset($_SESSION[$key]['data'])) ? $_SESSION[$key]['data'] : NULL;
        } else {
		    $this->del($key);
        }

	}
	
	/**
 	 * Session-删除session值
 	 * 使用方法:$this->getUtil('session')->del('ccccccc');
	 * @param  string $key    key值
 	 * @return string   
	 */
	public function del($key) {
		if (!session_id()) $this->start();
		if (is_array($key)) {
			foreach ($key as $k){
				if (isset($_SESSION[$k])) unset($_SESSION[$k]);
			}
		} else {
			if (isset($_SESSION[$key])) unset($_SESSION[$key]);
		}
		return true;
	}
然后也写了一个定时任务来定期清理这些sess文件,ok,这样就解决了




### 解决 Nginx 返回 403 Forbidden 错误的最佳实践 当遇到 Nginx 返回 `403 Forbidden` 错误时,通常意味着客户端尝试访问的资源被服务器拒绝。以下是常见的原因以及相应的解决方案: #### 常见原因分析 1. **权限不足** 文件或目录的权限设置不当可能导致此错误。确保 Web 根目录及其子文件夹具有适当的读取和执行权限。 2. **GeoIP 过滤规则** 当使用 GeoIP 模块来限制特定地区的访问时,可能会触发 `403 Forbidden` 错误。例如,在配置中存在如下语句: ```nginx if ($geoip2_data_country_code = CN) { return 403; } ``` 此处会阻止来自中国的 IP 地址访问网站[^2]。 3. **恶意请求防护** 使用 `if` 指令可以增强安全性,但也需谨慎应用以免造成不必要的阻拦。过度依赖 `if` 可能会影响性能并引入复杂度[^3]。 4. **路径匹配问题** 不正确的 `location` 匹配模式也可能引发此类状况。应仔细校验 URL 路径定义是否准确无误。 #### 实践建议 - **检查文件权限** 对于 Linux 系统而言,默认情况下 Apache/Nginx 用户通常是 www-data 或 nobody 。因此要确认这些用户的读写权限已授予给目标站点所在的文件夹树结构下所有必要的静态资产(HTML/CSS/JS 图像等)。 - **调整 GeoIP 设置** 若因地理位置而产生的封锁并非预期行为,则应当重新评估地理围栏策略;或者对于合法访客提供例外通道,比如白名单机制。 - **优化条件判断逻辑** 尽量减少对 `if` 的运用频率,转而在更稳定可靠的上下文中实施业务规则控制,如利用 map 指令创建映射表来进行状态转换操作。 - **精确定义 Location Blocks** 准确指定 location blocks 中所涉及的具体 URI ,避免通配符滥用引起意外覆盖其他正常路由。 ```nginx server { listen 80; server_name example.com; root /var/www/html; index index.html; error_page 403 /custom_403.html; location ~* \.(jpg|jpeg|png|gif)$ { allow all; } location /admin/ { auth_basic "Restricted Area"; auth_basic_user_file htpasswd.users; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值