Nginx服务器配置文件nginx.conf实例详解

时间:2021-12-26 17:49:47

nginx配置文件主要分为六个区域:

main(全局设置)events(nginx工作模式)http(http设置)

sever(主机设置)location(URL匹配)upstream(负载均衡服务器设置)

其中还有若干模块,如HttpGzip模块,stubstatus模块等等

结构类似如下:

main

events   {

  ....

}

http        {

  ....

  upstream myproject {

    .....

  }

  server {

    ....

    location {

        ....

    }

  }

  server {

    ....

    location {

        ....

    }

  }

  ....

location {

        ....

                }

  ....

location {

        ....

                }

 

}

location /Nginx_status {

}

以下是结合具体实例对nginx.conf配置文件的详细解析

[root@localhostconf]# cat nginx.conf

###############  1、全局配置  #################

#user  nobody;

#主模块指令,指定nginx worker进程运行用户及用户组,默认为nobody账号

User  nobody nobody;

worker_processes   4;

#主模块指令,指定开启进程数,每个nginx平均耗内存10~12MB,一般指定一个进程就足够了,建议指定和CPU数目相同的进程数即可。

 

error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#error_log  logs/error.log;

#error_log 主模块指令,定义全局错误日志文件。输出级别有debug,info,notice,warn,error,crit可供选择,其中debug输出日志最详细,二crit输出日志最少。

 

pid        logs/nginx.pid;

worker_rlimit_nofile  65535;

# worker_rlimit_nofile用于绑定worker进程和CPU,Linux内核2.4以上使用

 

events {

#event指令用来设置nginx的工作模式及连接数上限。

 

        use epoll;

#use是个事件模块指令,用于指定工作模式,nginx支持的工作模式有select、poll、kqueue、epoll、rtsig、和/dev/poll,其中select和poll都是标准的工作模式。kqueue和epoll是高效的工作模式,其中kqueue用于BSD系统,而epoll用于Linux系统,对于Linux系统,epoll是首选。

 

    worker_connections  65536;

# worker_connections时间模块指令,用于定义进程的最大连接数,默认为1024,。

#最大客户连接数由worker_connections和worker_processes决定,即max_client=worker_processes*worker_connections,在作为反向代理时变为:max_client= worker_processes*worker_connections/4。

#进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit –n 65536”后worker_connections的设置才生效。

}

 

################  2、HttpGzip模块配置 ##################

    gzip        on;

#gzip on : 开启实时gzip压缩输出数据流,减少网络传输

 

    gzip_min_length   1k;

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

 

    gzip_buffers      4  16k;

#gzip_buffers设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表申请4个单位为16K的内存作为压缩结果六缓存

 

    gzip_http_version   1.1;

#gzip_http_version用于识别 http 协议的版本,默认是1.1,目前绝大多数浏览器已经支持gzip解压。

 

    gzip_comp_level     6;

#gzip_comp_level:gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)

 

    gzip_types text/html text/plaintext/css text/javascript application/json application/javascriptapplication/x-javascript application/xml;

#gzip_types指定何种类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。

 

    gzip_vary   on;

#gzip_vary:和http头有关系,会在响应头加个 Vary: Accept-Encoding ,可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。。

 

 

##################  3.http服务器配置  ###############

http {

    include       mime.types;

#include是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。

 

    default_type application/octet-stream;

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

 

        log_format main  '$remote_addr - $remote_user[$time_local] "$request" '

                   '$status $body_bytes_sent"$http_referer" '

                    '"$http_user_agent" "$http_x_forwarded_for"';

#log_format  download'$remote_addr - $remote_user [$time_local] "$request"

                   '$status$body_bytes_sent "$http_referer" '

                    '"$http_user_agent" "$http_x_forwarded_for"';

#log_format是nginx的httplog模块指令,用于指定nginx的日志输出格式,main为此日志出出个事的名称,可以在线面access_log指令中使用。

    #access_log  logs/access.log  main;

 

        client_max_body_size   20m;

#设置允许客户端请求的最大单个文件字节数

client_header_buffer_size    32k;

#用于指定客户端请求头的headerbuffer大小,对于大多数请求,1kb的缓冲区大小已经足够,如果定义了消息头或有更大的cookie,可以增加缓冲区大小。

large_client_header_buffers        4      32k;

#用于指定客户端请求中较大的消息头的缓存最大数量和大小

 

    sendfile   on;

#sendfile用于开启高效文件传输模式,将tcp_nopush和tcp_nodely另个指令设置为on,用于防止网络阻塞。

    tcp_nopush    on;

        tcp_nodelay           on;

 

    keepalive_timeout  65;

    #keepalive_timeout  0;

#keepalive_timeout用于设置客户端连续保持活动的超时时间。

        client_header_timeout 10;

#client_header_timeout用于设置客户端请求头读取超时时间,超过该时间客户端还没发送任何数据,nginx将返回“request time out(408)”错误。

client_body_timeout    10;

#client_body_timeout用于设置客户端请求主体读取超时时间,默认时间为602s,超过该时间客户端还没发送任何数据,nginx将返回“request timeout(408)”错误。

        send_timeout                10;

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

 

 

################  4、负载均衡配置 (实例)##################

####upstream是nginx的http upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。

 

upstream  myserver {

# upstream  example.com;指定一个负载均衡器的名称为example.com;。该名称为任意##的,使用时调用即可。

       

ip_hash;

##ip_hash调度算法,每个请求按IP的hash结果分配,是来自同一个IP的访客##固定访问一个后端服务器,有效解决了动态服务器存在的session共享问题

 

        server  192.168.56.102:8088

###server:该指令指定后端服务器的IP地址和端口,同时还可以指定每个后端##服务器在负载均衡调度中的状态,常见的状态有:down,backup,max_fails,##fail_timeout。

#backup:预留的备份机器,当其他所有的非backup机器出现故障或正在忙时,##才会请求backup机器,该机器压力最轻。当调度算法为ip_hash,状态不能##为backup和weight;

server  192.168.56.101:8088 down;

#down:表示当前server暂时不参与负载均衡

        server  192.168.56.103:8088 max_fails=3  fail_timeout=20s;

        server  192.168.56.105:8088max_fails=3  fail_timeout=20s;

#max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回

#proxy_next_upstream模块定义错误。

#fail_timeout:经历max_fails次失败后,暂停服务的时间。

        server  192.168.56.104:8088;

}

server {

    listen    8088;      

        server_name  www.example.com 192.168.56.110;

#指定IP地址或者域名,多个域名之间用空格隔开。

        index  index.html index.htm  index.jsp;

#设定访问的默认首页地址

    root   /web/wwwroot/www;

#指定主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径

 

#对 / 所有做负载均衡+反向代理

 location / {

     proxy_pass        http://myserver; 

#proxy_pass http://myserver:实现负载调度功能,proxy_pass指令用来指定请求转向代理的后端服务器定义的服务器列表,即反向代理,对应upstream负载均衡器。地址也可以是主机名或者IP地址,如:proxy_passhttp://ip:port。

proxy_next_upstream   http_500  http_502  http_503   http_504 error  timeout invalid_header;

#proxy_next_upstream:定义故障转移策略,当后端服务器节点返回500、502、503、504和执行超时等错误时,自动将请求转发到upstream负载均衡组中的另一台服务器,实现故障转移。

    

 

############# 5.http_proxy设置##################

####该部分亦可以使用写进proxy.conf文件中,再使用include指令包含进来,######从而使配置显得更简练

######用法:include    /opt/nginx/conf/proxy.conf ####

    client_max_body_size   10m;

    client_body_buffer_size   128k;

#client_body_buffer_size:用于指定客户端请求主体缓冲区大小,意思就是先保存到本地再传给用户。

    proxy_connect_timeout   75;

#nginx跟后端服务器连接超时时间(代理连接超时)

#连接成功后,与后端服务器两个成功的响应操作之间超时时间(代理接收超时)

    proxy_send_timeout   75;

#proxy_send_timeout:后端服务器的数据回传时间,超时则断开连接

    proxy_read_timeout   75;

#proxy_read_timeout:设置nginx从代课的后端服务器获取信息的时间,即在规定时间之内后端服务器必须传完所有的数据,否则断开连接。

 

    proxy_buffer_size   4k;

#设置代理服务器(nginx)从后端服务器读取并保存用户头信息的缓冲区大小,默认与proxy_buffers大小相同,其实可以将这个指令值设的小一点

   proxy_buffers   4  32k;

#proxy_buffers缓冲区,nginx针对单个连接缓存来自后端realserver的响应,网页平均在32k以下的话,这样设置

    proxy_busy_buffers_size    64k;

#高负荷下缓冲大小(官方建议为proxy_buffers*2)

    proxy_temp_file_write_size   64k;

#指定proxy缓存临时文件的大小

 

    proxy_temp_path    /usr/local/nginx/proxy_temp 1 2;

#当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小。proxy_temp_path(可以在编译的时候)指定写到哪那个目录。

       

proxy_redirect off;

# 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

    proxy_set_header  Host $host;

#proxy_set_header:设置由后端服务器获取用户主机或真实IP地址,以及代理者的真实IP

    proxy_set_header  X-Real-IP $remote_addr; 

#

    proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

#  

        }

        }

 

 

##############  6、server虚拟主机配置 (实例) ################

 

server {

    listen    80;

#指定虚拟主机的服务器

  

  server_name www.example.com;

    # server_name  192.168.56.111;

#指定IP地址或者域名,多个域名之间用空格隔开。

  

access_log  logs/ example.access.log  main;

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

location / {

        index  index.html index.htm  index.jsp;

#设定访问的默认首页地址

    root   /web/wwwroot/example/vhost

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

    charset  utf-8;

#设定网页默认的编码格式

}

}

server {

    listen    80;

#指定虚拟主机的服务器

  

  server_name www.example1.com;

    # server_name  192.168.56.112;

#指定IP地址或者域名,多个域名之间用空格隔开。

    

access_log  logs/ example1.access.log  main;

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

location / {

        index  index.html index.htm  index.jsp;

#设定访问的默认首页地址

    root   /web/wwwroot/example1/vhost

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

    charset  utf-8;

#设定网页默认的编码格式

}

}

Include  /opt/nginx/conf/vhost/ www.example2.com.conf ;

}}

###此处用到include指令,其中/opt/nginx/conf/vhost/www.example2.com.conf

##内容为:

 server {

    listen    80;  

  server_name www.example2.com;

    # server_name  192.168.56.113;

access_log  logs/ example1.access.log  main;

location / {

        index  index.html index.htm  index.jsp;

    root   /web/wwwroot/example2/vhost

    charset  utf-8;

}

}

 

 

 

##########  7、URL配置设置 ##################

###location支持正则表达式和条件判断匹配,可以通过location指令实现nginx对动静态网页的过滤处理。

 

  location ~ * \.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$  

#所有扩展名为gif|jpg|jpeg|bmp|png|ico|txt|js|css的静态文件都交给nginx处理

        {  

            root   /web/wwwroot/html;

            expires      30d;

#expires指定静态文件的过期时间

        }

location ~^/(upload|html)/   

#将upload和html下的所有文件都交给nginx来处理,当然upload和html目录包含在/web/wwwroot/html目录中

        {  

            root        /web/wwwroot/html;   expires   30d;

        }

location  ~ .*.jsp$  

#location对此虚拟机下动态网页的过滤处理,也就是将所有.jsp为后缀的文件都交给本机8080端口处理。

        {  

            Index       index.jsp;

            Proxy_pass     http://localhost:8080;

        }

 

 

 

##### #######  8、stubstatus模块配置###############

  location /Nginx_status {

        stub_status   on;

#启用stub_status的工作状态统计功能

 

        access_log     log/NginxStatus.log;

# access_log用来指定stub_status模块的访问日志文件

 

        auth_basic              “NginxStatus”;

#auth_basic是nginx的一种认证机制

 

                auth_basic_user_file     ../htpasswd;

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

#nginx的auth_basic采用的是与Apache兼容的密码文件,所以需要采用

#Apache的htpasswd命令来生成密码文件

#如添加一个fieldyang 用户可以用该方式生成密码文件

#/usr/local/apache/bin/htpasswd  –c /opt/nginx/conf/htpasswd fieldyang  

#要查看nginx运行状态,只需在http://ip/NginxStatus输入账号密码即可

      

# #           allow  192.168.10.0/24;

# #           allow  192.168.56.100;

# #           deny all;

 

 }

 

############  9、虚拟主机错误信息返回页面  #################

        error_page  404              /404.html;

#error_page指令可以定制各种错误信息返回页面,nginx会在主目录的html目

#录中查找指定的返回页面

       

# redirect server error pages to the static page /50x.html

        #

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

}