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 出品


本文标签: 配置 文件 请求 安装 需要