使用环境:CentOS,准备好需要的源码包,这里使用包编译如下:
zlib-1.2.11.tar.gz,pcre-8.39.tar.gz,openssl-1.0.2k.tar.gz
#NGINX编译安装不需要单独编译每个依赖包,记住解包路径即可,这里使用/usr/local/src/
nginx-1.10.2.tar.gz:./configure --prefix=/usr/local/nginx-1.10.2
--with-zlib=/usr/local/src/zlib-1.2.11
--with-pcre=/usr/local/src/pcre-8.39
--with-openssl=/usr/local/src/openssl-1.0.2k
--with-debug
#使用对应模块用with,禁用为without,根据实际引入模块([链接]模块介绍),蓝色为个人常用模块
# 配置邮件模块:
--with-mail 该选项用于启用Mail模块,该模块默认没有被激活
--with-mail_ssl_module 为了代理任何一种类型的使用SSL/TLS的Mail,激活该模块
--without-mail_pop3_module 在启用Mail模块后,单独地禁用pop3模块
--without-mail_imap_module 在启用Mail模块后,单独地禁用imap模块
--without-mail_smtp_module 在启用Mail模块后,单独地禁用smtp模块
#完全禁用http模块:--without--http
--with-http_ssl_module 如果需要对流量进行加密,可以使用该选项,在URLs中开始部分将会是https(需要OpenSSL库)
--with-http_realip_module 如果你的Nginx在七层负载均衡器或者是其他设备之后,它们将http头中的客户端IP地址传递,那么你将会需要启用这个模块。在多个客户处于一个IP地址的情况下使用
--with-http_addition_module 这个模块作为输出过滤器,使你能够在请求经过一个location前或者后时在该location本身添加内容
--with-http_xslt_module 该模块用于处理XML响应转换,基于一个或者多个XSLT格式(需要libxml2和libxslt库)
--with-http_image_filter_module 该模块被作为图像过滤器使用,在将图形投递到客户之前进行处理(需要libgd库)
--with-http_geoip_module 使用该模块,能够设置各种变量以便在配置文件中区段使用,基于地理位置查找客户端IP地址(需要MaxMfind GeoIP库和相应的预编译数据库文件)
--with-http_sub_module 该模块实现了替代过滤,在响应中用一个字符串替代另一个字符串
--with-http_dav_module 启用这个模块将激活使用WebDAV的配置指令。注意:这个模块也只在有需要使用的基础上启用,如果配置不正确,它将带来安全问题。
--with-http_flv_module 如果需要提供Flash流媒体视频文件,那么该模块将会提供伪流媒体
--with-http_mp4_module 这个模块支持H.264/AAC文件伪流媒体
--with-http_gzip_module 当被调用的资源没有.gz结尾格式的文件时,如果想支持发送预压缩版本的静态文件,那么使用该模块
--with-http_gunzio_module 对应不支持gzip编码的客户,该模块用于为客户解压缩预压缩内容
--with-http_random_index_module 如果你想提供从一个目录中随机选择文件的索引文件,那么这个模块需要被激活
--with-http_secure_link_module 该模块提供了一个机制,它会将一个哈希值链接到一个URL中,因此,只有那些使用正确的密码能够计算链接
--with-http_stub_status_module 启用这个模块后会收集Nginx自身的状态信息。输出的状态信息可以使用RRDtool或类似的东西来绘制成图
--with-stream 用于一般的TCP代理和负载均衡
编译nginx后,如果需要添加新的参数,又不想重新安装,可以使用以下方法:
①执行nginx -V出现nginx版本号和之前的编译参数。
②使用对应的源码包然后用原有的编译参数再添加新的需要的编译参数执行./configure,然后make。
③不出现报错的话再源码包的objs目录下会出现加入新参数的nginx,备份原来的nginx然后覆盖。
④使用nginx -t测试新版本是否符合conf语法
nginx的主配置文件在nginx.conf,建议配置前先备份一份nginx.conf.default
nginx.conf在配置块中有对应的层级关系,"{}"花括号要成对出现,以及注意配置指令后需要分号";"
[主配置]
#定义nginx运行的用户和用户组
user nginx nginx;
#nginx进程数[小于CPU总核数的值或auto]
worker_process auto;
#nginx进程最多打开文件符数量[与系统ulimit的值挂钩,大于ulimit无效]
worker_rlimit_nofile 65535;
#错误日志位置和需要记录的错误等级[ debug < info < notice < warn < error < crit]
error_log /path notice;
#pid文件位置
pid /path;
events
{
#工作模式选择,一般选择epoll,其他模式可以自行选择[ kqueue | rtsig | poll | select 等]
use epoll;
#nginx最大连接数[maxclients=worker_process*worker_connections]
worker_connections 65535;
}
[HTTP配置]
http
{
#文件类型映射
include mime.types;
#默认文件类型
default_type application/octet-stream;
#默认编码
charset utf-8;
#关闭显示nginx版本号
server_tokens off;
#启用目录列表访问[用于下载服务器时]
autoindex on;
[日志]
#设置日志 日志名 日志格式
log_format main '$remote_addr $remote_user [$time_local] "$requeset" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
#日志格式:$remote_addr和$http_x_forwarded_for 客户端ip;$remote_user 客户端用户名称;$time_local 访问时间和时区;$request 请求url和协议;$status请求状态;$body_bytes_sent 客户端文件body大小;$http_referer 从哪个链点到达请求页;$http_user_agent 客户端浏览器头
#访问日志记录位置,使用的日志格式,缓冲大小可以不加 [off关闭日志]
access_log /path main buffer=8k;
[传输与缓冲]
#连接超时时间
keepalive_timeout 60;
#客户端响应超时时间
send_timeout 15;
#数据包中发送所有http响应文件
tcp_nopush on;
#分段发送,不缓存数据
tcp_nodelay on;
#下载等对服务器磁盘负载高的off[可存在http,server,location中起不同位置的配置]
sendfile on;
#以下参数按照需求优化
#服务器名字hash表大小[虚拟主机多的时候才需要调整]
server_names_hash_bucket_size 128;
#服务器接受头文件大小限制
client_header_buffer_size 16k;
#服务器接受表单提交,文件上传的buffer大小设置
client_body_buffer_size 32k;
#服务器可接受用户请求body大小
client_max_body_size 8m;
#处理从用户来的大文件头请求的缓存的最大数量和大小
large_client_header_buffers 4 64k;
#请求头文件超时时间
client_head_timeout 10;
#请求主体文件超时时间
client_body_timeout 10;
#关闭不响应的客户端连接
reset_timeout_connection on;
[gzip压缩 ngx_http_gzip_static_module模块]
#启用gzip压缩
gzip on;
#文件压缩的最小大小[过小的文件启用压缩浪费资源]
gzip_min_length 1k;
#设置压缩缓冲
gzip_buffers 4 16k;
#压缩等级[可选1-9,9压缩最高,节约单宽但是CPU消耗大,一般4或5]
gzip_comp_level 5;
#gzip版本[默认1.1]
gzip_http_version 1.0
#IE6版本不使用压缩
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
#启用gzip的类型[默认自带text/html]
gzip_types text/plain text/css text/xml text/javascript image/gif image/jpeg application/x-javascript application/xml;
#根据请求头文件包含关键字启用压缩[ expired | no-cache | no-store | private | no_last_modified | no_etag | auth ],off不启用,any为一直启用
gzip_proxied expired no-cache no-store private auth;
#前端缓存服务器缓存经过压缩的页面
gzip_vary on;
[负载均衡 ngx_http_upstream_module模块]
#在虚拟主机配置里介绍负载均衡的调用,这里介绍不同的负载均衡策略
#先定义负载均衡服务器列,命名这个列的名称
upstream ip_hash[ip_hash策略]
{
#根据ip的hash结果分配,不同ip访问固定服务器
ip_hash;
#对应不同的服务器ip或端口[也可以使用域名或socket],下同
server ip:port;
server ip:port;
.......
}
upstream weight[权重策略]
{
#根据weight值来分配,weight值越高越容易被访问到
server ip:port weight=10;
server ip:port weight=5;
......
}
#server可以携带的参数[ fail_timeout 请求失败后暂停服务时间,max_fails 允许最大请求失败次数,和down或backup(down为不参与负载均衡;backup为其他服务器均繁忙时才会被访问,不可共存)]
server ip:port max_fail=2 fail_timeout=30;
[反向代理 ngx_http_proxy_module模块]
#代理连接超时时间
proxy_connect_timeout 5;
#代理发送超时时间
proxy_send_timeout 5;
#代理接收超时时间
proxy_read_timeout 5;
#代理保存头信息缓冲区大小
proxy_buffer_size 16k;
#代理缓冲区
proxy_buffers 4 32k;
#繁忙时缓冲区大小
proxy_busy_buffers_size 64k;
#代理缓存文件夹大小
proxy_temp_file_write_size 64k;
#代理缓存目录[levels 设置缓存目录层次;keys_zone 设置缓存名和共享内存大小;inactive 指定时间内无人访问则清除;max_size 最大缓存空间]
proxy_cache_path /path levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=1g;
#代理临时缓存文件路径[与目录同一分区]
proxy_temp_path /path
[虚拟主机配置]
server
{
#监听端口
listen 80;
#站点对应域名
server_name hostname;
[location配置]
#使用location对url进行匹配后执行对应操作
location /
{
#访问路径[相对上面nginx路径,下同]
root html;
#首页文件[按照顺序检索,下同]
index index.html index.htm;
}
#将php文件转发给fastCGI处理[本地php];
location ~ \.php$
{
root /path;
#转发给对应端口处理,php-fpm使用9000端口
fastcgi_pass 127.0.0.1:9000;
#php首页文件
fastcgi_index index.php;
#调整解析的文件位置
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#读取fastcgi设置文件
include fastcgi_params;
}
#如果需要nginx处理静态类型文件
location ~ .*\.(html | htm | gif | jpg | jpeg | bmp | png | ico | txt | js | css )$
{
root /path;
#设置缓存时间(d为天数,h为小时数)
expires 10d;
}
#定义错误返回页,错误代码,路径
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html
{
root /path;
}
#禁止访问.ht页面
location ~ /\.ht
{
#拒绝所有[白名单设置用allow]
deny all;
}
#负载均衡的调用,这里匹配url为/页面
location /
{
proxy_pass http://负载均衡列表名;
#设置后端服务器获取用户真实ip;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}