freeorg申请的免费证书,在微信小程序中的使用

需要指定三个文件:
ssl_certificate cert/full_chain.pem;
ssl_certificate_key cert/private.key;
ssl_trusted_certificate cert/chain.pem;

ssl_certificate:一定要使用full_chain,否则在安卓微信中,报fail ssl.
ssl_certificate_key:私钥
ssl_trusted_certificate:在普通的浏览器https中,这个参数不一定要设置,在微信小程序中,一定要设置,其实是从full_chain中分离的一部分;在申请成功的时候自己复制粘贴。

文件名 内容
cert.pem 服务端证书
privkey.pem 证书的私钥
chain.pem 浏览器需要的所有证书但不包括服务端证书,比如根证书和中间证书
fullchain.pem 包括了cert.pem和chain.pem的内容。上半部分是cert.pem,下半部分是chain部分

nginx配置 — 让匹配路径不作为文件目录的一部分

nginx指定文件路径有两种方式root和alias,root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。

[root]
语法:root path
默认值:root html
配置段:http、server、location、if

[alias]
语法:alias path
配置段:location

root实例:
location ^~ /t/ {
root /www/root/html/;
}
如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/t/a.html的文件。
alias实例:

location ^~ /t/ {

alias /www/root/html/new_t/;
}
如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/new_t/a.html的文件。注意这里是new_t,因为alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。
注意:

  1. 使用alias时,目录名后面一定要加”/”。
  2. alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
  3. alias只能位于location块中。(root可以不放在location中)

nginx大小写问题

1.默认nginx是对大小写敏感的
2.解决办法:
https://www.cnblogs.com/tommyli/p/3543303.html
3.本文使用perl模块模块解决:
a.编译nginx,加入perl模块
b.修改配置主文件(/usr/local/nginx/conf/nginx.conf):
shell
perl_set $url '
sub {
my $r = shift;
my $re = lc($r->uri);
return $re;
}
';

c.修改虚拟主机配置文件(如:/usr/local/nginx/conf/conf.d/demo.linuxeye.com.conf):

if($uri ~[A-Z]){
        rewrite ^(.*)$ $url last;}

d.注意上一步骤上的$uri,不是$url,这是两个不同的参数,否则会照成不必要的错误,比如index.php不默认了。

yum安装nginx

#####1.进入nginx官网:http://nginx.org/en/linux_packages.html#stable
#####2.找到页面上的推荐配置:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
#####3.创建文件/etc/yum.repos.d/nginx.repo
#####4.在nginx.repo文件中添加步骤2的内容:
把“OS”换成当前的系统如rhel或者centos
把“OSRELEASE”换成当前系统的版本:如6
“`shell
vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
““
#####5.yum -y install nginx

nginx作tcp负载

1.1.9.0以上才支持
2.stream模块的linux需要自己添加编译
3.stream模块与http,events模块同级
4.超时时间设置长点,否则,容易照成nginx tcp 负载均衡 断开
5.http://nginx.org/en/docs/stream/ngx_stream_core_module.html#tcp_nodelay
6.http://blog.csdn.net/libaineu2004/article/details/47780819
7.https://www.nginx.com/blog/tcp-load-balancing-in-nginx-plus-r5/
8.安装steam模块,在编译参数中添加:–with-steam

events {
    worker_connections  1024;
}

stream {

    upstream cloudsocket {
     #hash $remote_addr consistent; #按hash算法负载

    server localhost:7000;# max_fails=3 fail_timeout=30;
    server 192.168.0.90:12345 weight=1;
    server 192.168.0.91:12345 weight=5;
    }

    server {

    listen 8000;# so_keepalive=on; # 保持连接状态

    #proxy_connect_timeout 20s; #设置超时时间

    #proxy_timeout 20s;#设置超时时间

    proxy_pass cloudsocket;


    }

    }

另一个第三方模块实现:
http://www.jb51.net/article/77259.htm

nginx泛域名解析实现二级域名多域名

利用nginx泛域名解析配置二级域名和多域名

1.二级域名对应不同的目录
网站的目录结构为
html
├── bbs
└── www

修改两行配置:

 server_name  ~^(?<subdomain>.+).yourdomain.com$;
 root   html/$subdomain; 

正则匹配,(?pattern),匹配的pattern,可以通过name变量访问


2.二级域名使用同一个目录,但不同的参数
使用泛解析,实现同一个项目,不同数据;商铺的不同域名的实现。

 server_name  ~^(?<subdomain>.+).trhuiwen.com$;
 root   "/var/www/test";
 location / {
            index  index.html index.htm index.php;
            rewrite ^(.*)$ /index.php?app=$subdomain last;
        }

3.因为已经获取到了二级域名,并用参数保存了,所以可以实现proxy_pass的不同代理。
也就是不同的商铺可以放在不同的服务器上。


注意:
已使用反向代理如何再使用二级域名的泛解析二级目录:
#####原:admin.com 和admin.com/agent
upsteam admin
{
server localhost:8080;
server localhost:8081;
}
server {
listen 80;
server_name admin.com;
location / {
index index.html index.htm;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://admin/;
}
}

#####现:admin.com t agent.com
#####新增加如下配置
upsteam admin
{
server localhost:8080;
server localhost:8081;
}
server {
listen 80;
server_name agent.com;
location / {
index index.html index.htm;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://admin/agent; #在proxy_pass后面直接添加二级目录名
}
}

网站添加https,ssl

  1. 在阿里云申请免费的,需求填写一些信息,2个工作日吧,中间需要审核,请及时关注
  2. 下载证书:包括:.key和.pem文
  3. 在Nginx的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中。
  4. 如果以前有使用80端口部署过网站,80端口的配置需要改,不再转发到php-fpm,现在重定向到https网址:
server {
        listen 80;
        server_name ssl.tanguu.com;
        rewrite ^(.*) https://ssl.tanguu.com$1 permanent;
}
  1. 添加443端口配置,nginx配置:
server {
    listen 443;
    server_name ssl.tanguu.com;
    ssl on;
    root  /data/www/ssl.tanguu.com;
    index  index.php index.html index.htm;
    ssl_certificate   cert/214156547860638.pem;
    ssl_certificate_key  cert/214156547860638.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
        root /data/www/ssl.tanguu.com;
        index index.php index.html index.htm;
    }
    location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_param  SCRIPT_FILENAME         /var/www/ssl.tanguu.com$fastcgi_script_name;
            fastcgi_param HTTPS on;
            include        fastcgi_params;
        }

}
  1. 重启nginx
  2. 使用https前缀访问:https://ssl.tanguu.com

遇到的一些问题:

访问index.php文件,会直接下载该文件:因为浏览器缓存的原因,换个浏览器试试就好了

原理
http://img.blog.csdn.net/20130924102812796
服务器 用RSA生成公钥和私钥
把公钥放在证书里发送给客户端,私钥自己保存
客户端首先向一个权威的服务器检查证书的合法性,如果证书合法,客户端产生一段随机数,这个随机数就作为通信的密钥,我们称之为对称密钥,用公钥加密这段随机数,然后发送到服务器
服务器用密钥解密获取对称密钥,然后,双方就已对称密钥进行加密解密通信了

nginx,lvs,haproxy节点区别

参考:http://www.ha97.com/5646.html
nginx做http,https,email
lvs和haproxy可以做http,数据库,聊天室等
注意此段:
现在对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术:

第一阶段:利用Nginx或HAProxy进行单点的负载均衡,这一阶段服务器规模刚脱离开单服务器、单数据库的模式,需要一定的负载均衡,但是仍然规模较小没有专业的维护团队来进行维护,也没有需要进行大规模的网站部署。这样利用Nginx或HAproxy就是第一选择,此时这些东西上手快, 配置容易,在七层之上利用HTTP协议就可以。这时是第一选择。

第二阶段:随着网络服务进一步扩大,这时单点的Nginx已经不能满足,这时使用LVS或者商用Array就是首要选择,Nginx此时就作为LVS或者Array的节点来使用,具体LVS或Array的是选择是根据公司规模和预算来选择,Array的应用交付功能非常强大,本人在某项目中使用过,性价比也远高于F5,商用首选!但是一般来说这阶段相关人才跟不上业务的提升,所以购买商业负载均衡已经成为了必经之路。

第三阶段:这时网络服务已经成为主流产品,此时随着公司知名度也进一步扩展,相关人才的能力以及数量也随之提升,这时无论从开发适合自身产品的定制,以及降低成本来讲开源的LVS,已经成为首选,这时LVS会成为主流。
最终形成比较理想的基本架构为:Array/LVS — Nginx/Haproxy — Squid/Varnish — AppServer


补充:
HAProxy 缺点没有介绍。结合个人对 Nignx 的部分了解,列举一些 HAProxy 不及 Nginx 的地方,仅供参考:
1. 不支持 POP/SMTP 协议
2. 不支持 SPDY 协议
3. 不支持 HTTP cache 功能。现在不少开源的 lb 项目,都或多或少具备 HTTP cache 功能。
4. 重载配置的功能需要重启进程,虽然也是 soft restart,但没有 Nginx 的 reaload 更为平滑和友好。
5. 多进程模式支持不够好。

nginx基于cookie灰度发布(同机器不同目录)

  1. 原理:分配不同的web目录.
    在nginx中指定web项目的root为动态,根据if条件来确定root值;节省资源,不使用分发不同服务器方式来做,只在一台服务器上使用.
  2. 准备两个Web目录,分别为:mingren和mingren_gray
  3. 设置nginx配置,其中cookie部分根据开发的设置来写
    set $root “/data/doc/mingren/Port/Mr”;
    if ($http_cookie ~* “username=xxx”){
    set $root “/data/doc/mingren/Port/Mr”;
    }
    location ~ ^.+.php($|/) {
    root $root;
    …..
    }
  4. 重启nginx:service nginx restart
  5. 与开发确认最终的发布版本
  6. 上传代码至mingren_gray
  7. 公司内部人员开始测试
  8. 通过测试后
    a) 把新代码复制一份到mingren.
    b) 删除灰度测试时,nginx配置中if条件语句,重启/刷新nginx
  9. 注意:使用了$root变量后,所有的location都要写上root $root;否则找不到路径