您的位置:首页 > 运维架构 > Nginx

Nginx的配置

2017-09-26 19:42 260 查看

Nginx配置文件的结构

Nginx的配置文件一般位于Nginx安装目录下的conf目录下,文件以block组织起来。每一个block用一组“{}”来表示。block可以分为几个层次。最高层为main指令所在位置。main指令下面有Events、HTTP等层级;HTTP层又包含server层;server层中又包含localtion层,且一个server中可以有多个localtion。

配置与调试Nginx

在Nginx的配置文件nginx.conf中,可以看到Nginx的配置文件主要分为4个部分:

main:全局设置,将影响所有其他设置;

server:主机设置,主要用于指定主机和端口;

upstream:负载均衡服务器设置,主要用于设置一系列后端服务器;

localtion:URL匹配特定位置设置,用于匹配网页位址;

server继承main,localtion继承server,upstream既不继承其他设置也不被其他设置继承。

Nginx全局设置

下面是对Nginx的全局属性设置:

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;
}


user:指定Nginx Worker进程运行的用户和组,默认是nobody;

worker_processes:指定开启的进程数。一般是指定与CPU数量相同的进程数;

error_log:指定全局错误日志文件。输出日志级别由高到低为:debug、info、notice、warn、error、crit;

pid:指定进程id存放文件;

worker_rlimit_nofile:绑定worker进程和CPU,内核2.4版本以上可用;

events:指定Nginx工作模式和连接上限。

use:指定工作模式,Nginx支持工作模式有:select、poll、kqueue、epoll、rtsig、/dev/poll。其中select、poll为标准工作模式,kqueue、epoll为高效工作模式,epoll用于Linux平台,kqueue用于BSD系统。一般Linux上epoll首选;

worker_connections:指定最大连接数,默认1024.最大客户端连接由worker_processes和worker_connections共同决定,为两者乘积。作为反向代理时为两者之积除以4。

需要注意的是,最大连接数受Linux进程最大打来文件限制,需要执行“ulimit -n 65535”后才生效。

HTTP服务器设置

下面对HTTP服务器相关属性进行设置

http {
include       mime.types;
default_type  application/octet-stream;
log_format  main  '$remote_addr - $remote_user [$time_local] '
'"$req
4000
uest" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio" ';
log_format download '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_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;
tcp_nodelay     on;
sendfile        on;
tcp_nopush      on;
keepalive_timeout      60;
client_header_timeout  10;
client_body_timeout    10;
send_timeout    10;


include:实现对配置文件所包含的文件的设定,减少主配置文件复杂度;

default_type:设定默认类型为二进制流,也就是文件类型未定义时使用这种方式。例如没有PHP环境时,Nginx不解析,此时浏览器访问PHP文件会出现下载窗口;

log_format:定义日志格式。main和download为日志输出格式名称;

client_max_body_size:设定允许客户端请求的最大单个文件字节数;

client_header_buffer_size:指定来自客户端请求头的headerbuffer大小。对于大多数请求1kb缓冲区足够;

large_client_header_buffers:指定客户端请求中较大的消息头的缓存最大数量和大小,,4为个数,128k为大小,最大缓存为4个128k;

sendfile:开启高效文件传输模式;将tcp_nodelay和tcp_nopush开启可以防止网络阻塞;

keepalive_timeout:设置客户端请求头读取超时时间,若超过这个时间客户端还未发送任何数据,Nginx将返回请求超时(408)错误;

client_body_timeout:设置客户端请求主体读取超时时间,默认值60.若超过这个时间,客户端还未发送任何数据,Nginx将返回请求超时(408)错误;

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

HttpGzip模块配置

依赖于–with-http_gzip_static_module,这个模块支持在线实时压缩输出数据流。可以使用下面的命令查看是否安装了这个模块:

/usr/local/sbin/nginx -V


下面进行相关属性设置:

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-javascript text/css application/xml;
gzip_vary    on;


gzip:用于控制gzip模块开启或关闭;

gzip_min_length:设置允许压缩的页面最小字节数,最小字节数从header头的Content-Length中获取,默认值0,表示都压缩,建议设置为大于1k,小于1k可能压缩后反而增大;

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

gzip_http_version:设置识别HTTP协议版本,默认1.1;

gzip_comp_level:指定压缩比,1压缩比最小,速度最快,9压缩比最大,速度最慢,也比较消耗CPU资源;

gzip_types:指定压缩类型,无论是否指定,text/html类型总会压缩;

gzip_vary:让前端的缓存服务器缓存经过gzip压缩的页面;

负载均衡设置

Nginx负载均衡主要维护一个负载均衡服务器列表,设置如下:

upstream ixdba.net{
ip_hash;
server 192.168.12.133:80;
server 192.168.12.134:80  down;
server 192.168.12.135:8009  max_fails=3  fail_timout=20s;
server 192.168.12.135:8080;
}


upstream:Nginx的HTTP Upstream模块,此模块通过算法实现调度客户端到服务器的负载均衡,他指定了一个负载均衡器的名称,这里是ixdba.net,在后面用到的地方调用即可。

ip_hash:负载均衡调度算法,Nginx支持5种调度算法:

轮询:默认算法,每个请求按时间顺序逐一分配到不同的后端服务器,并且会自动踢出宕机服务器;

Weight:按指定的权重分配请求,权重越大分配的请求越多;

ip_hash:每个请求按访问ip进行hash运算,这样同一ip会固定访问一台服务器,可以解决动态网页session共享问题,但是此时后端服务器的状态不能定义为weight和backup;

fair:第三方算法,根据页面大小和加载时间长短智能地进行负载均衡,也就是根据服务器响应时间来分配请求。要是用需要下载upstream_fair模块;

url_hash:第三方算法,根据url的hash结果进行分配,使每一个url定向到同一个后端服务器,进一步提高后端服务器缓存效率。要是用需要安装hash软件包;

server:指定后端服务器的ip和端口,同时也可以指定后端服务器在调度中的状态,常见4种状态:

down:不参与负载均衡;

backup:预留机器,当其他机器出现故障或者忙的时候,才请求backup机器,这个状态不能出现在ip_hash算法中;

max_fails:允许请求失败次数,默认为1,当超过定义的次数时,返回proxy_next_upstream模块定义的错误;

fail_timout:在经历max_fails次失败后,暂停服务时间;

server虚拟主机配置

一般将虚拟主机写入另一个文件,通过include包含进来,这样方便管理,具体配置如下:

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;
}


server:标识定义虚拟主机开始;

listen:定义虚拟主机的监听端口;

server_name:指定ip或域名,多个用空格隔开;

index:访问的默认首页地址;

root:指定虚拟主机网页根目录,可以是相对路径;

charset:设置网页编码格式;

access_log:指定虚拟主机访问日志的存放路径,main指定输出格式;

URL匹配配置

location支持正则表达式匹配,也支持条件判断匹配,通过location对Nginx网页进行过滤处理,下面是一些例子:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
root /web/wwwroot/www.ixdba.net;
expires  30d;
}


将.gif、.jpg、.jpeg、.png、.bmp、.swf的静态文件交给Nginx处理,expires指定静态文件过期时间,这里为30天;

location ~ ^/(upload|html)/ {
root /web/wwwroot/www.ixdba.net;
expires  30d;
}


将upload和html下所有文件都交给Nginx处理,upload和html目录都位于/web/wwwroot/www.ixdba.net下;

location ~ .*.jsp$ {
index index.jsp;
proxy_pass http://localhost:8080; }


将所有.jsp后缀的文件交给8080端口处理;

StubStatus模块配置

StubStatus模块能够获取Nginx自上次启动以来的工作状态,要是用需要在编译时指定–with-http_stub_status_module,下面是一些配置:

location /NginxStatus {
stub_status    on;
access_log  logs/NginxStatus.log;
auth_basic  "NginxStatus";
auth_basic_user_file  ../htpasswd;
}


stub_status:控制StubStatus的工作状态;

access_log:指定StubStatus访问的日志文件;

auth_basic:Nginx的一种认证机制;

auth_basic_user_file:指定认证的密码文件;

注意的是,auth_basic需要采用Apache的htpasswd命令来生成密码文件,举例如下:

添加一个webadmin用户:

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


会提示输入密码,然后添加成功。

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

Active connections:当前活跃的连接数;

三个连续的数字表示:处理的连接数、创建的握手次数、处理的请求数;

Reading:Nginx读取到客户端Header信息数;

Waiting:Nginx已处理完、等待下一次请求的驻留连接数;

Writing:Nginx返回给客户端的Header数;

设置错误页面

error_page  404  /404.html;
eooro_page  500 502 503 504  /50x.html;
location = /50x.html {
root   html;
}


默认情况下,Nginx会在html目录下查找指定的返回页面,需要注意的是,错误页面信息一定要大于512kb,否则会被IE替换为IE默认错误页面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: