nginx linux 运维,Linux运维:配置与调试Nginx

1、Nginx配置文件结构

Nginx的配置文件是一个纯文本文件,它一般位于Nginx安装目录的conf目录下,整个配置文件是以block的形式组织的。每个block一般以一个大括号“{}”来表示。block可以分为几个层次,整个配置文件中Main命令位于最高层,在Main层下面可以有Events、等层级,而在层中又包含Server层,即server block,server block中又可分为location层,并且一个server block中可以包含多个location block。

一个完整的配置文件结构如图1所示。

268f38cf5e1072b88418295cad79efd7.png

图1 Nginx配置文件结构

在了解配置文件结构之后,就可以开始配置和调试Nginx了。

2、Nginx配置文件详解

Nginx安装完毕后,会产生相应的安装目录,Nginx的配置文件路径为/opt/nginx/conf,其中nginx.conf为Nginx的主配置文件。这里重点介绍下nginx.conf这个配置文件。

Nginx配置文件主要分成四个部分:main(全局设置)、server( 主机 设置)、upstream( 负载均衡设置)和location(URL匹配特定位置的设置)。main部分设置的命令将影响其他所有设置;server部分的命令主要用于指定 主机 和端口;upstream命令主要用于 负载均衡 ,设置一系列的后端 服务器 ;location部分用于匹配网页位置。这四者之间的关系式:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。

在这四个部分当中,每个部分都包含若干命令,这些命令主要包含Nginx的主模块命令、事件模块命令、核心模块命令,同时每个部分还可以使用其他模块命令,例如Http SSL模块、HttpGzip Static模块和Http Addition模块等。

下面通过一个Nginx配置实例详细介绍nginx.conf每个命令的含义。一个配置好的nginx.conf文件内容如下:

user nobody nobody;

worker_processes 4;

error_log logs/error.log notice;

pid logs/nginx.pid;

worker_rlimit_nofile 65535;

events{

use epoll;

worker_connections 65536;

}

这段 代码 用于对Nginx的全局属性进行配置,每个参数含义如下。

user:主模块命令,指定Nginx的worker 进程 运行用户以及用户组,默认由nobody账号运行。

worker_processes:指定Nginx要开启的 进程 数。

error_log:用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为详细,而crit输出日志最少。

pid:用来指定 进程 id的存储文件位置。

worker_rlimit_nofile:用于绑定worker 进程 和CPU,Linux内核2.4以上可用。

events:设定Nginx的工作模式及连接数上限。其中参数“use”用来指定Nginx的工作模式,Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,对于系统,epoll工作模式是首选。而参数“worker_connections”用于定义Nginx每个的最大连接数,默认是1024。最大客户端连接数由worker_processes和worker_connections决定,即max_client=worker_processes*worker_connections。的最大连接数受系统的最大打开文件数限制,在执行命令“ulimit -n 65536”后worker_connections的设置才能生效。

下面这段内容是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 32k;

Sendfile on;

tcp_nopush on;

tcp_nodelay on;

keepalive_timeout 60;

client_header_timeout 10;

client_body_timeout 10;

send_timeout 10;

上述 代码 中每个配置选项的含义如下。

include:主模块命令,实现对配置文件所包含文件的设定,可以减少主配置文件的复杂度。类似于Apache中的include方法。

default_type:属于核心模块命令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如,在没有配置环境时,Nginx是不予解析的,此时,用浏览器访问文件就会出现下载窗口。

log_format:用于指定Nginx日志的输出格式。main为此日志输出格式的名称,可以在下面的access_log命令中引用。

client_max_body_size:用来设置允许客户端请求的最大的单个文件字节数。

client_header_buffer_size:用于指定来自客户端请求头的headerbuffer大小。对于大多数请求,1KB的缓冲区大小已经足够,如果自定义了消息头或有更大的cookie,可以增加缓冲区大小。这里设置为32KB。

large_client_header_buffers:用来指定客户端请求中较大的消息头的缓存最大数量和大小,“4”为个数,“128K”为大小,最大缓存量为4个128KB。

sendfile:用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个命令设置为“on”用于防止网络阻塞。

keepalive_timeout:设置客户端连接保持活动的超时时间。在超过这个时间之后, 服务器 会关闭该连接。

client_header_timeout:设置客户端请求头读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误。

client_body_timeout:设置客户端请求主体读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误,默认值是60。

send_timeout:指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。

下面这段 代码 是HttpGzip模块在Nginx配置中的相关属性设置:

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-java text/css application/xml;

gzip_vary on;

上述 代码 中每个参数的含义如下。

gzip:用于设置开启或者关闭gzip模块,“gzip on”表示开启GZIP压缩,实时压缩输出数据流。

gzip_min_length:设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,不管页面多大都进行压缩。建议设置成大于1KB的字节数,小于1KB可能会越压缩越大。

gzip_buffers:表示申请4个单位为16KB的内存作为压缩结果流缓存,默认是申请与原始数据大小相同的内存空间来存储GZIP压缩结果。

gzip_comp_level:用来指定GZIP压缩比,1表示压缩比最小,处理速度最快;9表示压缩比最大,传输速度快,但处理速度最慢,也比较消耗CPU资源。

gzip_types:用来指定压缩的类型,无论是否指定,“text/html”类型总是会被压缩的。

gzip_vary:让前端的缓存 服务器 缓存经过GZIP压缩的页面,例如用Squid缓存经过Nginx压缩的数据。

下面这段是虚拟的配置:

server{

listen 80;

server_name 192.168.12.188 www.ixdba.net;

index index.html index.htm index.jsp;

root /web/wwwroot/www.ixdba.net

charset gb2312;

access_log logs/www.ixdba.net.access.log main;

建议将对虚拟 主机 进行配置的内容写进另外一个文件,然后通过include命令包含进来,这样更便于维护和管理。配置虚拟 主机中每个参数的含义如下:

·server:定义虚拟 主机 开始的关键字。

listen:用于指定虚拟 主机 的服务端口。

server_name:用来指定IP地址或域名,多个域名之间用空格分开。

index:用于设定访问的默认首页地址。

root:用于指定虚拟 主机 的网页根目录,这个目录可以是相对路径,也可以是绝对路径。

charset:用于设置网页的默认编码格式。

access_log:用来指定此虚拟 主机 的访问日志存放路径,最后的main用于指定访问日志的输出格式。

下面这段 代码 是URL地址匹配设置:

location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {

root /web/wwwroot/www.ixdba.net;

expires 30d;

}

URL地址匹配是Nginx配置中最灵活的部分。通过location关键字定义了地址匹配的开始。location支持 正则表达式 匹配,也支持条件判断匹配。用户可以通过location命令实现Nginx对动态、静态网页进行过滤处理。

在上面这段location 代码 中,所有扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给Nginx处理,而expires用来指定静态文件的过期时间,这里是30天。

同理,下面这段 代码 是将upload和html下所有文件都交给Nginx来处理,当然,upload和html目录包含在/web/wwwroot/www.ixdba.net目录中。

location ~ ^/(upload|html)/ {

root /web/wwwroot/www.ixdba.net;

expires 30d;

}

在下面这段 代码 中,通过location关键字实现了将所有以.jsp为后缀的文件都交给本机的8080端口处理。

location ~ .*.jsp$ {

index index.jsp;

proxy_pass http://localhost:8080;

}

下面这段 代码 配置的是Nginx的运行状态,StubStatus模块能够获取Nginx自上次启动以来的工作状态:

location /NginxStatus {

stub_status on;

access_log logs/NginxStatus.log;

auth_basic "NginxStatus";

auth_basic_user_file ../htpasswd;

}

上述 代码 中每个参数的含义如下。

stub_status:设置为“on”表示启用StubStatus的工作状态统计功能。

access_log:用来指定StubStatus模块的访问日志文件。

auth_basic:是Nginx的一种认证机制。

auth_basic_user_file:用来指定认证的 密码 文件。

由于Nginx的auth_basic认证采用的是与Apache兼容的文件,因此需要用Apache的htpasswd命令来生成文件,例如,要添加一个webadmin用户,可以使用下面的方式生成文件:

/usr/local/apache/bin/htpasswd -c /opt/nginx/conf/htpasswd webadmin

会得到以下提示信息:

在输入之后,系统会要求再次输入。确认正确之后成功添加用户。

要查看Nginx的运行状态,可以输入http://ip/NginxStatus,然后输入刚刚创建的用户名和 密码 ,可以看到如下信息:

最后,设置虚拟的错误信息返回页面,如下:

error_page 404 /404.html;

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

}

通过error_page命令可以定制各种错误信息的返回页面。在默认情况下,Nginx会在主目录的html目录中查找指定的返回页面。需要特别注意的是,这些错误信息的返回页面的大小一定要超过512KB,否则会被IE浏览器替换为IE默认的错误页面。

3、Nginx日常维护技巧

(1)Nginx配置正确性检查

Nginx提供的配置文件调试功能非常有用,可以快速 定位 配置文件存在的问题。执行如下命令检测配置文件的正确性:

/usr/local/nginx/sbin/nginx -t

或者

/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

其中,“-t”参数用于检查配置文件是否正确,但并不执行。“-c”参数用于指定配置文件路径,如果不指定配置文件路径,Nginx默认会在安装时指定的安装目录下查找conf/nginx.conf文件。

如果检测结果显示如下信息,说明配置文件正确。

the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok configuration file /usr/local/nginx/conf/nginx.conf test is successful

另外,Nginx也提供了查看版本及相关编译信息的功能,在命令行执行以下命令可以显示安装Nginx的版本信息。

/usr/local/nginx/sbin/nginx -v

执行以下命令显示安装的Nginx版本和相关编译信息:

/usr/local/nginx/sbin/nginx -V

不但显示Nginx的版本信息,同时显示Nginx在编译时指定的相关模块信息。

(2)Nginx的启动、关闭与重启

Nginx对的控制能力非常强大,可以通过信号命令控制。常用的信号有:

QUIT,表示处理完当前请求后关闭 进程 。

HUP,表示重新加载配置,即关闭原有的并开启新的工作。此操作不会中断用户的访问请求,因此,可以通过此信号平滑地重启Nginx。

USR1,用于Nginx的日志切换,也就是重新打开一个日志文件,例如,每天要生成一个新的日志文件时,可以使用这个信号来控制。

USR2,用于平滑升级可执行程序。

WINCH,从容关闭工作 进程 。

Nginx的启动非常简单,只需输入:

/usr/local/nginx/sbin/nginx

即可完成Nginx的启动。在Nginx启动后,可以通过如下命令查看Nginx的启动 进程 :

[root@localhost logs]# ps -ef|grep nginx root 16572 1 0 11:14 ? 00:00:00 nginx: master process /opt/nginx/sbin/nginx nobody 16591 16572 0 11:15 ? 00:00:00 nginx: worker process nobody 16592 16572 0 11:15 ? 00:00:00 nginx: worker process nobody 16593 16572 0 11:15 ? 00:00:00 nginx: worker process nobody 16594 16572 0 11:15 ? 00:00:00 nginx: worker process

如果要关闭Nginx 进程 ,可以使用如下命令:

kill -XXX pid

其中,“XXX”就是信号名,“pid”是Nginx的 进程 号,可以通过如下两个命令获取:

要不间断服务平滑地重新启动Nginx,可以使用如下命令:

kill -HUP ‘cat /opt/nginx/logs/nginx.pid‘

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值