nginx.conf配置详解

来源:互联网 发布:淘宝上找货源 编辑:程序博客网 时间:2024/05/17 15:58

源码

nginx服务器的配置文件存放于安装目录的conf中,其中的主配置文件名为nginx.conf,配置文件详细内容如下:

#user  nobody;                          #全局块worker_processes  1;#error_log  logs/error.log;#error_log  logs/error.log  notice;#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {                                #events块    worker_connections  1024;}http {                                  #http块    include       mime.types;           #http全局块    default_type  application/octet-stream;    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    #                  '$status $body_bytes_sent "$http_referer" '    #                  '"$http_user_agent" "$http_x_forwarded_for"';    #access_log  logs/access.log  main;    sendfile        on;    #tcp_nopush     on;    #keepalive_timeout  0;    keepalive_timeout  65;    #gzip  on;    server {                            #server块        listen       80;                #server全局块        server_name  localhost;        #charset koi8-r;        #access_log  logs/host.access.log  main;        location / {                    #location块            root   html;            index  index.html index.htm;        }        #error_page  404              /404.html;        # redirect server error pages to the static page /50x.html        #        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }        # proxy the PHP scripts to Apache listening on 127.0.0.1:80        #        #location ~ \.php$ {        #    proxy_pass   http://127.0.0.1;        #}        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000        #        #location ~ \.php$ {        #    root           html;        #    fastcgi_pass   127.0.0.1:9000;        #    fastcgi_index  index.php;        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;        #    include        fastcgi_params;        #}        # deny access to .htaccess files, if Apache's document root        # concurs with nginx's one        #        #location ~ /\.ht {        #    deny  all;        #}    }    # another virtual host using mix of IP-, name-, and port-based configuration    #    #server {    #    listen       8000;    #    listen       somename:8080;    #    server_name  somename  alias  another.alias;    #    location / {    #        root   html;    #        index  index.html index.htm;    #    }    #}    # HTTPS server    #    #server {    #    listen       443 ssl;    #    server_name  localhost;    #    ssl_certificate      cert.pem;    #    ssl_certificate_key  cert.key;    #    ssl_session_cache    shared:SSL:1m;    #    ssl_session_timeout  5m;    #    ssl_ciphers  HIGH:!aNULL:!MD5;    #    ssl_prefer_server_ciphers  on;    #    location / {    #        root   html;    #        index  index.html index.htm;    #    }    #}}

全局块

全局块主要设置一些影响nginx服务器整体运行的配置指令,如:nginx服务器的用户(组)、worker process 数、pid等,其作用域是nginx服务器全局。

events块

events块主要设置一些影响nginx服务器与用户的网络连接的指令。

http块

http块可以涉及到代理、缓存、日志定义以及第三方模块的配置等。

server块

server块可以包含自己的全局块以及location块。在其全局块中最长见的配置是本虚拟主机(将服务器的某项或全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器)的监听配置以及本虚拟主机的名称或IP配置。

location块

location块的设置主要涉及到地址定向、数据缓存以及应答控制等功能配置。

解析

配置用户(组)

#user  nobody;

user指令只能在全局块中设置,用于设置拥有启动nginx进程权限的用户(组),以限制其他用户;若希望所有用户都拥有权限,可以将user命令注释或者采用如下用户(组)设置形式:

user nobody;

worker_processes数

worker_processes  1;

worker_processes数是nginx服务器实现并发的关键,其数值本身的设置需要综合考虑到软件、硬件以及系统本身的资源以及能力。worker_processes后面跟的数值指定了nginx服务器本身可以产生的最大worker_processes数,可以通过设置为auto实现nginx进程自动检测可以生成的最大worker_processes数。
worker_processes数的设置最好是CPU的倍数,其数值的合理性很大程度上会影响到nginx服务器的性能:设置太小不能很好的利用多核的优势,设置太大会增加主进程的调度负担,影响系统的IO效率。

worker_cpu_addinity参数

worker_cpu_addinity指令用于为每个工作进程分配CPU的工作内核,设置较为麻烦。一般由几组(这里的组数取决于设置的worker_processes数)二进制数组成。每组对应于一个工作进程,每组中每一位对应于进程使用CPU的情况,以如下示例说明:

worker_processes  4;worker_cpu_addinity 0001 0100 1000 0010;

上述的nginx配置表示,一共存在4个工作进程,并为每个进程都分配了CPU的使用情况:0001表示为第一个工作进程分配CPU,0代表不使用,1代表使用,因此第一个工作进程将使用第一个CPU;0100代表为第二个工作进程分配CPU,并且分配的是第三个CPU;同理1000代表为第三个工作进程分配第四个CPU,0010代表为第四个进程分配第二个CPU。
值得注意的是,有多少个进程我们就应该设置多少组二进制数来配置工作进程的CPU使用情况(多组工作进程可以使用相同的CPU);同时有多少个CPU,每组二进制数就应该包含多少位(二进制的位数严格等于CPU的数量,并且二进制位排列顺序是与CPU顺序相反的)。

pid存放路径

#pid        logs/nginx.pid;

pid指令用于设置nginx进程的pid存放路径,默认存放于logs/nginx.pid。pid指令后可跟绝对路径以及相对路径,不过值得注意的是,路径一定要包含文件名,否则会报错。

错误日志存放路径

#error_log  logs/error.log;#error_log  logs/error.log  notice;#error_log  logs/error.log  info;

error_log指令用于配置错误日志的存放路径,其详细指令如下:

error_log file|stderr [debug|info|notice|warn|error|crit|alert|emerg];

可以看出error_log指令可以将错误日志输出到文件以及标准错误输出,同时可以指定日志级别。在指定日志级别时高于指定级别的错误也将会被记录。

引入配置文件

include       mime.types;

include指令用于引入配置文件,使得可在主配置文件中引入外部配置文件以及第三方配置文件,此外include指令不是非得放在http块中,而是可以放在配置文件的任意地方。

最大连接数

worker_connections  1024;

worker_connections指令用于配置每个worker process允许同时开启的最大连接数,默认为512,同时只能在events块中进行配置。
同时,只允许在events块中进行配置的选项包括网络连接的序列化、是否允许同时接收多个连接、事件驱动模型,其使用方式如下:

accept_mutex on|off;    #默认为on状态,可有效防止多个进程对连接的争抢multi_accept on|off;    #配置worker process是否具有同时接收多个新到达网络连接的能力,默认为off状态use select|poll|kqueue|epoll|rtsig|eventport|/dev/poll   #用于配置处理网络消息的事件驱动模型

MIME-Type定义

include       mime.types;default_type  application/octet-stream;

inclue指令引入的mime.types文件中采用types结构定义了浏览器能够识别的MIME类型以及其文件后缀名;default_type指令配置了用于处理前端请求的MIME类型,默认为text/plain。

自定义服务日志

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;

log_format指令用于自定义服务日志的格式,并为自定义格式定义名字,只能用于http块中,语法为:

log_format name string ...;

关于String所代表的服务日志格式字符串可以参考nginx内置变量详解。
access_log指令用于指定服务日志所存放的路径以及采用的日志记录格式,语法为:

access_log path[format[buffer=size];

其中path指定路径,format可以采用log_format指令自定义的日志格式,size指定临时存放日志的内存缓冲区的大小。

sendfile传输方式

sendfile        on;

sendfile指令用于开启或关闭sendfile()传输文件,默认是关闭状态,可结合sendfile_max_chunk(用于配置每个worker process调用sendfile()传输数据量的最大值)指令使用。

连接超时以及连接请求次数

keepalive_timeout  65;

keepalive_timeout指令用于配置连接打开之后的保持时间,默认为75s。
此外,keepalive_timeout指令可以跟两个参数,第一个参数体现上述功能,第二个参数用于设置keep-alive消息头保持活动的有效时间。同时,keepalive_timeout指令参数的设置要综合考虑服务器的访问数量、处理速度以及网络状况等。

keepalive_requests number;

keepalive_requests指令用于配置某一连接想nginx服务器发送请求的次数,默认为100。

响应超时时间

send_timeout 10s;

send_timeout指令用于设置nginx服务器响应客户端的超时时间,仅针对两个客户端和服务端建立连接后某次活动之间的时间。

网络监听

listen       80;

listen指令主要有三种配置方式,即配置监听的IP地址、配置监听的端口以及配置UNIX Domain Socket。此外,虽然listen指令拥有许多可选配置项,但在实际使用时一般比较简单,例如默认配置中的配置方式表示的是监听80端口上的所有IP连接。

虚拟主机配置

server_name  localhost;

server_name指令用于配置虚拟主机的名称,可包含多个名称,同时在server_name指令中可以采用通配符以及正则表达式定义虚拟主机的名称。当出现多个匹配名称时。按照如下优先级进行匹配:

1. 完全匹配2. 通配符在前的匹配3. 通配符在后的匹配4. 正则表达式匹配

配置location块

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

location块的语法结构表述为:

location [=|~|~*|^~] uri {...};

uri为待匹配的字符串,既可以包含正则表达式,也可以不包含。[…]内部的内容为可选项,用于表述uri的匹配方式。
在不包含[…]的可选项时,nginx服务器在server块中的多个location块中寻找uri字符串的匹配,从中选出匹配度最高的location块;紧接着再利用该location块中的uri以及字符串进行匹配,当第一个uri匹配成功时,结束搜索,若找不到匹配,则利用匹配度最高的location块处理请求。
在包含[…]的可选项时,将根据[…]内部的规则进行匹配,具体如下:

"=":请求字符串与uri完全匹配时停止继续搜索,并处理请求;"~":uri包含正则表达式,并且区分大小写;"~*":uri包含正则表达式,并且不区分大小写;"^~":找到最佳匹配的location块之后立即处理请求,而不再搜索location块内的uri;

root指令

root path;

root指令主要用于配置服务器端寻找请求资源的根目录,其中path可包含nginx绝大多数内置命令。root指令可用于http块、server块以及location块,但因为nginx配置中会有多个location块,因此常用于location块中。

location / {            root   html;            index  index.html index.htm;        }

存在上述配置时,当收到/请求时将在/html中进行搜索。

index指令

index file ...;

index指令用于设置网站的默认首页,使得可在发出访问请求时不指定首页名称,同时也可根据请求内容设置不同的首页。

location / {            root   html;            index  index.html index.htm;        }

存在上述配置时,当收到/请求时将在/html目录下搜索index.html和index.htm页面,先找到哪个页面就用哪个页面进行响应。

error_page指令

error_page code ...[=[response]] uri;

error_page指令用于设置网站错误页面,code表示需要处理的http错误代码,response是将code指定错误代码转化为新的错误代码response,uri是错误页面的路径或者网站地址,当为路径是是html目录下的相对路径。

error_page   500 502 503 504  /50x.html;

存在上述配置时将会使用*/html/50x.html相应500、502、503以及504错误。

alias指令

alias path;

alias指令可以改变location块收到的uri请求路径,path为修改后指定的根路径。

nginx访问权限

配置nginx访问权限的方式有两种,一种是基于IP来判断客户端是否拥有对nginx的访问权限,另一种是基于密码认证的方式。
基于IP方式的配置主要涉及allow和deny指令:

allow address|CIDR|all;deny address|CIDR|all;

allow(deny)代表允许(禁止)访问nginx服务器的IP地址、CIDR地址以及允许(禁止)所有客户端访问。此外。nginx在解析过程中将按照配置的顺序进行权限检查,一旦遇到匹配的选项时立即停止向下解析。
基于密码方式配置主要涉及auth_basic和auth_basic_user_file指令:

auth_basic string|off;auth_basic_user_file file;

基于密码方式的配置主要允许通过string以及文件的方式进行认证。string开启认证功能,并配置验证时的提示信息;off关闭认证功能;file为密码文件的绝对路径。

原创粉丝点击