Openstack Keystone安装(一)

上一篇中我们完成了Openstack基本环境的安装。

在本篇中我们将安装并配置Openstack的公用核心组件Keystone。

Keystone的功能是为Openstack各个服务提供一个统一的用户身份认证模块,并提供统一的RESTful API供调用。

当然,我们主要安装的目标Swift也是依赖这一模块进行身份认证的。

安装并配置Keystone

Keystone只需要安装在Controller上即可。

配置数据库

我们首先来配置一下mysql。

mysql -u root -p登录mysql,然后运行下面的SQL语句

CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO \'keystone\'@\'localhost\' IDENTIFIED BY \'2308020d\';
GRANT ALL PRIVILEGES ON keystone.* TO \'keystone\'@\'%\' IDENTIFIED BY \'2308020d\';

然后退出登录。上面的2308020d是我随机生成的一段密码。

在继续下面的步骤之前,我们需要随机的生成一段Token。

$ openssl rand -hex 10
49f9e01220a3a7f0c41e

安装并配置组件

如果没有特殊说明,下面的bash操作一般是使用root用户。

为了防止服务自启抢占端口导致下面安装失败,我们先写keystone的override文件。

echo \"manual\" > /etc/init/keystone.override

1) 安装主要程序包

apt-get install keystone apache2 libapache2-mod-wsgi memcached python-memcache

执行这个命令即可。

2) 配置keystone

编辑文件 /etc/keystone/keystone.conf

首先修改[DEFAULT]中的admin_token值,修改为上面我们随机生成的内容。

[DEFAULT]
...
admin_token = 49f9e01220a3a7f0c41e

然后找到[database]一段,进行数据库设置。

[database]
...
connection = mysql+pymysql://keystone:[email protected]/keystone

按照下面的文件内容继续修改文件:

[memcache]
...
servers = localhost:11211
...
[token]
...
provider = uuid
driver = memcache
...
[revoke]
...
driver = sql

(可选)如果希望看到更多的日志信息,可以把[DEFAULT]中的verbose打开

[DEFAULT]
...
verbose = True

4) 用下面的方式重建数据库

su -s /bin/sh -c \"keystone-manage db_sync\" keystone

配置 Apache HTTP Server

由于Keystone基础认证服务是用过HTTP Server承载的,我们需要配置Apache使得用户可以通过HTTP访问Keystone服务。

在上面安装组件的过程中,已经安装上了Apache Server,所以我们直接进入配置阶段。

1) 编辑文件 /etc/apache2/apache2.conf 配置其中的 ServerName

ServerName controller

2) 用下面的内容建立文件 /etc/apache2/sites-available/wsgi-keystone.conf

Listen 5000
Listen 35357

<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    <IfVersion >= 2.4>
    ErrorLogFormat \"%{cu}t %M\"
    </IfVersion>
    ErrorLog /var/log/apache2/keystone.log
    CustomLog /var/log/apache2/keystone_access.log combined

    <Directory /usr/bin>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
    </Directory>
</VirtualHost>

<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    <IfVersion >= 2.4>
    ErrorLogFormat \"%{cu}t %M\"
    </IfVersion>
    ErrorLog /var/log/apache2/keystone.log
    CustomLog /var/log/apache2/keystone_access.log combined

    <Directory /usr/bin>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
    </Directory>
</VirtualHost>

3) 然后将上面的文件链接至启用目录中

ln -s /etc/apache2/sites-available/wsgi-keystone.conf /etc/apache2/sites-enabled

完成安装

最后,重启Apache服务器完成安装。

service apache2 restart

最后的最后,删除安装keystone过程中默认使用的sqlite数据库。由于我们已经用mysql替换它了,所以这个文件就没有意义了。

rm -f /var/lib/keystone/keystone.db

至此,我们已经成功的把Keystone安装在了Controller上。

接下来的内容在:Openstack Keystone安装(二)

Openstack 基础安装配置

之前文章中讲了开发版的Swift如何安装。但是如果是投入生产环境,就不能像开发版那样玩。

尤其是生产环境中的Openstack通常是多机运行,和单机版很不一样的。

接下来我会在Ubuntu 14.04上安装Ubuntu apt源中的生产版的Openstack Swift Liberty。

为什么标题没有叫“Openstack Swift安装指南”这样的名字呢?因为我这里介绍的内容,也是符合Openstack的一般安装配置方式的。

硬件配置

我用的测试环境是两台VMWare虚拟机,安装Ubuntu 14.04系统。

每台计算机安装两块网卡,一块网卡通过NAT连接外网,成为Public Network。另一块网卡仅限这两台计算机互通,称为Management Network。

其中一台计算机命名为Controller,另一台命名为Storage。

在一套Openstack Swift环境中,可以有一个Controller和多个Storage(在这里为了简化我就只用一个了)。

两台计算机分别安装好Ubuntu 14.04系统,并配置好安装源,执行sudo apt-get update

环境配置

为了生成密码的安全,在下面的配置过程中,如果需要生成随机字符串或者密码,我们一般用下面的命令产生

openssl rand -hex 10

其中那个10是生成的数据字节数。

1) 网络配置

给两台计算机的Management Network配置静态IP。

这里我们给Controller设置10.20.0.2/24

Storage设置成10.20.0.3/24

确保它们可以通过Management网络互访。

Public网络通过DHCP自动分配即可,当然要确保能连上Internet,因为我们还需要通过Internet下载安装包呢。

2) NTP

由于是多机环境,保证时间同步是重要的,因此我们需要安装一个时间同步服务。这里我们采用Openstack官方推荐的 Chrony。

分别在每台计算机上运行

sudo apt-get install chrony

来安装。

接下来分别配置。

Controller

在Controller上编辑/etc/chrony/chrony.conf。在其中加入可信的NTP服务器地址。

server 0.cn.pool.ntp.org iburst
server 1.cn.pool.ntp.org iburst
server 2.cn.pool.ntp.org iburst
server 3.cn.pool.ntp.org iburst

然后重启Chrony服务

service chrony restart

Storage

同样编辑/etc/chrony/chrony.conf,不过这一次地址指向Controller,并注释掉其中所有其他内容。

server 10.20.0.2 iburst

同样保存后重启Chrony服务。

检查NTP服务状态

使用下面的命令

chronyc sources

看下面列出的服务器地址,如果左边是 * 代表正在使用。

3) 添加Openstack相关包安装源

在每台计算机上执行:

apt-get install software-properties-common
add-apt-repository cloud-archive:liberty

之后更新安装源:

apt-get update && apt-get dist-upgrade

安装Openstack客户端:

apt-get install python-openstackclient

注意以上所提到的内容,在安装每个结点时都必须进行一遍。否则后面安装Openstack组件的时候可能会出错。

4) 安装SQL数据库

这个只需要在Controller上安装

执行:

apt-get install mariadb-server python-pymysql

/etc/mysql/conf.d/ 下创建一个名为 mysqld_openstack.cnf 的文件,然后填入下面内容:

[mysqld]中的bind-address的值应为Controller的Management IP。

1
2
3
4
5
6
7
[mysqld]
bind-address = 10.20.0.2
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = \'SET NAMES utf8\'
character-set-server = utf8

接下来重启mysql服务:

service mysql restart

然后运行 mysql_secure_installation 进行安全配置,完成安装。


到这里我们已经配置好了基本的安装环境。

接下来的内容在:Openstack Keystone安装(一)

Swift All In One(SAIO,Swift单机版)部署文档(二)

上一篇内容请见这里


之前我们完成了基本环境的安装,Swift本身的安装以及一些依赖组件的配置。

配置节点(Node)

我们这里采用直接将默认的saio配置覆盖到/etc/swift的方式。

1) (可选)删除 /etc/swift 目录

sudo rm -rf /etc/swift

2) 现在我们重建/etc/swift的配置

cd $HOME/swift/doc
sudo cp -r saio/swift /etc/swift
cd -
sudo chown -R ${USER}:${USER} /etc/swift

3) 修改所有的*.conf文件中的<your-user-name>为当前用户名

find /etc/swift/ -name \\*.conf | xargs sudo sed -i \"s/<your-user-name>/${USER}/\"

创建Swift运行脚本

1) 我们还是复制一下saio里的样例脚本

mkdir -p $HOME/bin
cd $HOME/swift/doc
cp saio/bin/* $HOME/bin
cd -
chmod +x $HOME/bin/*

2) 编辑$HOME/bin/resetswift脚本

因为我们使用回环设备,所以我们这里需要设置一个环境变量

echo \"export SAIO_BLOCK_DEVICE=/srv/swift-disk\" >> $HOME/.bashrc

上面有一个可选的rsyslog日志,如果没有设置,需要把这个脚本里的find /var/log/swift...一行删去。

sed -i \"/find \\/var\\/log\\/swift/d\" $HOME/bin/resetswift

3) 接下来我们复制一些样例配置来运行测试

cp $HOME/swift/test/sample.conf /etc/swift/test.conf
echo \"export SWIFT_TEST_CONFIG_FILE=/etc/swift/test.conf\" >> $HOME/.bashrc

4) 注意我们需要把$HOME/bin目录加入PATH变量

echo \"export PATH=${PATH}:$HOME/bin\" >> $HOME/.bashrc
. $HOME/.bashrc

5) 创建rings

remakerings

6) 运行单元测试

$HOME/swift/.unittests

注意,运行单元测试并不需要任何swift的服务启动。

7) 开始运行swift服务

startmain

这个startmain脚本实际上做的任务是:

swift-init main start

使用curl工具进行测试

1) 首先用测试用户登录,获得 X-Storage-UrlX-Auth-Token

curl -v -H \'X-Storage-User: test:tester\' -H \'X-Storage-Pass: testing\' http://127.0.0.1:8080/auth/v1.0

2) 检查账户

curl -v -H \'X-Auth-Token: <token-from-x-auth-token-above>\' <url-from-x-storage-url-above>

注意根据上一步的返回值替换这里的内容。

3) 检查swift命令

swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing stat

4) 运行功能测试

$HOME/swift/.functests
$HOME/swift/.probetests

至此Swift All In One的安装及测试就完毕了。

此时应该可以直接使用Swift的各种API进行操作,建立容器以及创建对象了。


参考资料:

http://docs.openstack.org/developer/swift/development_saio.html

Swift All In One(SAIO,Swift单机版)部署文档(一)

接下来我将介绍基于Swift的开发。

这里的Swift指的是Openstack的一个对象存储模块,可以完成对容器和对象的存储和维护等功能。

以下几篇Openstack有关的内容,都将使用Openstack Liberty版本来介绍。


对于开发来说,首先需要部署Swift。SAIO即为将Swift的所有的组件安装在一台设备上的方式来部署。

这种部署方式可以方便Swift开发。

这篇文档是SAIO安装的第一部分。

基本环境安装和配置

安装Ubuntu 14.04操作系统。

由于我们身处国内,所以需要换下Ubuntu的安装源。更换成国内镜像。

安装需要的组件

sudo apt-get update
sudo apt-get install curl gcc memcached rsync sqlite3 xfsprogs \\
                    git-core libffi-dev python-setuptools \\
                    liberasurecode-dev
sudo apt-get install python-coverage python-dev python-nose \\
                    python-xattr python-eventlet \\
                    python-greenlet python-pastedeploy \\
                    python-netifaces python-pip python-dnspython \\
                    python-mock
                    

部署存储设备

这一步主要目的是给连接在存储服务器的存储设备建立挂载点。

因为我们是虚机模拟环境下的All-in-One安装,所以我们使用回环设备(loopback device)。

1) 建立回环设备

sudo mkdir /srv
sudo truncate -s 1GB /srv/swift-disk
sudo mkfs.xfs /srv/swift-disk

这里面的truncate命令是用来调整分区大小的。

2) 接下来编辑 /etc/fstab 文件,添加下面内容:

/srv/swift-disk /mnt/sdb1 xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0

修改这个文件的目的是在系统启动时能够自动挂载分区。

3) 建立挂载点并添加链接

sudo mkdir /mnt/sdb1
sudo mount /mnt/sdb1
sudo mkdir /mnt/sdb1/1 /mnt/sdb1/2 /mnt/sdb1/3 /mnt/sdb1/4
sudo chown ${USER}:${USER} /mnt/sdb1/*
for x in {1..4}; do sudo ln -s /mnt/sdb1/$x /srv/$x; done
sudo mkdir -p /srv/1/node/sdb1 /srv/1/node/sdb5 \\
            /srv/2/node/sdb2 /srv/2/node/sdb6 \\
            /srv/3/node/sdb3 /srv/3/node/sdb7 \\
            /srv/4/node/sdb4 /srv/4/node/sdb8 \\
            /var/run/swift
sudo chown -R ${USER}:${USER} /var/run/swift
# **Make sure to include the trailing slash after /srv/$x/**
for x in {1..4}; do sudo chown -R ${USER}:${USER} /srv/$x/; done

添加启动设备

将下面的内容添加到 /etc/rc.local

(使用自己的用户名替代下面的 sysadm )

mkdir -p /var/cache/swift /var/cache/swift2 /var/cache/swift3 /var/cache/swift4
chown sysadm:sysadm /var/cache/swift*
mkdir -p /var/run/swift
chown sysadm:sysadm /var/run/swift

正式部署

获取代码

1) 从git版本库中检出python-swiftclient代码

cd $HOME
git clone https://github.com/openstack/python-swiftclient.git

2) 以develop模式安装python-swiftclient

cd $HOME/python-swiftclient
sudo pip install -r requirements.txt
sudo python setup.py develop
cd -

3) 同样的步骤,这次检出swift代码

cd $HOME
git clone https://github.com/openstack/swift.git

4) 同样安装develop模式下的swift

cd $HOME/swift
sudo pip install -r requirements.txt
sudo python setup.py develop
cd -

我在安装这一步的时候出了问题,手工编辑了·requirements.txt文件,删掉了;python-version`部分才得以成功。

5) 安装swift测试用依赖

cd $HOME/swift; sudo pip install -r test-requirements.txt

设置rsync

1) 首先建立 /etc/rsyncd.conf

复制样例文件到/etc目录下。然后修改其中的<your-user-name>为当前用户名。

sudo cp $HOME/swift/doc/saio/rsyncd.conf /etc/
sudo sed -i \"s/<your-user-name>/${USER}/\" /etc/rsyncd.conf

2) 启用rsync

编辑/etc/default/rsync。找到下面一行,将值修改为true

RSYNC_ENABLE=true

3) 关闭SELinux(如果没有SELinux就跳过这一步)

使用下面的命令:

sudo setenforce Permissive

或者是仍然开启SELinux,仅是给rsync完全访问权限。

sudo setsebool -P rsync_full_access 1

4) 启动rsync服务

sudo service rsync restart

5) 上面几步完成后,你可以通过运行下面的命令来检查rsync有没有正常工作

rsync rsync://pub@localhost/

启用memcached

我们上面用apt-get安装了memcached,启用方式和同类服务类似:

sudo service memcached start
sudo chkconfig memcached on

(可选)设置独立日志

虽然这个被官方标为“可选”,换句话说就是可以不用配置,不过日志在开发调试中起到的作用是很大的。这个独立日志功能还是推荐启用。

1) 将示例配置文件复制到rsyslog的配置目录中

sudo cp $HOME/swift/doc/saio/rsyslog.d/10-swift.conf /etc/rsyslog.d/

2) 在/etc/rsyslog.conf中进行如下的配置

这个配置项通常在 GLOBAL DIRECTIVES 部分中。

$PrivDropToGroup adm

3) 建立小时目录

sudo mkdir -p /var/log/swift/hourly

4) 修改日志目录权限并启用日志

sudo chown -R syslog.adm /var/log/swift
sudo chmod -R g+w /var/log/swift
sudo service rsyslog restart

再写下去这篇内容就太长了,接下来的内容请关注:

Swift All In One(SAIO,Swift单机版)部署文档(二)

注册Windows的URL协议

上次chrome-extension协议注册到Windows系统里,写了一段注册表文件实现。这里备份一下:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\\chrome-extension]
@=\"ChromeProtocol\"
\"URL Protocol\"=\"C:\\\\Program Files (x86)\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe\"

[HKEY_CLASSES_ROOT\\chrome-extension\\DefaultIcon]
@=\"C:\\\\Program Files (x86)\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe,1\"

[HKEY_CLASSES_ROOT\\chrome-extension\\shell]

[HKEY_CLASSES_ROOT\\chrome-extension\\shell\\open]

[HKEY_CLASSES_ROOT\\chrome-extension\\shell\\open\\command]
@=\"\\\"C:\\\\Program Files (x86)\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe\\\" \\\"%1\\\"\"

Blodh——基于HTML5的bilibili视频外链播放器

博客搬家以后我站内很多东西都消失了,包括B站外链。这些组件要一点一点的重构也是很累的。

所以我的思想就是,干脆推翻造新轮子。

比如这个抛弃Flash,完全用HTML5的B站播放器。

ABPlayer这个HTML5弹幕播放器真的是非常的优秀,连mode7弹幕都能解码。

这个项目叫做Blodh,全称是Bilibili Loader of danmaku in HTML5,实际上从这奇怪的全称应该可以看出来,我是先有了Blodh这个名字,才给它想一个“全称”的。

这个项目已经在github上开源,地址是:https://github.com/zyzsdy/Blodh

下面是效果预览?

Bilibili视频——载入中(列表页面无法播放视频,请进入文章详情页)

同时放两个视频的效果?

Bilibili视频——载入中(列表页面无法播放视频,请进入文章详情页)

再放一个有mode7弹幕的视频?

Bilibili视频——载入中(列表页面无法播放视频,请进入文章详情页)

更新:随着B站改版,此项目在2021年完全失效,无法再使用

星天Galaxy Cross 歌词翻译

太久不写博客了总不好。先更一篇凑数。

排版就不仔细排了。


遺伝子レベルの

遗传物质级别的

インディペンデント

独立于世

絶望も希望も

绝望也好 希望也罢

いだいて

都能一起拥抱于胸

足掻け命尽きるまで

拼搏向前 直至生命终结



ヒカリと飛沫のKiss

星光与水花的亲吻

恋のような

宛如恋爱一般

虹のバースデイ

仿佛彩虹色的生日



どんな美しき日も

无论在多么美好的日子里

何か生まれ

都有诞生

何かが死ぬ

也有离世



せめて唄おう

至少能让我歌颂

I love you

世界が酷い地獄だとしても

就算世界已如同残酷地狱



せめて伝えよう

至少能让我传达

I love you

解放の 時は来た

解放的时刻已来临

星降る

天へと

向着 群星绚烂的天空

響き飛べ! リバティソング

放飞回荡着的歌声! 自由之歌



Stardust!!

星尘!!



そして奇跡は待つモノじゃなくて

奇迹并非待之而来

その手で創るものと…吠えろ!

而是亲手创造之物……高呼吧!

涙した過去のにがみを

让泪水与过往的痛苦一同

レクイエムにして

化为一首安魂曲

生ある全のチカラで

发出生命全部的力量

輝けFuture world

闪亮未来的世界

信じ照らせ

让信念被照耀着

星天ギャラクシィクロス

完成星空中银河的交错



一人じゃないことを

终于不是独身一人

やがて君は

为了等到你

知る日の為

理解的那一天



指先伝う心音ハートスロブ

指尖传递来的心跳声Heart Throb

分かち合って

共同分享

明日あすに向かう

奔向明日



永遠とわなる空に

在永恒的天空中

I feel you

我感受到你

自由の魂は殺せはしない

自由之魂无法被扼杀



不滅なる夢に

在永恒不灭的梦中

I feel you

我感受到你

大志へと けんを握れ

紧握双拳 追寻大志

運命も

就算是命运

終極も

亦或是终焉

断ち切るチカラで

都能全部斩断的力量



そして重ねた勇気は煌めき

彼此交错的勇气之光大放异彩

十字となって闇を暴く

化为能够驱散黑暗的十字

駆け抜け立った丘には

飞奔前行终而驻足的山丘之上

神様も知らない

就连神明也未曾到达

歴史が光り誇る

历史之光为之自豪

舞い飛べBrave hearts

放飞舞动着的 勇敢之心

この絆

这份羁绊

星天ギャラクシィクロス

化作星空中银河的交错



逆光のツバサで

逆光的羽翼

Yes,just believe

不死なる炎で

不死的火焰

Ignition…!!

過去を背負い戦おう

背负着过去一战



そして奇跡は待つモノじゃなくて

奇迹并非待之而来

その手で創るものと…吠えろ!

而是亲手创造之物……高呼吧!

何度だって何度だって

不论几次 不论几次

立ち上がろうか!

都要再次站起来

生ある全のチカラで

发出生命全部的力量

輝けFuture world

闪亮未来的世界

信じ照らせ

让信念被照耀着

星天ギャラクシィクロス

完成星空中银河的交错

如何使用HSTS(HTTPS严格传输安全模式)

今天更新了我的博客主程序,我打开了HSTS。

HSTS是一种安全功能,在HSTS模式下,一旦浏览器与服务器建立了HTTPS连接,浏览器就不再承认HTTP连接有效。

这是为了防止HTTPS中间人攻击的一种方式——降级攻击(即作为中间人,替换所有页面上的https为http)而产生的一种措施。

在访问不安全的HTTPS连接的时候,浏览器会给出警告,如果使用了HSTS,那么用户将不能忽略警告。

HSTS的主要部分由浏览器实现,现在主流浏览器已经全面支持HSTS。服务器要做的就是通知浏览器自己已经准备好了全站HTTPS,可以完全抛弃HTTP了。

服务器设置HSTS非常简单,只需要发送以下响应头即可:

Strict-Transport-Security: max-age=63072000; includeSubdomains; preload

参数看名字就可以知道意思了。其中max-age(单位是秒)是HSTS至少保持的时间。即只要和该服务器建立过HTTPS连接,在该时间没过之前,即使你使用HTTP连接也是无效的。

Biliroku的更新——七牛CDN的缓存真顽固

11号那天收到反馈说,B站有些房间号无法录制,但是基本不影响使用。

于是我根据它报告的房间号看了下情况——115。

三位数房间号?B站居然放出了3位数房间号?熟悉B站生放送的人可能知道,B站自开始直播这个功能,房间号就一直是四位数。

于是我打开了这人的直播间——发现居然是陆夫人,我记得陆夫人的直播间是1016啊。

于是打开开发者工具看了看抓包信息,感觉明白了一切。

这就是B站的直播短号嘛。。。

访问 http://live.bilibili.com/1016 的时候,服务器会发一个302定向到 http://live.bilibili.com/115。

HTML内容里面有一句javascript定义了真实的房间号。

因为我的程序直接是信任这个房间号就是真实的,然后直接访问api去找直播数据流下载。

所以就会出现短号找不到的情况。

于是新版更新就是加了一次HTTP请求,先请求主页得到真实房间号,再请求API去找直播数据流。

我花了1个小时修改程序。

花了20个小时处理七牛的缓存。

当我程序改完传到放在七牛的自动更新服务器上,然后我打开自己的正式版程序。

发现没更新?

然后一看,页面根本就没有变嘛。

才发现七牛根本就没刷新缓存。已经更新到1.2.2版本了,而页面上还赫然写着1.2.1

七牛的CDN太顽固了,后台清除多次都无效,不知道缓存机制是个什么样的策略。

后来我忍无可忍,给七牛提交了工单,让他们帮我刷缓存。

于是12日下午17:00缓存终于刷掉了,我自己终于收到了推送。

后来七牛的人告诉我说,

像我这样的用七牛做更新服务器的人很常见,他建议我这么使用——

下载qrsctl命令行管理工具

登录:

1
./qrsctl login <User> <Passwd>

设置302跳转

1
./qrsctl redirect <bucket> 文件名 http://域名/地址 302

这样由于302不会被缓存,每次上传不同的文件名,然后用这个设置新的跳转,就可以解决这个缓存顽固的问题了。