一、Nginx简介

开发机上安装了VS6.0/2008/2010/2013,之前一直是正常的,突然莫名其妙不能以管理员身份运行(除了VS6),报“application
cannot
start.”,网上的方法包括恢复还原点、MSDN上微软的负责VS项目的PM的walkaround(devenv.exe
/resetuserdata)都试过,均不奏效,问题依旧。后用dbgview监视触发,发现有个叫QQSHELLEXTENSION的在作怪,不久前应QQ安装了个视频播放器插件,怀疑是这个原因。于是把QQ卸载,用VS2013安装盘恢复后,重启系统,一切正常。这个问题折腾了3个小时,差点就准备重装系统了!

  1. TDD通过边测试边编写代码,然后重构来防止重构所引起的错误
  2. 通过自动化测试和持续集成工具,随时保持可以发布
  3. TDD第一步:

     1. 需求分解
     2. 将需求转化成测试
     3. 写一个失败的测试
     4. 逐步通过测试,再写一个测试
     5. 开始消除重复代码 (由于这个时候有测试在了,所以不用担心更改会引起集成错误)
    

    ### 看到这里感觉在国内公司已经很难实现这个了,因为时间很难让你去做这些事情

  4. 交互测试,并不验证结果的正确性,而是验证代码与其协作对象的交互行为的正确性

  5. 重构代码的时候不要直接用调试器调试,而是要把代码分为一个严格地软件开发活动

    1. 确定变更点
    2. 确定测试点
    3. 覆盖测试点
    4. 修改代码
    5. 重构代码

    ### 先分析程序再写测试再重构,以前都搞反了,先重构再写测试所以很难去保证重构后代码正确,因为思维方向就不对,先重构再测试时按照自己的思路来写测试,更倾向于为了通过测试而写测试,而 先测试再重构思路更倾向于根据业务来进行测试

  6. 数据库测试,增量式DDL脚本。一次只添加一个列或者一张表,每个步骤都可以回滚

  7. 数据库测试使用脚本或者其他方法添加进数据,然后进行测试

 
 Nginx是一款开源代码的高性能HTTP服务器和反向代理服务器,同时支持IMAP/POP3/SMTP代理服务

1.Nginx工作原理

     
 Nginx由内核和模块组成,完成工作是通过查找配置文件将客户端请求映射到一个location
block(location是用于URL匹配的命令),location配置的命令会启动不同模块完成工作。

     
 Nginx模块分为核心模块,基础模块和第三方模块。

     
     核心模块:HTTP模块、EVENT模块(事件)、MAIL模块。

     
     基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块、HTTP
Rewrite模块。

     
     第三方模块:HTTP Upstream Request Hash模块、Notice模块、HTTP Access
Key模块。

2.性能优势

     
 web服务器,处理静态文件、索引文件以及自动索引效率高。

     
 代理服务器,快速高效反向代理,提升网站性能。

     
 负载均衡器,内部支持Rails和PHP,也可支持HTTP代理服务器,对外进行服务。同时支持简单容错和利用算法进行负载均衡。

     
 性能方面,Nginx专门为性能设计,实现注重效率。采用Poll模型,可以支持更多的并发连接,并在大并发时占用很低内存。

     
 稳定性方面,采用分阶段资源分配技术,使CPU资源占用率低。

     
 高可用性方面,支持热备,启动迅速。

二、配置文件详解

Nginx配置文件(/usr/local/nginx/conf/nginx.conf)

配置文件主要包括全局配置,I/O事件配置和HTTP配置这三大块内容,配置语句的格式“关键字
     值;”(末尾以分号表示结束),以“#”开始的部分表示注释。

1)全局配置

#Nginx的worker进程运行用户以及用户组

#user 
nobody nobody;

#Nginx开启的进程数

worker_processes 
1;

#worker_processes
auto;

#以下参数指定了哪个cpu分配给哪个进程,一般来说不用特殊指定。如果一定要设的话,用0和1指定分配方式.

#这样设就是给1-4个进程分配单独的核来运行,出现第5个进程是就是随机分配了。eg:

#worker_processes
4     #4核CPU

#worker_cpu_affinity
0001 0010 0100 1000

   
   

#定义全局错误日志定义类型,[debug|info|notice|warn|crit]

#error_log 
logs/error.log  info;

#指定进程ID存储文件位置

#pid       
logs/nginx.pid;

#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit
-n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit
-n的值保持一致。

#vim
/etc/security/limits.conf


*                soft    nproc          65535


*                hard    nproc          65535


*                soft    nofile         65535


*                hard    nofile         65535

worker_rlimit_nofile
65535;

2)事件配置

1.
events {

#use
[ kqueue | rtsig | epoll | /dev/poll | select | poll ];
epoll模型是Linux
2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。

use
epoll;

#每个进程可以处理的最大连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。理论值:worker_rlimit_nofile/worker_processes

#注意:最大客户数也由系统的可用socket连接数限制(~
64K),所以设置不切实际的高没什么好处

worker_connections 
65535;   

#worker工作方式:串行(一定程度降低负载,但服务器吞吐量大时,关闭使用并行方式)

#multi_accept
on;

 
}

3)http参数

#文件扩展名与文件类型映射表

include
mime.types;

#默认文件类型

default_type
application/octet-stream;

 

#日志相关定义

#log_format 
main  ‘$remote_addr – $remote_user [$time_local] “$request”

#                 
‘$status $body_bytes_sent “$http_referer” ‘

#                 
‘”$http_user_agent” “$http_x_forwarded_for”‘;

#定义日志的格式。后面定义要输出的内容。

#1.$remote_addr
与$http_x_forwarded_for 用以记录客户端的ip地址;

#2.$remote_user
:用来记录客户端用户名称;

#3.$time_local
:用来记录访问时间与时区;

#4.$request 
:用来记录请求的url与http协议;

#5.$status
:用来记录请求状态;

#6.$body_bytes_sent
:记录发送给客户端文件主体内容大小;

#7.$http_referer
:用来记录从那个页面链接访问过来的;

#8.$http_user_agent
:记录客户端浏览器的相关信息

#连接日志的路径,指定的日志格式放在最后。

#access_log 
logs/access.log  main;

#只记录更为严重的错误日志,减少IO压力

 error_log
logs/error.log crit;

#关闭日志

#access_log 
off;

#默认编码

#charset
utf-8;

#服务器名字的hash表大小

 server_names_hash_bucket_size
128;

#客户端请求单个文件的最大字节数

 client_max_body_size
8m;

#指定来自客户端请求头的hearerbuffer大小

 client_header_buffer_size
32k;

#指定客户端请求中较大的消息头的缓存最大数量和大小。

large_client_header_buffers
464k;

#开启高效传输模式。

sendfile       
on;

#防止网络阻塞

tcp_nopush
on;

tcp_nodelay
on;    

#客户端连接超时时间,单位是秒

keepalive_timeout
60;

#客户端请求头读取超时时间

client_header_timeout
10;

#设置客户端请求主体读取超时时间

client_body_timeout
10;

#响应客户端超时时间

send_timeout
10;

#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。

fastcgi_connect_timeout
300;

fastcgi_send_timeout
300;

fastcgi_read_timeout
300;

fastcgi_buffer_size
64k;

fastcgi_buffers
464k;

发表评论

电子邮件地址不会被公开。 必填项已用*标注