• 每天进步一点点!

文章分类

推荐网站

常用手册

Nginx的location详解【转载】

语法规则: location [=|~|~*|^~] /uri/ { … }

 

= 开头表示精确匹配

^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
~ 开头表示区分大小写的正则匹配
~*  开头表示不区分大小写的正则匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
 

例子,有如下匹配规则:
 

location = / {
  #规则A
}
location = /login {
  #规则B
}
location ^~ /static/ {
  #规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
  #规则D
}
location ~* \.png$ {
  #规则E
}
location !~ \.xhtml$ {
  #规则F
}
location !~* \.xhtml$ {
  #规则G
}
location / {
  #规则H
}

那么产生的效果如下:
访问根目录/, 比如http://localhost/ 将匹配规则A
访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H
访问 http://localhost/static/a.html 将匹配规则C
访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,而http://localhost/static/c.png 则优先匹配到规则C
访问 http://localhost/a.PNG 则匹配规则E,而不会匹配规则D,因为规则E不区分大小写。
访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在。

类别:Nginx | 浏览(126) | 评论(0) | 阅读全文>>

MySql主从复制配置实例【原创】

主从复制的优点:

  1. 主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份。
  2. 通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。
  3. 使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续。

 

主从复制的工作原理:

主从复制的通过3个过程来实现,其中一个过程发生在主服务器上,另两个过程发生在从服务器。

  1. 主服务器将用户对数据库的更新操作以二进制的格式保存在Binary Log日志文件中,然后由Binlog Dump线程将Binary Log日志文件传输到从服务器。
  2. 从服务器通过一个I/O线程将主服务器上的Binary Log日志文件中的更新操作复制到一个叫做Relay Log的中继日志文件中。
  3. 从服务器通过另一个SQL线程将Relay Log中继日志文件中的操作依次在本地执行,从而实现主从服务器之间的数据同步。

 

类别:性能优化 | 浏览(453) | 评论(0) | 阅读全文>>

MySql的Bin-Log日志【原创】

  • 简介

Bin-Log日志以一种更有效的格式,并且是事务安全的方式包含更新日志中可用的所有信息。

 

Bin-Log日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改。

 

注释:Bin-Log日志已经代替了老的更新日志,更新日志在MySQL 5.1中不再使用。

 

Bin-Log日志还包含关于每个更新数据库的语句的执行时间信息。它不包含没有修改任何数据的语句。如果你想要记录所有语句(例如,为了识别有问题的查询),你应使用一般查询日志。

 

Bin-Log日志的主要目的是在恢复使能够最大可能地更新数据库,因为Bin-Log日志包含备份后进行的所有更新。

 

Bin-Log日志还用于在主复制服务器上记录所有将发送给从服务器的语句

 

  • 开启mysqlBin-Log日志

在mysql的配置文件(my.cnf)中,添加下面一行。

log-bin = mysql-bin

我这里没有指定存放路径,默认会存放在mysql的数据存放目录,所有的二进制文件都以mysql-bin开头,当然你也可以自己指定mysql bin-log的存放路径和名称。

保存mysql的配置文件,重启mysql

类别:MySQL | 浏览(42842) | 评论(0) | 阅读全文>>

MySql的Grant命令【原创】

MySQL 赋予用户权限命令的简单格式可概括为:

grant 权限 on 数据库对象 to 用户

 

  • grant  普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。
grant select, insert, update, delete on testdb.* to user@'%'

 

  • grant 创建、修改、删除 MySQL 数据表结构权限。
grant create,alter,drop on testdb.* to user@'192.168.0.%';

 

  • grant 操作 MySQL 外键权限。
grant references on testdb.* to user@'192.168.0.%';

 

  • grant 操作 MySQL 临时表权限。
grant create temporary tables on testdb.* to user@'192.168.0.%';

 

  • grant 操作 MySQL 索引权限。
grant index on testdb.* to user@'192.168.0.%';

 

  • grant 操作 MySQL 视图、查看视图源代码 权限。
grant create routine on testdb.* to user@'192.168.0.%'; 
grant alter  routine on testdb.* to user@'192.168.0.%'; 
grant execute        on testdb.* to user@'192.168.0.%';

 

  • grant 管理某个 MySQL 数据库的权限
grant all privileges on testdb to user@'localhost'

 

类别:MySQL | 浏览(215) | 评论(0) | 阅读全文>>

Nginx负载均衡实例【原创】

  • 网络环境准备

准备六台计算机,一台模拟外网的互联网用户(可以是Linux也可以是Windows),一台模拟Nginx负载均衡服务器(必须是Linux),另四台模拟真实的服务器(Linux)。我们这里使用VMWare安装CentOS5.6作为Nginx负载均衡服务器,另外用VMWare再clone四台CentOS5.6作为Real Server。用WMWare安装windows(我这里用的是windows2003)作为外网的互联网用户,做实验时,请将防火墙关掉。

  • 克隆四台RealServer.

在CentOS5.6关机状态下,进行克隆。右击VM->Manage->Clone->Next....

这里我将3个虚拟机命名为:CentOS5.6.11,CentOS5.6.12,CentOS5.6.13,CentOS5.6.14

  • 给CentOS5.6再添加一块网卡

根据上面的拓扑图可知,CentOS5.6作为LVS服务器,需要两个IP地址,所以我们给这个虚拟机在添加一个网卡。在CentOS5.6启动状态下:VM->Setting->Add->Network Adapter->Next->Finish

  • 设置网卡的连接方式:

将CentOS5.6(LVS)的一块网卡设置为vmnet0,用于与外网通信,一块设置为vmnet1,用于与RealServer通信,windows2003作为外网的互联网用户,网卡设为vmnet0。CentOS5.6.11,CentOS5.6.12,CentOS5.6.13,CentOS5.6.14作为RealServe,网卡都设为vmnet1。我是在Ubuntu上安装的vmware,我的vmware配置如图:

类别:性能优化 | 浏览(152) | 评论(0) | 阅读全文>>