CentOS下nginx安装

1.最小化安装的CentOS没有安装gcc,首先安装gcc、g++和c++库;

1
yum -y install gcc-c++

2.安装pcre库,pcre库是为了使nginx支持http rewrite模块;

1
2
3
4
5
6
7
cd /usr/local/
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.35.tar.gz
tar -zxvf pcre-8.35.tar.gz
cd pcre-8.35
./configure
make
make install

3.安装nginx,选择 Nginx 安装到 /usr/local/nginx 目录下;

1
2
3
4
5
6
7
cd /usr/local/
wget http://nginx.org/download/nginx-1.2.8.tar.gz
tar -zxvf nginx-1.6.2.tar.gz
cd nginx-1.6.2
./configure –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_gzip_static_module
make
make install

–with-http_stub_status_module可以启动Nginx的NginxStatus功能,以监控Nginx的当前状态。

4.启动nginx 确保系统的 80 端口没被其他程序占用;

1
/usr/local/nginx/sbin/nginx

启动报错

1
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

解决:

1
2
3
4
5
ls /lib/ |grep pcre
libpcre.so.0
libpcre.so.0.0.1
#添加软连接
ln -s /lib/libpcre.so.0.0.1 /lib/libpcre.so.1

检查是否启动成功: netstat -ano|grep 80 有结果输入说明启动成功 打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。

5./usr/local/nginx/config/nginx.conf配置文件详解:
Nginx的全局属性配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#定义Nginx运行的用户和用户组
user nobody nobody;
#nginx进程数,建议设置为等于CPU总核心数。
worker_processes 4;
#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ],其中debug输出的日志最为详细,而crit输出日志最少
error_log /var/log/nginx/error.log info;
#进程文件,指定进程id的存储文件位置
pid /var/run/nginx.pid;
#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。
worker_rlimit_nofile 65535;
#工作模式与连接数上限
events
{
# 参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; 其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
use epoll;
#单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections 65535;
}

6.http服务器配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
http{
#设定mime类型,类型由mime.type文件定义
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;
#设置来自客户端请求头的headerbuffer大小,即缓存区大小
client_header_buffer_size 32K;
#用来指定客户端请求中较大的消息头的缓存最大数量和大小,4为个数,32k为大小,最大缓存432K
large_client_header_buffers 4 32k;
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件
#对于普通应用,必须设为 on,用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
#tcp_nopush和tcp_nodely两个指令设置为on,用于防止网络阻塞
Sendfile on;
tcp_nopush on;
tcp_nodelay on;
#用于设置客户端连接保持活动的超时时间,超过这个时间,服务器会关闭该连接
keepalive_timeout 60;
#设置客户端请求头读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误
client_header_timeout 10;
#设置客户端请求主体读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误,默认值是60
client_body_timeout 10;
#指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接
send_timeout 10;

6.HttpGzip模块配置
下面配置Nginx的HttpGzip模块。这个模块支持在线实时压缩输出数据流。要查看是否安装了此模块,需要使用下面的命令:

1
2
3
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/0.7.65
configure arguments: –with-http_stub_status_module –with-http_gzip_static_module –prefix=/opt/nginx

通过/usr/local/nginx/sbin/nginx -V命令可以查看安装Nginx时的编译选项,由输出可知,我们已经安装了HttpGzip模块。
下面是HttpGzip模块在Nginx配置中的相关属性设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#用于设置开启或者关闭gzip模块,“gzip on”表示开启GZIP压缩,实时压缩输出数据流
gzip on;
#设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,不管页面多大都进行压缩。建议设置成大于1K的字节数,小于1K可能会越压越大。
gzip_min_length 1k;
#表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
gzip_buffers 4 16k;
#用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可
gzip_http_version 1.1;
#用来指定GZIP压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理最慢,也比较消耗cpu资源
gzip_comp_level 2;
#用来指定压缩的类型,无论是否指定,“text/html”类型总是会被压缩的
gzip_types text/plain application/x-javascript text/css application/xml;
#让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过Nginx压缩的数据
gzip_vary on;

7.StubStatus模块

1
2
3
4
5
6
7
8
9
10
11
12
location /NginxStatus {
#stub_status为“on”表示启用StubStatus的工作机制
stub_status on;
#access_log用来指定StubStatus模块的访问日志文件,“off”为关闭,开启加路径
access_log off;
#access_log logs/NginxStatus.log;
#访问控制
allow all;
#auth_basic是Nginx的一种认证机制,auth_basic_user_file用来指定认证密码
#auth_basic “Nginxstatus”;
#auth_basic_user_file ../htpasswd;
}