本文主要针对Nginx的安装与详细配置介绍
注意:有些配置如果有web底子 应该好理解 如 请求头 超时时间 等
这些都是http协议里的基本知识,当然没有也没关系
本配置 只能供学习使用,如果是生产环境还需要根据自己的情况 修改配置
1. 安装Nginx所需要的pcre-devel库
tar -xvf pcre-8.02.tar.gz
cd pcre-8.02
make && make install
cd /lib64
ln -s libpcre.so.0.0.1 libpcre.so.1
如果不做这个链接的话 启动nginx会报错 就是找不到这个libpcre.so.1
2. 安装Nginx-1.2.5
tar -xvf nginx-1.2.5.tar.gz
cd nginx-1.2.5
./configure --prefix=/usr/local/nginx \ 指定nginx的安装目录
--with-http_stub_status_module \ 启用nginx的status功能,可以监控nginx当前状态
--with-http_gzip_static_module \ 支持在线实时压缩输出数据流
--with-google_perftools_module \ 支持TCMalloc对Nginx性能的优化
make && make install
这里安装了TCMalloc模块来对Nginx优化 所以要先安装这个开源工具,请看:
http://yanzhe.blog.51cto.com/blog/5279577/1182055
安装完成后,再回头来编译。
3. 配置Nginx 详细介绍
修改Nginx安装目录的conf/nginx.conf 文件
vi /usr/local/nginx/conf/nginx.conf
3.1 Nginx的全局配置
user nobody nobody; 指定了Nginx Worker进程运行用户及用户组,此处是默认值
worker_processes 4; 指定了Nginx开启的进程数,如果多核CPU,就设置与CPU的核心数量一样多
error_log logs/error.log notice; 定义了全局错误日志 级别为notice
pid logs/nginx.pid; 指定了nginx进程id存储文件的位置
worker_rlimit_nofile 65535; 用于绑定worker进程和CPU
events{ 用来设定Nginx的工作模式以及连接数上限
use epoll; Nginx的工作模式,对于linux系统 epoll模式为首选
worker_connections 60000; 每个进程的最大连接数 下面公式:
} max_clients=processes*connections
最大连接数=进程数*每个进程最大连接数
在作为反向代理时 还要除以4
进程的最大连接数受linux系统进程的最大打开文件数限制,在执行操作系统命令ulimit -n 60000 后
worker_connections的设置才能生效。
3.2 Nginx对HTTP服务器相关属性配置
http{
include conf/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
log_format download '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_range" "$sent_http_content_range"';
client_max_body_size 20m;
client_header_buffer_size 32k;
large_client_header_buffers 4 64k;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60;
client_header_timeout 10;
client_body_timeout 10;
send_timeout 10;
}
下面详细介一下以上配置的意思:
include 将外部的文件引入,减少主配置文件的复杂度
default_type 默认类型为二进制流
log_format 指定了Nginx日志的输出格式
client_max_body_size 允许客户端请求的最大的单个文件字节数
client_header_buffer_size 客户端请求头headerbuffer大小
large_client_header_buffers 客户端请求中较大的消息头的 个数 与 大小
sendfile 开启了高效文件传输模式
tcp_nopush 设置为on 防止网络阻塞
tcp_nodelay 设置为on 防止网络阻塞
keepalive_timeout 客户端连接保持活动的超时时间 超时后服务器关闭连接
client_header_timeout 客户端请求头超时时间 超时后Nginx返回Request time out(408)错误
client_body_timeout 客户端请求主体超时时间 超时后Nginx返回Request time out(408)错误
send_timeout 两个连接活动之间的时间,如果超过这个时间客户端没任何活动,Nginx将会关闭连接
3.3 HTTP GZIP模块配置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_very on;
下面详细介绍一下以上配置的意思:
gzip 设置开启gzip压缩,实时压缩输出数据流
gzip_min_length 允许压缩的页面最小值,页面字节数从header头的Content-Length中获取
建议设置成大于1K的字节数,小于1K可能会越压缩越大
gzip_buffers 申请 4个 单位 为16k的内存作为压缩结果流缓存
gzip_http_version 设置识别HTTP协议版本 默认1.1 几乎所有浏览器都支持gzip压缩
gzip_comp_level 指定gzip的压缩比例 数值越小 压缩比越小 处理速度也快,反之越慢 也消耗CPU
gzip_types 用来指定压缩的类型
gzip_vary 开启前段的缓存服务器缓存经过gzip压缩的页面
3.4 负载均衡配置
upstream tomcats{
ip_hash;
server 192.168.1.100:8080;
server 192.168.1.101:8080 down;
server 192.168.1.102:8080 max_fails=3 fail_timeout=20s;
}
下面详细介绍一下以上配置的意思:
Nginx的负载均衡模块目前支持4种调度算法,其中 后两项属于第三方调度算法
轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端有宕机,系统将自动剔除,不影响
Weight 指定轮询的权值,Weight值越大 分配到的访问几率越高,应用于后端服务器性能不均的情况
ip_hash 来自同一个IP的访客将固定访问一个服务器,解决了动态网页存在session的问题
fair 根据页面大小和加载时间长短进行负载均衡,Nginx本身不支持fair,需要下载upstream_fair模块
url_hash 每个URL定向到同一个服务器,可以进一步提高缓存服务器的效率 也必须安装Nginx的hash软件包
负载均衡调度中的状态:
down,表示当前的server暂时不参与负载均衡
backup,预留备份机器,其他所有的非backup机器出现故障或者繁忙的时候,才会请求backup机器
max_fails 允许请求失败的次数 超过最大次数,返回proxy_next_upstream
fail_timeout 经理了max_fails次数失败后,暂停服务的时间 两个状态可以一起用
注意:在ip_hash调度时,负载均衡调度状态不能是weight 和backup
3.5 server虚拟主机的配置
server{
listen 8080; 端口根据自己后端服务器情况而定 可以是80(apache或者nginx),8080(tomcat或者resin)
也可以自定义 因为服务端口可以修改
server_name 192.168.1.100 www.abc.com; 可以是IP 也可以通过域名
index index.html index.htm index.jsp; 设定访问默认首页的地址
root /www/abc 虚拟机的网页根目录
charset gb2312; 用于设置网页的编码格式
access_log logs/abc.access.log main; 访问日志存放路径 用main指定输出格式
}
3.6 URL 匹配的详细配置
location 支持正则表达式,也支持条件判断,用户可以通过location实现动静态分离
所有静态文件(html jpg)等都留下来自己处理 所有jsp动态文件交予tomcat处理
所有扩展名为.gif、.jpg、.png、,swf的静态文件都交给Nginx处理
location ~ .*\.(gif|jpg|png|swf)$ {
root /web/abc; 网站根目录
expires 30d; 指定静态文件的过期时间 这里是30天
}
将网站根目录下的 upload目录 和 html目录 下的所有文件都交给nginx处理
location ~ ^/(upload|html)/ {
root /web/abc; 网站根目录
expires 30d; 指定静态文件的过期时间 这里是30天
}
将虚拟主机下的所有.jsp后缀名的文件都交给本机的8080端口处理
location ~ .*.jsp$ {
index index.jsp;
proxy_pass http://localhost:8080;
}
3.7 错误信息返回页面配置
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html; 指定 返回错误后 从哪找错误页面
}