yjiang's cake

nginx开启dpdy协议支持

SPDY

spdy 优势

  1. 多路复用,请求优化
  2. HTTP头压缩
  3. 强制SSL协议传输

说白了,spdy的作用就是:对用户提升网站传输速度,增加安全性.对服务器降低连接数,减少资源消耗.

nginx开启spdy支持

spdy条件

  1. nginx 1.5.9 + (虽然从1.4.x就开始支持spdy了,但是早期版本功能并不完善,对此,nginx在spdy模块页有说明)
  2. openssl 1.0.1 +
  3. nginx 开启ssl模块

nginx 从1.5.10开始已经支持SPDY协议. 可以用命令 nginx -V 来查看自己的配置是否已经启用了 spdy 支持;自己看了一下,使用 aptitude install nginx安装的已经启用了 spdy. 即便不支持也没事,可以重新编译, 编译时增加 --with-http_spdy_module 参数来启用.

spdy-nginx

nginx 配置

可以参照 nginx官网对spdy模块的说明 来配置即可

server {
    listen 443 ssl spdy;

    ssl_certificate server.crt;
    ssl_certificate_key server.key;
    ...
}

修改完配置以后重启nginx使配置生效.

查看配置结果

安装chrome插件SPDY indicator 或者访问 <chrome://net-internals/#spdy> 来查看是否生效,如图

spdy-chrome

使用户默认访问SSL

server{
    listen 80;
    server_name yjiang.tk;

    rewrite ^(.*)$  https://$host$1 permanent;  
}

Django

初次接触Django,大概使用了下发现跟php还是有一些区别的.
Django不像php的大多数框架,其自身已经整合了包括WebServer 管理后台 用户认证等很多的功能;
虽然有了WebServer,但是Django明确规定manage.py runserver{port}只适合开发使用,发布环境还是需要uwsgi, 依旧是主流的nginx + fastcgi
下面还是简单记录一下整个环境的安装过程

Django

**安装请参照官方文档

uwsgi

1. 安装 aptitude install uwsgi
2. 创建配置 uwsgi.xml

<uwsgi>
        <plugin>python</plugin>
        <socket>/etc/nginx/uwsgi.sock</socket>
        <chmod-socket>777</chmod-socket>
        <pythonpath>/var/www/website</pythonpath>
        <app mountpoint="/">
                <script>website.wsgi</script>
        </app>
        <module>website.wsgi</module>
        <master>true</master>
        <processes>1</processes>
        <enable-threads>true</enable-threads>
        <logdate>true</logdate>
        <harakiri>60</harakiri>
        <reload-mercy>8</reload-mercy>
        <max-requests>200</max-requests>
        <limit-as>512</limit-as>
        <reload-on-as>256</reload-on-as>
        <reload-on-rss>192</reload-on-rss>
        <vacuum/>
        <daemonize>/var/log/uwsgi.log</daemonize>
</uwsgi>

3. nginx调用uwsgi

server{
    listen  80;
    server_name yjiang.wicp.net;
    root /var/www/website/;
    location / {
        include uwsgi_params;
        uwsgi_pass unix:/etc/nginx/uwsgi.sock;
        uwsgi_param UWSGI_SCHEME $scheme;
        uwsgi_param SERVER_SOFTWARE nginx/$nginx_version;
    }
}

4. 启动uwsgi
uwsgi -x uwsgi.xml

5. 重启nginx
service nginx restart

关闭
pkill -9 uwsgi

curl替代/api测试好工具 -- httpie

又一款python小工具来啦~

特点:相比curl,使用简单,显示结果支持高亮.

httpie-and-curl

安装简单

aptitude install httpie / pip install httpie

几个使用对比

1. curl的GET请求:

curl -v -X GET http://bubbler.labs.douban.com/j/user/68603930

httpie的GET请求

httpid GET http://bubbler.labs.douban.com/j/user/68603930

2. 使用curl进行POST提交JSON时,需要手动书写JSON格式来提交;

curl -v -X POST --data "{'foo':'bar'}" http://yjiang.tk

而使用httpie只需要这样来写

http --form POST http://yjiang.tk foo=bar format=json

3. 使用curl进行文件上传;

curl -v -X POST http://foo.com/upload -F "imageData=@~/1.jpg"

使用httpie则可以这样写

http -f POST http://foo.com/upload imageData=@~/1.jpg

4.更多使用还需要自己http --help

从上面的只言片语看来,虽然只是语法上的些微变化,但实际使用起来httpie的命令确实要比curl更便于记忆.尤其是自定义user-agent``cookie或者使用代理,或https证书验证等更复杂的操作.

文件远程实时同步 (pyinotify + rsync)

需要在机器A与机器B之间实时同步文件,由于实时要求,rsync+crontab的方式就不符合条件了;在google上搜到inotify可以实时检测特定目录下文件的变动,但是需要复杂的配置,看到python的pyinotify库,正好练下python.

安装

pip install pyinotify

realtime_rsync.py

#!/usr/bin/python
#-*-coding:utf8-*-
import os
import subprocess
import pyinotify

sourcePath = '/home/yjiang/foo/'
targetPath = 'yjiang@yjiang.tk:/home/yjiang/bar/'

wm = pyinotify.WatchManager()

class rsync():
    def __init__(self, type, path):
        cmd = 'rsync -avz --delete %s %s' %(sourcePath, targetPath)
        subprocess.call(cmd, shell=True)
        print "%s: %s" % (type, path)

class EventHandler(pyinotify.ProcessEvent):
    def process_IN_CREATE(self, event):
        rsync('create', event.pathname)
    def process_IN_DELETE(self, event):
        rsync('delete', event.pathname)
    def process_IN_MODIFY(self, event):
        rsync('modify', event.pathname)

notifier = pyinotify.Notifier(wm, EventHandler())
wm.add_watch(sourcePath, pyinotify.ALL_EVENTS, rec=True)    #rec=True sub-dir support
notifier.loop()

内网打洞利器 -- ngrok

自从上次搬家后,换了房东的TP-link路由器,花生壳也不好使了,ddns也时不时抽风,需要每天重启路由器,被折磨得死去活来.DDNS只好作罢,换成之前项目发布到外网时,用过的一款打洞利器:ngrok.

下载安装 https://ngrok.com/download

  • 安装使用都非常简单, 下载解压后扔到/usr/local/bin下作为系统命令执行即可

配置

  1. 直接运行时加参数;例如 ngrok -authtoken={token} {port};更多命令自行ngrok --help
  2. 使用配置文件~/.ngrok

配置文件 : .ngrok

auth_token: {token}
tunnels:
  ssh:
    proto:
      tcp: "22"
  web:
    proto:
      http: "80"

tips

  • 使用空格分割来同时运行多个服务,例如: ngrok start web ssh.
  • ssh等非http/https协议服务需要加-proto=tcp参数.
  • ngrok不支持后台运行,需要配合'tmux/screen'来实现后台模式

Copyright © 2016 yjiang's cake

返回顶部