admin 管理员组文章数量: 887629
2023年12月23日发(作者:file是什么类型)
Ngix实战篇 安装部署与配置全解析
Nginx实战篇
安装部署与配置全解析
TRS 王纯刚2011/03/25 出品
Ngix实战篇 安装部署与配置全解析
目录
1 写在正文之前 ....................................................................................................................... 3
2 部署步骤 ............................................................................................................................... 3
2.1 下载介质 ....................................................................................................................... 3
2.2 编译部署介质 ............................................................................................................... 4
2.2.1 部署zlib库 ......................................................................................................... 4
2.2.2 部署pcre库 ......................................................................................................... 4
2.2.3 部署nginx ............................................................................................................ 4
2.2.4 启动和停止nginx ................................................................................................ 5
2.3 配置nginx .................................................................................................................... 5
2.3.1 配置gzip压缩 ..................................................................................................... 6
2.3.2 高性能配置 ........................................................................................................... 6
2.3.3 配置nginx状态监控 ........................................................................................... 7
2.3.4 反向代理实现动静结合(NgInx + Tomcat / WebLogic / WebSphere ) ....... 7
2.3.5 配置虚拟主机 ....................................................................................................... 8
2.3.6 配置静态文件超时时间 ....................................................................................... 9
2.3.7 配置日志格式与按天轮换 ................................................................................... 9
2.4 其它配置 ..................................................................................................................... 10
2.4.1 禁止出错时泄露服务器的版本 ......................................................................... 10
2.4.2 限制客户端POST提交的数据大小 ................................................................... 10
2.4.3 静态目录root和alias的区别 ....................................................................... 11
2.4.4 4.限制并发数和下载速率 ................................................................................. 11
2.4.5 指定nginx提供服务的用户: ......................................................................... 11
2.4.6 指定错误页 ......................................................................................................... 11
2.5 高级配置 ..................................................................................................................... 11
2.5.1 利用Nginx实现开源负载均衡的分发 ............................................................. 11
2.5.2 利用Nginx实现静态文件的权限控制 ............................................................. 12
TRS 王纯刚2011/03/25 出品
Ngix实战篇 安装部署与配置全解析
1 写在正文之前
最近质保在计划做Portal的性能测试,考虑到在国家统计局项目前期规划到2000多并发的PV情况下面,静态文件的压力会超过10000。
根据对Nginx的介绍,Nginx的性能和Apache相比,会有100%的提升。原因:
得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。 目前Linux下能够承受高并发访问的Squid、Memcached都采用的是epoll网络I/O模型。
所以计划对主流的Web Server进行对比性能测试,特引入Nginx进行配置,在测试环境中现场实战了一次,特将过程记录总结如下。
注:在真正性能测试结束时,再给出各个Web Server的性能对比结果,欢迎大家持续关注。
2 部署步骤
2.1 下载介质
NgInx部署之前,首先根据项目的需要选择需要安装的组件,实际环境一般会考虑需要支持gzip压缩和rewrite模块。所以安装的第一步是下载Ngix及Ngix的相关组件。
Nginx本身
下载地址:/en/
建议下载最新版本介质,目前最新的是:0.9.6
gzip压缩依赖库:zlib
下载地址:/
我下载的版本是:Version 1.2.5
Rewrite模块的正则表达式依赖库:pcre
pcre库简称:Perl兼容正则表达式 (Perl Compatible Regular Expressions)库。关于正则表达式的写法可以参考附件《perlre - perldoc_perl_》
下载地址:/
我下载的版本是:pcre-8.02
TRS 王纯刚2011/03/25 出品
Ngix实战篇 安装部署与配置全解析
2.2 编译部署介质
2.2.1 部署zlib库
执行Linux命令解压缩后编译安装:
tar -zxvf
./configure
make
make install
默认安装到/usr/local/lib下即可。
安装完成后可以ls -l /usr/local/lib/查询是否安装成功,安装成功后,通过ls可以提示文件已经存在。
2.2.2 部署pcre库
执行Linux命令解压缩后编译安装:
tar -zxvf
./configure
make
make install
默认安装到/usr/local/lib下即可,安装完成后可以ls -l /usr/local/lib/查询是否安装成功
2.2.3 部署nginx
1. 解压缩介质:tar -zxvf
2. 编译./configure --prefix=/opt/nginx --with-poll_module
with-http_stub_status_module
需要关注编译的日志
checking for epoll ... found 代表找到了高效的poll模式
checking for PCRE library ... found 代表找到了pcre库
checking for zlib library ... found 代表找到了zlib库
如果后面需要用到状态监控,需要加上 -with-http_stub_status_module
3. 用make来安装:
make
make install
4. 验证nginx是否部署成功
cd /opt/nginx/sbin
./nginx
–TRS 王纯刚2011/03/25 出品
Ngix实战篇 安装部署与配置全解析
netstat -ano | grep 80 | grep nginx,看到nginx在80端口处于监听状态,代表配置成功。
部署的两点注意:
1.在kernel>2.6的情况下面,推荐使用poll模式
2.偷懒的情况,可以创建一个软链接到/usr/sbin下
ln -s /opt/nginx/sbin/nginx /usr/sbin/nginx
2.2.4 启动和停止nginx
启动
cd /opt/nginx/sbin
./nginx
停止
./nginx -s stop
重新启动
./nginx –s reload
一点小知识:
查看Web请求的部分信息(推荐用httpwatch 某些情况用不了的时候直接Linux命令)
curl --head 127.0.0.1:81
HTTP/1.1 200 OK
Server: nginx/0.9.6
Date: Wed, 23 Mar 2011 07:29:24 GMT
Content-Type: text/html
Content-Length: 151 Last-Modified: Wed, 23 Mar 2011 06:11:44 GMT
Connection: keep-alive
Accept-Ranges: bytes
2.3 配置nginx
nginx配置文件存在安装目录的conf,如/opt/nginx/conf/下。
配置文件修改后,可用nginx -t来进行测试
TRS 王纯刚2011/03/25 出品
Ngix实战篇 安装部署与配置全解析
2.3.1 配置gzip压缩
配置Gzip压缩,在配置文件中加入:
gzip on;
gzip_min_length 1024;
gzip_buffers 4 8K;
gzip_types text/plain application/x-javascript text/xml text/css text/html application/xml;
每个命令详解如下:
zip_min_length
设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。 默认值是0,不管页面多大都压缩。 建议设置成大于1k的字节数,小于1k可能会越压越大。
gzip_types
配置需要压缩的请求的Content-Type类型,对符合指定类型的请求启用gzip压缩。
gzip_buffers
设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。
2.3.2 高性能配置
设置工作的进程数
worker_processes 5;
设置后重新启动Nginx,可以查看到后台进程:
[root@test217 html]# ps -ef | grep nginx
root 31930 1 0 15:00 ? 00:00:00 nginx: master process nginx
nobody 31931 31930 0 15:00 ? 00:00:00 nginx: worker process
nobody 31932 31930 0 15:00 ? 00:00:00 nginx: worker process
nobody 31933 31930 0 15:00 ? 00:00:00 nginx: worker process
nobody 31934 31930 0 15:00 ? 00:00:00 nginx: worker process
nobody 31935 31930 0 15:00 ? 00:00:00 nginx: worker process
指定事件响应模式为为高效的poll模式
events {
use epoll;
worker_connections 1024;
}
TRS 王纯刚2011/03/25 出品
Ngix实战篇 安装部署与配置全解析
2.3.3 配置nginx状态监控
在配置文件中增加:
location /NginxStatus {
stub_status on;
}
重新启动Nginx,通过浏览器访问192.9.100.217/NginxStatus,就可以看到状态监控页面。
状态监控结果详细解读:
Active connections: 2
当前nginx正处理的活动连接数
server accepts handled requests 3 3 10
总共处理了3次连接,成功创建了3次连接,共请求了10次。总连接数-成功连接数为失败连接数
Reading: 0 Writing: 1 Waiting: 1
reading nginx读取到客户端的header信息数
Writing nginx返回给客户端的Header信息数
Waiting 开启keep-alive的情况下,这个值等于active-(reading+writing), 意思指nginx已经处理完正在等候下一次请求的驻留连接
2.3.4 反向代理实现动静结合(NgInx + Tomcat / WebLogic /
WebSphere )
1. 通过location来区分动静文件;
静态文件,在配置文件中增加:
location /portal {
root /home/trs/wchg/wwwhome/;
}
注意:这里有个陷阱,就是root的目录是指portal目录的父目录
2. 动态文件转发给应用服务器
动态文件通过正则表达式区分,所以需要配置pcre库,在配置文件中增加:
location ~ ^/wcm/.*.(jsp|do){
proxy_pass 192.9.100.213:9080;
}
根据应用的不同可能需要转发的请求也不同,只要在我的这个配置(jsp|do|XXX),后面TRS 王纯刚2011/03/25 出品
Ngix实战篇 安装部署与配置全解析
的XXX类似替换为需要转发的后缀就可以了。
注意:和Rewrite的不同,匹配到的字符串后面不要再加上$1了。
3. 反向代理的高级参数
一般在配置文件中增加:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
✓ 带上客户原始请求IP等请求信息
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
保留客户端传递过来的XFF信息;XFF信息记录Http请求的真实的客户端, 也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项;
✓ 保留客户端请求的真实IP地址,用于某些访问统计
proxy_set_header X-Real-IP $remote_addr;
✓ 保留客户端请求的域名信息
proxy_set_header Host $host;
4. 反向代理的优化参数
proxy_connect_timeout 30;
nginx跟后端服务器连接超时时间
proxy_send_timeout 30;
后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 60;
连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 16k;
设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k;
proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k;
高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 256k;
设定缓存文件夹大小,大于这个值,将从upstream服务器传
当代理下载的文件超过该参数设置的大小时,nginx会先将文件写入临时目录 (缺省为nginx安装目下/proxy_temp目录),
注意:更多优化参数可以参考《》
2.3.5 配置虚拟主机
很简单,Server节点就是一个虚拟主机
1.复制自带的Server节点
TRS 王纯刚2011/03/25 出品
Ngix实战篇 安装部署与配置全解析
2.在Server节点中的Server_Name改成虚拟主机名就可以了
server {
listen 81;
server_name ;
}
2.3.6 配置静态文件超时时间
在配置文件中增加静态文件的超时时间:
location ~/wcm/*.(jpg|css|html|htm|js|gif|txt) {
root /home/trs/wchg/wwwhome/;
expires 24h;
}
注意:location匹配长的优先,匹配长的后就不匹配短的了,所以需要每个location都指定root或alias
expires 指令可以控制 HTTP 应答中的“ Expires ”和“ Cache-Control ”的头标(起到控制页面缓存的作用)
具体的语法:expires [time|epoch|max|pff]
默认值:off
expires指令控制HTTP应答中的“Expires”和“Cache-Control”Header头部信息,启动控制页面缓存的作用
time:可以使用正数或负数。“Expires”头标的值将通过当前系统时间加上设定time值来设定。
time值还控制"Cache-Control"的值:
负数表示no-cache
正数或零表示max-age=time
2.3.7 配置日志格式与按天轮换
1. 指定日志格式
由于nginx日志的默认格式不能被awsats所分析,所以经常需要更改nginx的log日志格式。具体的做法如下:
a) 自定义日志格式:
log_format wchglog '$remote_addr - $remote_user [$time_local] ' '"$request" $status
$body_bytes_sent ' '"$http_referer" "$http_user_agent"';
b) 指定访问日志和错误日志的格式和路径:(路径必须让nginx提供服务的用户,注意不是启动用户具有写的权限)
access_log logs/ wchglog; error_log logs/
TRS 王纯刚2011/03/25 出品
Ngix实战篇 安装部署与配置全解析
为提高日志文件读写性能,可以用下面的指令来缓存:
open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m;
2. 日志按天切换
方式很多,传统的可以借助ocronolog来做,这里采用logrorate来实现日志按天切换,但是ocronolog因为会附件进程,比较费性能,现在比较好的方式是采用logrotate来实现。主要有两个好处:
a) 操作系统安装的时候会自动安装logrorate。用Linux命令可以查看是否安装cat
/etc/log*;
b) 不用 Kill 和restart nginx,只要重新载入一下就可以了。
具体做法:
参考文件nginx,将文件放到/etc/logratate.d目录下面,文件内容如下:
/opt/nginx/logs/*.log {
rotate 99
compress
daily
missingok
notifempty
sharedscripts
postrotate /sbin/service nginx reload > /dev/null 2>/dev/null || true
endscript
}
主要内容的意义如下:
第一行,需要切换的文件
rotate 99 代表总共用99个文件来记录
compress 代表启用压缩
daily 代表按天切换日志
2.4 其它配置
2.4.1 禁止出错时泄露服务器的版本
在脚本中增加:
server_tokens off;
2.4.2 限制客户端POST提交的数据大小
在脚本中增加:
client_max_body_size 50m;
TRS 王纯刚2011/03/25 出品
Ngix实战篇 安装部署与配置全解析
client_body_buffer_size 256k;
2.4.3 静态目录root和alias的区别
指定目录的属性:alias指定的目录是准确的;root是指定目录的上级目录,并且该上级目录要含有location指定名称的同名目录。
使用alias标签的目录块中不能使用rewrite的break
注意:一般情况下,在location /中配置root,在location /other中配置alias是一个好习惯。
2.4.4 4.限制并发数和下载速率
limit_conn one 1;
limit_rate 20k;
2.4.5 指定nginx提供服务的用户:
缺省为nobody
#user nobody;
2.4.6 指定错误页
error_page 500 502 503 504 /portal/internal_;
location = /portal/ {
alias /home/trs/wchg/wwwhome/portal;
}
2.5 高级配置
2.5.1 利用Nginx实现开源负载均衡的分发
1. 申明负载均衡有哪几台机器组成
upstream wchgCluster {
server localhost:82 weight=2 ;
server localhost:83 weight=3;
}
Weight为权重,代表请求分发的百分比,默认为1。如上述配置,第一台机器的权重为2/5即将40%的请求分给82端口.
TRS 王纯刚2011/03/25 出品
Ngix实战篇 安装部署与配置全解析
2. 定义两个Server
Server1 监听在本机的82端口
server {
listen 82;
server_name localhost;
location / {
proxy_pass 192.9.100.213:9080;
}
}
Server2 监听在本机的83端口
server {
listen 83;
server_name localhost;
location / {
proxy_pass 192.9.100.214:9080;
}
}
3. 配置反向代理,将请求发给集群wchgCluster
location ~ ^/portal/.*.(jsp|do) {
proxy_pass wchgCluster ; #代理给集群的时候,这里的名字和上面的cluster的名字相同
}
通过测试,我们将server2的转发停止掉,然后刷新浏览器就可以看到一会儿正确,一会儿错误了,统计一下请求数,就可以看到转发的规律,基本上是按照weight的顺序进行轮流转发。Round-Robin的模式。
2.5.2 利用Nginx实现静态文件的权限控制
1. 主要参考文章
来自于内网肖锋文章
《优化TRS二进制文件的读写效率,推荐nginx的X-Accel-Redirect 访问》
地址:/portal/portaldoc/document_?ChannelId=434&PageId=0&DocumentId=200239》
2. 原理补充说明
主要原理:nginx反向代理得到后端请求发现带有X-Accel-Redirect的header,那么根据这个头记录的路径信息打开磁盘文件
TRS 王纯刚2011/03/25 出品
Ngix实战篇 安装部署与配置全解析
3. 具体做法
以控制某静态目录的权限为例
a) 将真正要控制静态权限的静态目录,如realpub,禁止直接访问
location /realpub/ {
alias /home/trs/wchg/wwwhome/realpub/;
internal;
}
b) 增加一个虚的目录,如/pub,在虚的目录中配置rewrite规则
location /pub/ {
alias /home/trs/wchg/wwwhome/pub;
rewrite "/aaa/(.*)$" /portal/right_?filename=$1 last;
}
c) 在应用中放置right_,根据filename参数中所携带的 信息进行权限验证,然后返回。JSP中的逻辑可以参考下面的代码
String sFileName = ameter("filename");
//在这里根据文件名插入业务逻辑
();
der("Content-Type","application/octet-stream");
der("X-Accel-Redirect", "/protectfile/"+sFileName);
补充两点:
注意:最好不要将realpub和pub指向同一个目录
补充:验证过html、txt和zip文件,完全可行
TRS 王纯刚2011/03/25 出品
版权声明:本文标题:Nginx实战篇 安装部署与配置全解析 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1703323623h446925.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论