用nginx加速静态资源网站-(CND节点缓存节点)

经过实际应用,发现varnish并不稳定,不知什么原因。所以这次使用了nginx做缓存节点.

1:安装

yum -y install nginx

2:修改配置文件(/etc/nginx/nginx.conf)-增加缓存目录配置

proxy_cache_path /proxy_cache_path levels=1:2 keys_zone=webserver:1024m  inactive=365d max_size=4000g;

3:在需要配置缓存的虚拟主机中配置:

server {

        listen       80;
        server_name  test.xtgxiso.cn;
       
        add_header X-Via $server_addr;
        add_header X-Cache $upstream_cache_status;

 
        location / {

                proxy_pass http://app;
                proxy_redirect          off;
                proxy_set_header        Host $host;
                proxy_set_header        X-Real-IP $remote_addr; 
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                client_max_body_size    100m;
                client_body_buffer_size 128k;
                proxy_ignore_client_abort on;
                proxy_connect_timeout   900;
                proxy_send_timeout      900;
                proxy_read_timeout      900;
                proxy_buffer_size       4k;
                proxy_buffers           4 32k;
                proxy_busy_buffers_size 64k;
                proxy_temp_file_write_size 64k;

                proxy_cache webserver;
                proxy_cache_valid 200 302 365d;

        }

4:通过浏览器看到包含如下信息,则证明成功了

X-Cache HIT

这样就通过nginx配置了一个简单的CND缓存节点,可以通过集群和dns智能负载技术做成一个全国甚至全球的CDN服务

发表在 好文推荐, 网站开发, 网站架构 | 评论关闭

用varnish加速静态资源网站-(CND节点缓存节点)

Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好.

1:安装

yum -y install varnish

2:修改配置文件(/etc/varnish/default.vcl)

backend web1 {
  .host = "192.168.1.1";
  .port = "80";
}
backend web2 {
  .host = "192.168.1.2";
  .port = "80";
}

director webserver  random {
        {.backend = web1;
         .weight  = 1;
        }
        {.backend = web2;
         .weight  = 1;
        }
}


sub vcl_deliver {
        if (obj.hits > 0) {
         set resp.http.X-Cache = "HIT";
    } else {
         set resp.http.X-Cache = "MISS";
        }
}

sub vcl_fetch {
}

sub vcl_recv {
        set req.backend = webserver;
        if (req.request != "GET" && req.request != "HEAD" && req.request != "PUT" && req.request != "POST" && req.request != "TRACE" && req.request != "OPTIONS" && req.request != "DELETE") {
         return (pipe);
    }
        return(lookup);
}

3:启动:

varnishd -f /etc/varnish/default.vcl -s  malloc,8G  -T  0.0.0.0:2000  -a  0.0.0.0:80

4:通过浏览器看到如下信息,则证明成功了

这样就通过varnish配置了一个简单的CND缓存节点,可以通过集群和dns智能负载技术做成一个全国甚至全球的CDN服务

发表在 好文推荐, 网站架构 | 评论关闭

通过Haproxy代理来实现跨区域的tcp分布式服务


前一篇文章讲述了http的代理,这篇主要讲解tcp的代理,虽然nginx也可以,不过仍然不推荐使用nginx代理tcp协议,推荐使用Haproxy来代理TCP


方法:

    1:将提供服务的域名做dns智能负载均衡,将不同区域或线路的用户解析到相应区域的服务器上.可参考cloudxns

    2:将其他区域的代理服务通过Haproxy代理到真实的服务上.Haproxy配置大致如下:

     

#全局配置参数,进程级的,用来控制Haproxy启动前的一些进程及系统设置
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    user        haproxy
    group       haproxy
    daemon
    maxconn     4096
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
    
    nbproc 1
    spread-checks           4
    tune.maxaccept          8
    tune.maxpollevents      100
    

#配置一些默认的参数,可以被frontend,backend,listen段继承使用
defaults
    mode                    http
    log                     global
    option                  dontlognull
    option                  log-health-checks //记录健康检测日志
    option                  redispatch //在连接失败或断开情况下,允许当前会话被重新分发
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 100000
        


listen tcp1 0.0.0.0:1215
    mode tcp
    option tcplog
    balance roundrobin
    server tcp_s1 192.168.1.121:1215

 这样通过简单的dns智能负载均衡做了一个跨区域的分布式服务

发表在 好文推荐, 网站架构 | 评论关闭

通过nginx代理来实现跨区域的http分布式服务

问题:当一个服务的用户很多时,应该会有不在服务区域的用户访问服务会慢,尤其是国外用户 访问国内服务的时候,慢的效果会非常明显,这就是这片文章要解决的问题


方法:

    1:将提供服务的域名做dns智能负载均衡,将不同区域或线路的用户解析到相应区域的服务器上.可参考cloudxns

    2:将其他区域的代理服务通过nginx代理到真实的服务上.nginx配置大致如下:

     

http {
    upstream server_list {
        server 192.168.1.2:80;
    }
    server {
        listen       80;
        server_name  xxx.xxxx.xxx;
        location / {
                proxy_pass http://server_list;
                proxy_redirect          off;
                proxy_set_header        Host $host;
                proxy_set_header        X-Real-IP $remote_addr; 
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                client_max_body_size    100m;
                client_body_buffer_size 128k;
                proxy_ignore_client_abort on;
                proxy_connect_timeout   900;
                proxy_send_timeout      900;
                proxy_read_timeout      900;
                proxy_buffer_size       4k;
                proxy_buffers           4 32k;
                proxy_busy_buffers_size 64k;
                proxy_temp_file_write_size 64k;
        }
}

 这样通过简单的dns智能负载均衡做了一个跨区域的分布式服务

发表在 网站架构 | 11 条评论

MQTT协议

        MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议

       

        MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:

       1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
       2、对负载内容屏蔽的消息传输;
       3、使用 TCP/IP 提供网络连接;
       4、有三种消息发布服务质量:
  • “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
  • “至少一次”,确保消息到达,但消息重复可能会发生。
  • “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
       5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;

       6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制

      更多内容见:http://mqtt.org/

发表在 网站开发 | 14 条评论

codeigniter利用swagger建立接口文档

swagger的官方网址是:http://swagger.io/

codeigniter利用swagge的网址是:https://github.com/panxp/codeigniter-swagger

其他帮助说明 :https://github.com/wolf432/note/wiki/%E5%88%A9%E7%94%A8swagger%E5%BB%BA%E7%AB%8B%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3

发表在 网站开发 | 13 条评论

vim自动排版–格式化代码

小技巧

(1) 按两下小写g,即gg,定位光标到第一行。

(2) 按住Shift+v,即大写V,进入可视化编辑的列编辑模式。

(3) Shift+g,即大写G,选中整个代码。

(4) 按下等号=,格式化所有代码。

发表在 网站开发 | 14 条评论

CentOS下搭建OpenVPN服务器

1、安装前准备
# 关闭selinux

setenforce 0
sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config

 
# 安装openssl和lzo,lzo用于压缩通讯数据加快传输速度

yum -y install openssl openssl-devel
yum -y install lzo

 
# 安装epel源

rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
sed -i 's/^mirrorlist=https/mirrorlist=http/' /etc/yum.repos.d/epel.repo

2、安装及配置OpenVPN和easy-rsa
# 安装openvpn和easy-rsa

yum -y install openvpn easy-rsa

 
# 修改vars文件

cd /usr/share/easy-rsa/2.0/
vim vars

# 修改注册信息,比如公司地址、公司名称、部门名称等。

export KEY_COUNTRY="CN"
export KEY_PROVINCE="Shandong"
export KEY_CITY="Qingdao"
export KEY_ORG="MyOrganization"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"

# 初始化环境变量

source vars

 
# 清除keys目录下所有与证书相关的文件
# 下面步骤生成的证书和密钥都在/usr/share/easy-rsa/2.0/keys目录里

./clean-all

 
# 生成根证书ca.crt和根密钥ca.key(一路按回车即可)

./build-ca

 
# 为服务端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)

./build-key-server server

 
# 每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接,下面建立2份
# 为客户端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)

./build-key client1
./build-key client2

 
# 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)

./build-dh

 
# 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击)

openvpn --genkey --secret keys/ta.key

3、创建服务器端配置文件


# 在openvpn的配置目录下新建一个keys目录

mkdir /etc/openvpn/keys

 
# 将需要用到的openvpn证书和密钥复制一份到刚创建好的keys目录中

cp /usr/share/easy-rsa/2.0/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/openvpn/keys/

 
# 复制一份服务器端配置文件模板server.conf到/etc/openvpn/

cp /usr/share/doc/openvpn-2.3.2/sample/sample-config-files/server.conf /etc/openvpn/

# 查看server.conf里的配置参数

grep '^[^#;]' /etc/openvpn/server.conf

# 编辑server.conf

vim /etc/openvpn/server.conf
port 1194
# 改成tcp,默认使用udp,如果使用HTTP Proxy,必须使用tcp协议
proto tcp
dev tun
# 路径前面加keys,全路径为/etc/openvpn/keys/ca.crt
ca keys/ca.crt
cert keys/server.crt
key keys/server.key  # This file should be kept secret
dh keys/dh2048.pem
# 默认虚拟局域网网段,不要和实际的局域网冲突即可
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
# 10.0.0.0/8是我这台VPN服务器所在的内网的网段,读者应该根据自身实际情况进行修改.这个很重要。可以用route查看网段
push "route 10.0.0.0 255.0.0.0"
# 可以让客户端之间相互访问直接通过openvpn程序转发,根据需要设置
client-to-client
# 如果客户端都使用相同的证书和密钥连接VPN,一定要打开这个选项,否则每个证书只允许一个人连接VPN
duplicate-cn
keepalive 10 120
tls-auth keys/ta.key 0 # This file is secret
comp-lzo
persist-key
persist-tun
# OpenVPN的状态日志,默认为/etc/openvpn/openvpn-status.log
status openvpn-status.log
# OpenVPN的运行日志,默认为/etc/openvpn/openvpn.log
log-append openvpn.log
# 改成verb 5可以多查看一些调试信息
verb 5

4、配置内核和防火墙,启动服务

# 开启路由转发功能
sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf
sysctl -p

 
# 配置防火墙,别忘记保存

iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn" -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
service iptables save

 
# 启动openvpn并设置为开机启动
service openvpn start
chkconfig openvpn on

5、创建客户端配置文件


# 复制一份client.conf模板命名为client.ovpn
cp /usr/share/doc/openvpn-2.3.2/sample/sample-config-files/client.conf client.ovpn
# 编辑client.ovpn
vim client.ovpn
client
dev tun
# 改为tcp
proto tcp
# OpenVPN服务器的外网IP和端口
remote 203.195.xxx.xxx 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
# client1的证书
cert client1.crt
# client1的密钥
key client1.key
ns-cert-type server
# 去掉前面的注释
tls-auth ta.key 1
comp-lzo
verb 3

这只是服务器的配置.

以后加证书的话,可以这样操作:

cd /usr/share/easy-rsa/2.0/
source vars
./build-key test

linux下的客户端配置是这样的

yum install openvpn
openvpn /etc/openvpn/client.ovpn

发表在 网站架构 | 12 条评论

shadowsocks教程

shadowsocks实质上也是一种socks5代理服务,类似于ssh代理。与vpn的全局代理不同,shadowsocks仅针对浏览器代理,不能
代理应用软件,比如youtube、twitter客户端软件。如果把vpn比喻为一把屠龙刀,那么shadowsocks就是一把瑞士军刀,轻巧方便,
功能却非常强大. https://github.com/shadowsocks/shadowsocks

服务端:

Debian / Ubuntu:

apt-get install python-pip
pip install shadowsocks

CentOS:

yum install python-setuptools && easy_install pip
pip install shadowsocks

启动:

ssserver -p 443 -k password -m aes-256-cfb

客户端

支持mac,win,ios,android,linux等。各客户端下载地址见:http://shadowsocks.org/en/download/clients.html

Mac说明见: http://jingyan.baidu.com/article/ca2d939d0b8dd5eb6c31cef6.html

win说明见:http://jingyan.baidu.com/article/7f766dafbcbef24101e1d0b6.html

Android说明见:http://jingyan.baidu.com/article/d713063520484c13fcf47552.html

IOS : https://itunes.apple.com/us/app/shadowsocks/id665729974?ls=1&mt=8

暂时就整理这么多,有不明白望大家见谅!


发表在 网站架构 | 12 条评论

Linux下高并发socket最大连接数所受的各种限制

第一步,修改/etc/security/limits.conf文件,在文件中添加如下行

* soft nofile 1000000
* hard nofile 1000000

第二步,修改/etc/pam.d/login文件,在文件中添加如下行

session required /lib/security/pam_limits.so

第三步,查看Linux系统级的最大打开文件数限制,使用如下命令

cat /proc/sys/fs/file-max
echo 1000000 > /proc/sys/fs/file-max

第四步,修改/etc/sysctl.conf文件,在文件中添加如下行

net.ipv4.ip_local_port_range = 1024 65536
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_no_metrics_save=1
net.core.somaxconn = 262144
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

然后执行如下命令:

sysctl -p

最后执行如下命令:

echo ulimit -HSn 65536 >> /etc/rc.local
echo ulimit -HSn 65536 >>/root/.bash_profile
echo "1024 65535"> /proc/sys/net/ipv4/ip_local_port_range
ulimit -HSn 65536

简单的总结了一下,就到这儿吧!

发表在 好文推荐, 网站架构 | 13 条评论