2017年9月 - 炫Q香蕉派

2017年9月

404怎么办

404是我们经常遇到的一个问题,遇到了404怎么办呢?
404.jpg

以下用asp.net举例,首先要能拦截错误,特别是错误中的404

<system.web>
    <customErrors mode="On" redirectMode="ResponseRewrite">
      <error statusCode="404" redirect="404.aspx"/>
    </customErrors>
</system.web>

当然customErrors中可以增加defaultRedirect="error.aspx",不过我们暂时只对404,这样我们就可以用一个不存在的url尝试了,比如/web/test?a=1&b&c

Request.Params["a"]=1
Request.Params[null]=b,c
Request.Params["QUERY_STRING"]=a=1&b&c
PATH_INFO\SCRIPT_NAME\URL同时=/web/test

相比PATH_INFO比较写实,对于后边有扩展名和斜线的情况,URL比较简单吧,用ServerVariables不带参数解析,也可以用

foreach (string s in Request.ServerVariables.AllKeys)
{
    Response.Write(s + " --> " + Request.ServerVariables[s] + "<br />");
}

接着玩docker

据说有时区问题,可以通过这个更新

sudo cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

启动命令docker run -i -t -p 23:22 ubuntu:14.04.3 /bin/bash似乎也问题,球猫说的,用docker ps -a一看吓一跳。
安装ssh服务

sudo apt-get install openssh-server
sudo /etc/init.d/ssh start
sudo adduser user

如果需要开机自启动打开/etc/rc.local文件,添加/etc/init.d/ssh start
新建的用户不能sudo,可以在/etc/sudoers文件里添加
docker restart ID可以重新启动一个容器
导出容器docker export ID > name.tar
导入容器cat name.tar |docker import - name:ver
保存镜像docker save name:ver > name.tar 或 docker save -o ~/name.tar name:ver
恢复镜像docker load < name.tar 或 docker load -i ~/name.tar

还有一个地方叫hub.docker.com,可以用docker login登录,docker push提交,docker pull获取

待续吧...

玩docker

现在的新名词越来越多,都来体验一下吧,
windows下要体验docker,需要先下载个129M的工具,https://github.com/boot2docker/windows-installer/releases/latest
docker.png

运行Boot2Docker Start,结果出来的是sh脚本,运行不起来,球猫说还是老实用虚拟机+ubuntu吧,听猫话,准没错。
下载了最新版的ubuntu 16.04.3,要求3.1以上内核,当然没问题,不确认可以用uname -a查看,然后安装

wget -qO- https://get.docker.com/ | sh
sudo service docker start

当要以非root用户可以直接运行docker时,需要执行 sudo usermod -aG docker username 命令,然后重新登录

docker run ubuntu:15.10 /bin/echo "Hello world"   

没有15.10的镜像,会自动下载51M,也可以进入镜像的命令行

docker run -i -t ubuntu:15.10 /bin/bash

启动、查看、停止一个容器

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
docker ps
docker logs ID 
docker stop ID

运行web应用,哪里来的,又去下载了130多M

docker run -d -P training/webapp python app.py
docker ps
浏览器访问http://ip:32768,显示Hello world!
docker stop frosty_shockley
docker rm frosty_shockley 

球猫教了一条命令,也不太明白

sudo docker search mosquitto

镜像管理
列出本地镜像 docker images
使用镜像 docker run -t -i ubuntu:15.10 /bin/bash
获取镜像 docker pull ubuntu:14.04.3
查找镜像 docker search httpd
获取镜像 docker pull httpd
运行镜像 docker run -d -P httpd
更新镜像 docker commit -m="test" -a="MikuQ" ID miku_q/httpd:v2
创建镜像、设置标签,以后再学,比较晕了

补充:
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh
下载
wget https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.12.1~ce-0~ubuntu_amd64.deb
apt-get install libltdl7 libseccomp2
dpkg -i docker-ce_17.12.1~ce-0~ubuntu_amd64.deb

参考资料:
http://www.runoob.com/docker/windows-docker-install.html
https://docs.docker.com/install/linux/docker-ce/ubuntu/

安装盲狗MongoDB

下载地址社区版,为啥不是企业版?不知道区别,152M安装文件,https://www.mongodb.com/download-center#community
好久没帖图了,随便帖一副吧
mongo.png
在D盘的temp文件夹下建立一个db文件夹给忙狗用,找到默认的安装文件夹,建立一个start.bat

mongod --dbpath d:\temp\db

就可以启动忙狗了,在浏览器输入http://localhost:27017/,就可以看到

It looks like you are trying to access MongoDB over HTTP on the native driver port.

可以打开命令行文件mongo.exe,运行mongo脚本

1+1
db
db.ballcat.insert({"name":"球猫"})
db.ballcat.find()
db.ballcat.insert({"name":"小撸","name2":"mo10"})
db.ballcat.find()
db.ballcat.find({"name2":"mo10"})

如何用开发语言操作忙狗呢,有官方驱动和第三方驱动,为啥要第三方的呢?https://github.com/samus/mongodb-csharp
新建一个C#的hello项目,引用MongoDB,然后就可以写代码了

//链接字符串
string connectionString = "mongodb://localhost";
//数据库名
string databaseName = "test";
//集合名
string collectionName = "ballcat";
//定义Mongo服务
Mongo mongo = new Mongo(connectionString);
//获取databaseName对应的数据库,不存在则自动创建
MongoDatabase mongoDatabase = mongo.GetDatabase(databaseName) as MongoDatabase;
//获取collectionName对应的集合,不存在则自动创建
MongoCollection<Document> mongoCollection = mongoDatabase.GetCollection<Document>(collectionName) as MongoCollection<Document>;
//链接数据库
mongo.Connect();
try
{
    //定义一个文档对象,存入两个键值对
    Document doc = new Document();
    doc["ID"] = 1;
    doc["name"] = "Hello 大球!";
    //将这个文档对象插入集合
    mongoCollection.Insert(doc);
    //在集合中查找键值对为ID=1的文档对象
    Document docFind = mongoCollection.FindOne(new Document { { "ID", 1 } });
    //输出查找到的文档对象中键“name”对应的值,并输出
    Console.WriteLine(Convert.ToString(docFind["name"]));
}
finally
{
    //关闭链接
    mongo.Disconnect();
}

暂时还不是很习惯忙狗的套路,慢慢熟悉吧,在shell执行db.ballcat.find()发现大球进去了,还有一个ID。

参考文献:
http://www.cnblogs.com/lipan/archive/2011/03/08/1966463.html
http://www.runoob.com/mongodb/mongodb-window-install.html

用nginx辅助asp.net网站

首先要安装nginx,下载地址http://nginx.org/en/download.html,当前稳定版本1.12.1,
解压后用命令行运行start nginx就可以了,访问http://127.0.0.1/,不出意外的话就有欢迎页面了,
一般的asp.net项目都是这样的,外网访问不到的,如果是手机app就尴尬了,
http://localhost:1794/hello/default.aspx
打开nginx.conf,配置

 index  index.html index.htm default.aspx;
 proxy_pass    http://localhost:1794/hello/;
 proxy_redirect default;

然后nginx -s reload访问http://127.0.0.1/就可以了,当然也可以用ip访问,如果开墙的话。

不过似乎还缺些什么,弄个php吧,http://windows.php.net/download,当前版本7.1.9,下载x64非线程安全版,
解压到nginx隔壁,命名php-7.1.9,拷贝php.ini-development重命名php.ini
找到cgi.fix_pathinfo=1,去掉前边的分号,保存,命令行运行php-cgi.exe -b 127.0.0.1:9000。

修改nginx,root可以使用相对路径,fastcgi_param要使用绝对路径D:\www

location ~ \.php$ {
        root           ../../www;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  D:\www$fastcgi_script_name;
        include        fastcgi_params;
}

nginx -s reload后,新建info.php

<?php
phpinfo();
?>

浏览器访问http://127.0.0.1/info.php,可以看到php安装成功了

备注:如果php-cgi启动失败,可以安装Visual C++ Redistributable for Visual Studio 2015之类
https://www.microsoft.com/zh-cn/download/details.aspx?id=48145

参考文献:http://blog.csdn.net/wozaixiaoximen/article/details/50780149