分享

运维

 holiday98 2014-07-31

Nginx

环境说明:
版本:1.0.4 ,操作系统:CentOS 5.5 X86

Nginx 安装

安装nginx所依赖的软件包:

yum -y install pcre-devel openssl openssl-devel

下载并安装nginx1.0.4

wget http://10.21.0.212/software/nginx-1.0.4.tar.gz
cd /tmp
wget http://yum/software/nginx-1.0.4.tar.gz
tar -zxvf nginx-1.0.4.tar.gz
cd nginx-1.0.4
yum -y install pcre-devel openssl openssl-devel
# ./configure --prefix=/opt/nginx --with-http_stub_status_module --with-http_ssl_module  #安装监控模块  ,安装SSL模块
./configure --prefix=/opt/nginx --with-http_stub_status_module  #修改nginx的安装路径
make
make install

启动:/usr/local/nginx/sbin/nginx
停止:/usr/local/nginx/sbin/nginx -s stop
重载:/usr/local/nginx/sbin/nginx -s reload

Nginx增加对socket连接的支持

nginx默认并不支持对socket连接的转发,需要安装新的模块,模块地址:

https://github.com/yaoweibin/nginx_tcp_proxy_module

安装tcp_proxy_modules

     $ wget 'http:///download/nginx-1.2.1.tar.gz'
        $ tar -xzvf nginx-1.2.1.tar.gz
        $ cd nginx-1.2.1/
        $ patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch
        $ ./configure --add-module=/path/to/nginx_tcp_proxy_module --prefix=/opt --with-http_stub_status_module
        $ make
        $ make install

在配置文件的最上加上:

tcp {
      upstream websocket {
          server 10.23.4.166:9991;
          #server 192.168.0.3:9991;
          check interval=3000 rise=2 fall=5 timeout=1000;
      }
      server {
           listen 9990;
           proxy_pass websocket;
      }
}

注意:

You can't use the same listening port with HTTP modules.

Nginx 启用gzip

这个模块支持在线实时压缩输出数据流

gzip

语法: gzip on|off
默认值: gzip off
作用域: http, server, location, if (x) location
开启或者关闭gzip模块

gzip_buffers

语法: gzip_buffers number size
默认值: gzip_buffers 4 4k/8k
作用域: http, server, location
设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k    代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k    代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。
如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。

gzip_comp_level

语法: gzip_comp_level 1..9
默认值: gzip_comp_level 1
作用域: http, server, location
gzip压缩比,1 压缩比最小处理速度最快,9 压缩比最大但处理最慢(传输快但比较消耗cpu)。

gzip_min_length

语法: gzip_min_length length
默认值: gzip_min_length 0
作用域: http, server, location
设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。
默认值是0,不管页面多大都压缩。
建议设置成大于1k的字节数,小于1k可能会越压越大。 即: gzip_min_length 1024

gzip_http_version

语法: gzip_http_version 1.0|1.1
默认值: gzip_http_version 1.1
作用域: http, server, location
识别http的协议版本。由于早期的一些浏览器或者http客户端,可能不支持gzip自解压,用户就会看到乱码,所以做一些判断还是有必要的。 注:21世纪都来了,现在除了类似于百度的蜘蛛之类的东西不支持自解压,99.99%的浏览器基本上都支持gzip解压了,所以可以不用设这个值,保持系统默认即可。

gzip_proxied

语法: gzip_proxied [off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any] …
默认值: gzip_proxied off
作用域: http, server, location
Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含”Via”的 header头。
off – 关闭所有的代理结果数据的压缩
expired – 启用压缩,如果header头中包含 “Expires” 头信息
no-cache – 启用压缩,如果header头中包含 “Cache-Control:no-cache” 头信息
no-store – 启用压缩,如果header头中包含 “Cache-Control:no-store” 头信息
private – 启用压缩,如果header头中包含 “Cache-Control:private” 头信息
no_last_modified – 启用压缩,如果header头中不包含 “Last-Modified” 头信息
no_etag – 启用压缩 ,如果header头中不包含 “ETag” 头信息
auth – 启用压缩 , 如果header头中包含 “Authorization” 头信息
any – 无条件启用压缩

gzip_types

语法: gzip_types mime-type [mime-type ...]
默认值: gzip_types text/html
作用域: http, server, location
匹配MIME类型进行压缩,(无论是否指定)”text/html”类型总是会被压缩的。
注意:如果作为http server来使用,主配置文件中要包含文件类型配置文件
http {
          include        conf/mime.types;
          ........
     }

gzip_vary

syntax: gzip_vary on|off
default: gzip_vary off
context: http, server, location
Enables response header of “Vary: Accept-Encoding”. Note that this header causes IE 4-6 not to cache the content due to a bug

列子:

gzip  on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types       text/plain text/javascript application/x-javascript text/css application/xml;
gzip_vary on;

可以通过网页gzip检测工具来检测网页是否启用了gzip http://gzip./

Nginx 添加模块

原已经安装好的nginx,现在需要添加一个未被编译安装的模块,

查看原来编译时都带了哪些参数

 /usr/local/nginx/sbin/nginx -V   

添加的参数:

--with-http_stub_status_module 

1、使用参数重新配置:

./configure --with-http_stub_status_module

2、 编译:

make  #不要make install,否则就是覆盖安装

3. 替换nginx二进制文件:

cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak 
cp ./objs/nginx /usr/local/nginx/sbin/nginx

配置文件优化

worker_processes 2;

nginx进程数,建议按照cpu数目来指定,一般为它的倍数。
worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。

worker_cpu_affinity 01 10;

为每个进程分配cpu,上例中将2个进程分配到2个cpu,当然可以写多个,或者将一个进程分配到多个cpu。
2核是 01,四核是0001,8核是00000001,有多少个核,就有几位数,1表示该内核开启,0表示该内核关闭

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

use epoll;

  linux下nginx采用epoll事件模型,处理效率高

参考文档:http://hi.baidu.com/zouqone/item/e06ff398e4bc9dd31b49dfb3 

worker_connections 65535;

  每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。

keepalive_timeout 60;

  keepalive超时时间,单位为秒。

以下参数不是很清楚作用,可选项

client_header_buffer_size 4k;
  客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
open_file_cache max=102400 inactive=20s;
  这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
open_file_cache_valid 30s;
  这个是指多长时间检查一次缓存的有效信息。
open_file_cache_min_uses 1;
  open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除

http 之前的配置文件
#user  nobody;
worker_processes  2;

worker_cpu_affinity 01 10 ;

worker_rlimit_nofile 65535;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    use epoll;
    worker_connections  65535;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多