关于Emlog开启CDN的问题

    

之前也提到过CDN,用来做网站加速,最近我也去研究了一下。用的是七牛云CDN,但是中间出现了很多问题,这边给大家分享一下,以免中坑。

    首先,第一点:
            开启后网站打不开,显示无网络,ping了一下发现还是旧的IP地址,基本确认DNS切换还没有生效,导致本地网络访问出错,最好是断开一下网络并重新打开浏览器访问。
    第二点:
            开启CDN后网站内容不刷新(评论不刷新),这个首先排除是程序本身的缓存,那就要去检查CDN的缓存路径是否包含了我们的文章页面,如果说包含了,则会按照我们所配置的缓存方案来将资源放入到CDN服务器上进行存储,而用户访问我们网站时就会发现CDN上已经有了他需要的页面资源,就不会向我们源服务器进行请求,这样一来,用户始终拿到的都是之前的内容(或者说过期内容)。当然,这一点有好有坏,在高并发的访问下,我们可以酌情去配置相应的缓存规则来达到一个真正加速的目的。
    第三点:
            开启后网站速度明显降低,在我们第一印象中,CDN就是网站加速,无论什么情况下使用都应该 起到一个加速作用。这点楼楼想说的是,不绝对!事实证明在动态文件访问的时候,开启CDN会在一定程度上影响网站的访问速度。这是为什么呢?首先,CDN相当于一个中介,用户想访问我们的网站需要去接触CDN,如果CDN上有缓存好的文件则拿CDN的,没有则由CDN负责将该次请求转交给服务器。而Emlog的话是PHP动态语言,它的页面都是动态生成的,这个时候我们去开启CDN,并且缓存配置不恰当,CDN上没有我们所需要的缓存文件,则会拖慢用户的访问速度,相当于平白无故的多了一次请求来访问CDN服务器及源服务器。

    第四点:
            开启后网站无法获取访客用户的真实IP信息而是显示CDN的节点IP信息,这一点在Emlog早期版本就已经存在,但是一直到现在官方都没有修复,这边也是在网上查阅了一下资料,最终得到了一个解决方案(更改原程序的PHP文件)
a.jpg
        我们找到Emlog程序的根目录  修改/include/lib/function.base.php文件

        源文件代码:        

/**
* 获取用户ip地址
*/
function getIp() {
$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
if (!ip2long($ip)) {
$ip = '';
}
return $ip;
}

        修改为:             

/**
* 获取用户ip地址
*/
function getIp() {
$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$list = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$ip = $list[0];
}
if (!ip2long($ip)) {
$ip = '';
}
return $ip;
}
                
        最后总结一下:
                如果说网站内容大部分是动态生成的,那么使用CDN需要谨慎,楼楼建议大家有空可以去看看CDN的缓存机制,根据网站的实际情况来配置。
作者:徐先森 文章名: 《关于Emlog开启CDN的问题》
收录情况: 百度已收录
版权说明:若无特别注明,本文皆为 "徐博客”原创,转载请保留出处!

相关推荐

网友评论(已关闭)