[Website] WordPress使用https访问css加载不成功

最近重装了一下系统,迁移wordpress之后发现如果使用http访问一切正常,https访问的画节目混乱,疑似css没有加载成功。

解决方法参考https://wordpress.stackexchange.com/questions/75921/ssl-breaks-wordpress-css

在wp-config.php文件中

以此语句之前require_once(ABSPATH . 'wp-settings.php');

加入:

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') $_SERVER['HTTPS']='on';

[Linux]Linux 获取虚拟地址对应的物理地址(转载)

本文原文链接:https://zhoujianshi.github.io/articles/2017/Linux%20%E8%8E%B7%E5%8F%96%E8%99%9A%E6%8B%9F%E5%9C%B0%E5%9D%80%E5%AF%B9%E5%BA%94%E7%9A%84%E7%89%A9%E7%90%86%E5%9C%B0%E5%9D%80/index.html

 

现代操作系统中,进程是运行在虚拟地址空间上的。比如在32位机器上,进程可以认为自己有4GB的内存空间可以使用。但是真实被使用到的虚拟地址肯定得有真实的存储介质相对应。如果不考虑swap的话,每一个虚拟地址都对应一个物理地址。现代的硬件一般是以分页的方式管理内存的(x86的分段与分页相结合的所谓段页式也只是为了兼容罢了)。一个虚拟页映射到一个物理页。以常见的4KB的页大小为例,如果一个虚拟地址0xfe0000对应物理地址的0x40000,那么接下来的虚拟地址0xfe0000+i就对应物理地址的0x40000+i,i=0,1,2,…,4095。但是虚拟地址的0xfe1000可能对应着一个相去甚远的物理地址0x1c0000呢。也就是说,在虚拟地址中连续的地址,在物理上可能是碎片似的分散在内存条的各个地方,但是在一个页内,地址是连续地一一对应的。

鉴于此,要把一个虚拟地址转换成物理地址,其实就是要知道该虚拟地址所在的虚拟页对应的物理页。知道了物理页,再加上页内偏移量即可。以4KB的页大小为例,一个32位长的虚拟地址,其高20位就称为虚拟页号,低12位就是页内偏移。Linux为每一个进程都维护了一个页表,放在内存中。页表的每一项就是一个虚拟页号对应的物理页号。所以如果能够访问到页表,那么就能够把虚拟地址转换成物理地址。然而,只有在内核态才有权限访问页表,用户态是无权访问的。另外,不同的硬件结构下,页表的定位方式是不同的,而且可能很复杂,涉及多个寄存器。

一开始我没有找到能在用户态查询页表的方式。就当我快绝望的时候,万能的GitHub又帮我我一把。我在某个项目中发现了其访问/proc/<pid>/pagemap这个虚拟文件。后来我去查了这个虚拟文件,得到如下信息。

Documentation/vm/pagemap.txt

每一个页对应一个64位,也就是8字节的字段。比如虚拟地址0xfe0020,其高20位为0xfe0,也就是其虚拟页号为0xfe0。那么该虚拟页的信息处于/proc/self/pagemap这个文件中偏移量为0xfe0*8=32512的地方。从此处读取一个8字节的数据,先检查最高位’page present’,如果是1,那么说明该页处于物理内存中,那么该8字节的第0-54位就是物理页号。假设物理页号是0x40,那么实际的物理地址就是(0x40<<12)+0x20=0x40020。

介绍完原理,那么封装成一个函数就简单多了。我这里就封装一个最容易理解但是效率最低的实现方式:

#include <fcntl.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>

size_t virtual_to_physical(size_t addr)
{
    int fd = open("/proc/self/pagemap", O_RDONLY);
    if(fd < 0)
    {
        printf("open '/proc/self/pagemap' failed!\n");
        return 0;
    }
    size_t pagesize = getpagesize();
    size_t offset = (addr / pagesize) * sizeof(uint64_t);
    if(lseek(fd, offset, SEEK_SET) < 0)
    {
        printf("lseek() failed!\n");
        close(fd);
        return 0;
    }
    uint64_t info;
    if(read(fd, &info, sizeof(uint64_t)) != sizeof(uint64_t))
    {
        printf("read() failed!\n");
        close(fd);
        return 0;
    }
    if((info & (((uint64_t)1) << 63)) == 0)
    {
        printf("page is not present!\n");
        close(fd);
        return 0;
    }
    size_t frame = info & ((((uint64_t)1) << 55) - 1);
    size_t phy = frame * pagesize + addr % pagesize;
    close(fd);
    return phy;
}

最后需要说明的是,只有root权限的进程能够访问/proc/<pid>/pagemap这个文件,否则读出来的都是0。

 

[WEBSITE]有一个主机升级到ubuntu1804之后php显示源码

手里有一个测试的vps,使用ubuntu1604,平常基本不用,却也挂了个wordpress在上面。昨天手动升级到了1804,发现wordpress打不开了,只显示php源码。

搜了一大顿,找了一个最没有技术含量,却可能最有用的一个方案——重装php!

卸载命令如下:

sudo apt-get autoremove php7*

之后使用最开始的整套lamp-server进行安装,命令如下

sudo apt-get install lamp-server^

之后无需重启,php正常解析。

[VPS]青岛移动/青岛联通 VPS测速

这两天测了一下青岛移动、青岛联通网络下几个VPS的速度情况(移动联通出口带宽可能不一样)。

下表可以看出,无论移动还是联通,VultrBWG USCA2, BWGdc2, BWGdc8表现都比较稳定。(之前测试最稳定的是VultrBWG USCA2

所以,联通用户可以考虑CN2网络,而移动用户使用BWG正常网络即可,或者使用vultr

移动 下载 上传 ping 抖动
VultrSeattle 28.61Mbps 17.36Mbps  202.00ms 1.67ms
BWG[USCA_2] 31.28Mbps 14.61Mbps  178.00ms 2.61ms
dc2 6.37Mbps 15.79Mbps  211.60ms 7.39ms
dc3 5.54Mbps 0.38Mbps  204.94ms 6.70ms
dc8 9.64Mbps 9.24Mbps  199.00ms 5.58ms
联通
DC2 7.81Mbps 7.23Mbps 158.51ms 0.23ms
DC3 7.55Mbps 8.25Mbps 170.92ms 2.76ms
DC8 7.47Mbps 7.86Mbps 172.21ms 0.38ms
VultrSeattle 7.12Mbps 3.66Mbps 172.60ms 0.41ms
BWG[USCA_2] 7.97Mbps 7.71Mbps 178.10ms 0.58ms

移动                      下载             上传          ping           抖动
VultrSeattle 28.61Mbps 17.36Mbps 202.00ms 1.67ms
BWG[USCA_2] 31.28Mbps 14.61Mbps 178.00ms 2.61ms
dc2 6.37Mbps 15.79Mbps 211.60ms 7.39ms
dc3 5.54Mbps 0.38Mbps 204.94ms 6.70ms
dc8 9.64Mbps 9.24Mbps 199.00ms 5.58ms
联通
DC2 7.81Mbps 7.23Mbps 158.51ms 0.23ms
DC3 7.55Mbps 8.25Mbps 170.92ms 2.76ms
DC8 7.47Mbps 7.86Mbps 172.21ms 0.38ms
VultrSeattle 7.12Mbps 3.66Mbps 172.60ms 0.41ms
BWG[USCA_2] 7.97Mbps 7.71Mbps 178.10ms 0.58ms

[VSP]你是否需要一个vps

如何判断你是否需要一个VPS(Virtual private server,虚拟私人服务器,也叫云服务器)?

通俗来说,vps可以理解为一台常年开机的电脑,但是你没有能直接连接到这台电脑的键盘,鼠标跟显示器,但是你可以通过网线跟这个电脑连起来。因此,如果你想要控制你的vps,就需要另一台电脑(或者手机)。

VPS可以干什么:

如果你是计算机相关专业学生或者初学者,你可以在VPS上练习各种编程实验,不用担心自己电脑配置问题。你的电脑只需要装一个ssh客户端即可(PUTTY)。

如果你是下载狂人,你可以利用VPS进行24小时不间断下载,不用担心电费问题,之后通过FTP下载到本地。

如果你想搭建自己的网站(大部分vps用法),vps是最便宜高效的方式。

如果开发微信小程序或者苹果应用,你需要有一个自己的网站才可以被审核。

如果你想伪装你的IP,可以在VPS中安装代理的方式来完成。

 

以上几条基本覆盖了90%以上需要VPS的需求,但是其实VPS能实现的还有很多。如果你满足上述几条中的一条或者几条,那你可以考虑试用一下。

[IT Tech]最近网站迁移折腾流水

最开始架设这个站点的时候,用的是腾讯的云服务器。可就在前几天,通过域名访问被腾讯阻止了(IP直接访问正常),弹出需要备案的信息。

当时就是因为域名购买需要备案而没有从腾讯直接买这个域名,而是从godaddy以更高的价格买入。
后来看了一下备案要求,地址竟然要精确到门牌号! 还是乖乖迁到国外服务器吧。
最开始试用的是Digital Ocean的VPS,新加坡机房ping值有点高,但是ss的速度很快,本地网络条件好的情况下youtube 1080P不会卡顿。但是wordpress迁入之后由于ping值高,网络浏览速度很慢。
之后开始折腾vultr家的VPS(现在活动特定地址注册送$25,但是需要绑定双币信用卡或paypal), 从硅谷,西雅图,日本,新加波一个一个试,最终发现ping值有差别,但是速度差不了多少。
对于青岛联通来说,日本大约110ms,新加波130ms,硅谷170ms,西雅图220ms。测试发现,美国服务器丢包率最低,极少出现。日本,新加坡都有一定程度丢包,但是可以接受。日本服务器ss youtube 1080p也基本可以播放。暂时把站点先放在日本服务器上吧。后续迁移可以直接使用wordpress的插件Duplicator来完成。(注意wordpress最好在/var/www/html有单独目录,往新的服务器迁移时要选择创建新的数据库。)
Bandwangon据说有国内专线,暂时还没用。

[云服务器]亿速美国香港云服务器优惠信息

国内的yisu也提供境外云服务器服务,包括香港和美国服务器。我之前也用29块钱使用了一个月美国服务器,总体来说性价比还不错。5M带宽可以保证youtube 1080P下流畅播放。当然也可以用249人民币的价格购买一年。总体来说,在国内来看,这个价格已经很优惠了。

一般来说,香港服务器的价格比美国要高,相同的价格配置要低一些。因此还是建议购买美国地区。

香港服务器:https://www.yisu.com/cloud/selfconf/?id=hk

美国服务器:https://www.yisu.com/cloud/selfconf/?id=usa