Nginx的配置文件结构
Nginx的默认配置文件nginx.conf位于其安装目录的conf目录下。nginx的配置文件中的指令可以分为两种:
1.简单指令(simple directive),形如key value;
2.块指令(block directive), 形如key {simple_key simple_value;} 块指令中包含有简单指令和块指令。
nginx.conf由多个块指令组成,最外面的块是main,main包含Events和HTTP,HTTP包含upstream和多个Server,Server又包含多个location。当然main、events、http、upstream、server这些块中也都有简单指令
main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。
- main块设置的指令将影响其他所有设置;
- server块的指令主要用于指定主机和端口;
- upstream指令主要用于负载均衡,设置一系列的后端服务器;
- location块用于匹配网页位置。
这四者之间的关系式:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。
在这四个部分当中,每个部分都包含若干指令,这些指令主要包含Nginx的主模块指令、事件模块指令、HTTP核心模块指令,同时每个部分还可以使用其他HTTP模块指令,例如Http SSL模块、HttpGzip Static模块和Http Addition模块等。
Nginx的全局配置(Main块)
代码如下:
user nobody nobody; worker_processes 2; error_log logs/error.log notice; pid logs/nginx.pid; worker_rlimit_nofile 65535;
每个配置选项的含义解释如下:
- user是个主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。
- worker_processes是个主模块指令,指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可。
- error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。
- pid是个主模块指令,用来指定进程pid的存储文件位置。
- worker_rlimit_nofile用于绑定worker进程和CPU, Linux内核2.4以上可用。
events块
events事件指令是设定Nginx的工作模式及连接数上限:
events{ use epoll; worker_connections 65536; }
use是个事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选。
worker_connections也是个事件模块指令,用于定义Nginx每个进程的最大连接数,默认是1024。最大客户端连接数由worker_processes和worker_connections决定,即Max_client=worker_processes*worker_connections。
在作为反向代理时,max_clients变为:max_clients = worker_processes * worker_connections/4。
进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效
HTTP服务器配置
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属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx是不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口。
下面的代码实现对日志格式的设定:
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"';
log_format是Nginx的HttpLog模块指令,用于指定Nginx日志的输出格式。main为此日志输出格式的名称,可以在下面的access_log指令中引用。
- client_max_body_size用来设置允许客户端请求的最大的单个文件字节数;
- client_header_buffer_size用于指定来自客户端请求头的headerbuffer大小。对于大多数请求,1K的缓冲区大小已经足够,如果自定义了消息头或有更大的Cookie,可以增加缓冲区大小。这里设置为32K;
- large_client_header_buffers用来指定客户端请求中较大的消息头的缓存最大数量和大小, “4”为个数,“128K”为大小,最大缓存量为4个128K;
- 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的HttpGzip模块。这个模块支持在线实时压缩输出数据流,这个模块配置可以放在http块中。
看是否安装了HttpGzip模块:
root@vps ~]# /opt/nginx/sbin/nginx -V nginx version: nginx/1.0.14 built by gcc 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) configure arguments: --with-http_stub_status_module --with-http_gzip_static_module --prefix=/opt/nginx
通过/opt/nginx/sbin/nginx -V命令可以查看安装Nginx时的编译选项,由输出可知,我们已经安装了HttpGzip模块。
下面是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-javascript text/css application/xml; gzip_vary on; gzip_disable "MSIE [1-6]."
- gzip用于设置开启或者关闭gzip模块,“gzip on”表示开启GZIP压缩,实时压缩输出数据流;
- gzip_min_length设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,不管页面多大都进行压缩。建议设置成大于1K的字节数,小于1K可能会越压越大;
- gzip_buffers表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果;
- gzip_http_version用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可;
- gzip_comp_level用来指定GZIP压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理最慢,也比较消耗cpu资源;
- gzip_types用来指定压缩的类型,默认值: gzip_types text/html (默认不对js/css文件进行压缩),一般情况下,在压缩常规文件时可以设置为:
gzip_types text/plain application/x-javascript text/css application/xml text/javascript;
注意: 图片/mp3这样的二进制文件,不必压缩。因为压缩率比较小, 比如100->80字节,而且压缩也是耗费CPU资源的。 - gzip_vary开启时,将带着 'Vary: Accept-Encoding'头域的响应头部,主要功能是告诉浏览器发送的数据经过了压缩处理。开启后的效果是在响应头部添加了Accept-Encoding: gzip,这对于本身不支持Gzip压缩的浏览器是有用的
- gzip_disable "MSIE [1-6]."禁用IE6的gzip压缩,针对不同类型的浏览器发起的请求,选择性地开启或关闭Gzip功能,支持使用正则表达式
upstream 负载均衡配置
下面设定负载均衡的服务器列表:
upstream cszhi.com{ ip_hash; server 192.168.8.11:80; server 192.168.8.12:80 down; server 192.168.8.13:8009 max_fails=3 fail_timeout=20s; server 192.168.8.146:8080; }
upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。
在上面的设定中,通过upstream指令指定了一个负载均衡器的名称cszhi.com。这个名称可以任意指定,在后面需要的地方直接调用即可。
Nginx的负载均衡模块目前支持4种调度算法,下面进行分别介绍,其中后两项属于第三方的调度方法。
- 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响;
- Weight:指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下;
- ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题;
- fair:比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块;
- url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:
- down:表示当前的server暂时不参与负载均衡;
- backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻;
- max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误;
- fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
注意,当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。
server虚拟主机配置
下面介绍对虚拟主机的配置。
建议将对虚拟主机进行配置的内容写进另外一个文件,然后通过include指令包含进来,这样更便于维护和管理。
server{ listen 80; server_name 192.168.8.18 cszhi.com; index index.html index.htm index.php; root /wwwroot/www.cszhi.com charset gb2312; access_log logs/www.ixdba.net.access.log main; }
server标志定义虚拟主机开始,listen用于指定虚拟主机的服务端口,server_name用来指定IP地址或者域名,多个域名之间用空格分 开。index用于设定访问的默认首页地址,root指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径。Charset用于 设置网页的默认编码格式。access_log用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。
location URL匹配配置
location路径匹配可以分四类:
1. =:表示精确匹配
2. ^~:表示url以某个字符串开头
3. 正则:包括 ~(区分大小写匹配),~*(不区分大小写匹配),!~(区分大小写不匹配),!~*(不区分大小写不匹配)
4. / : 后面不跟路径表示全匹配,后面跟路径表示url以某个字符串开头
这四类的优先顺序是 "=">"^~">正则>"/",同一类location按配置文件先后顺序进行匹配,其中"/"这一类比较特殊它优先匹配长路径
autoindex目录浏览功能
当你把nginx当做文件服务器时,你会发现默认访问目录地址的被禁止的。这时候就可以在server或location段里添加上autoindex on;来启用目录浏览。这时候访问目录就能得到目录下列表页面。与autoindex相关的还有两个配置参数
autoindex_exact_size on;
on:默认值,显示文件确切大小,单位是bytes
off:显示文件大概大小,单位是kB或者MB或者GB
autoindex_localtime off;
on:显示文件时间时使用本地时区时间
off:默认值,显示文件时间为GMT时间
相关推荐
本教程将介绍一种方法,使得在Windows环境下,Nginx配置文件修改后能够自动加载并重启,以实现配置的即时生效。 首先,`nginx.conf`是Nginx的主要配置文件,它包含了服务器的各项设置,如监听端口、服务器块、反向...
在标题“notepad++编辑nginx配置文件支持高亮”中,我们关注的是如何在Notepad++中实现对Nginx配置文件的语法高亮显示,这将极大提升开发者的阅读和编写效率。 Nginx是一款高性能的HTTP和反向代理服务器,其配置...
nginx配置 nginx配置文件参考 nginx配置文件参考
Nginx 配置文件 nginx.conf 详解 Nginx 配置文件 nginx.conf 是 Nginx 服务器的核心配置文件,它控制着 Nginx 服务器的行为和性能。在这个配置文件中,我们可以设置服务器的用户和组、工作进程数、错误日志、进程...
Nginx 配置文件
在本场景中,我们要探讨的是如何通过Nginx配置文件实现客户端IP的转发功能,这对于网站访问日志分析、安全策略实施以及负载均衡等都有着重要的作用。我们将主要分析两个配置文件:`nginx.conf`和`default.vhosts....
一个开源的Linux下运行的命令行工具,能将Apache的配置文件转换成相应的... 该工具从Apache Web服务器中的各模块功能的角度进行分析,生成Nginx中相应模块的配置方式,然后以报告的形式生成转换后的Nginx配置文件。
在此记录下Nginx服务器nginx.conf的配置文件说明, 部分注释收集与网络. #运行用户 user www-data; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 error_log /var/log/...
解析nginx配置文件,并将nginx配置文件格式化成对象,方便java程序管理nginx配置。解析配置文件并非使用正则匹配,而是使用语法分析树处理解决的。 标签:nginx
Nginx配置文件原始版本,这是刚下来的Nginx服务器最原始的版本内容,下载覆盖即可。
Nginx配置文件(nginx.conf)配置详解 Nginx配置文件(nginx.conf)是Nginx服务器的核心配置文件,用于定义Nginx服务器的行为和配置。下面是Nginx配置文件的详细配置解释: 用户和组 Nginx配置文件中指定了用户和组,...
Nginx的配置文件通常位于/etc/nginx/nginx.conf或/usr/local/nginx/conf/nginx.conf,根据不同的系统和安装路径可能会有所差异。 在Nginx的配置文件中,主要有以下几个部分: 1. **全局块**:这部分设置影响Nginx...
### Nginx配置文件详解 #### 一、引言 Nginx是一款广泛使用的高性能Web服务器及反向代理服务器,以其高效稳定而著称。它不仅适用于简单的静态页面服务,还可以作为动态应用服务器的反向代理,实现负载均衡等功能。...
在本例中,Nginx配置文件可能是为了在Docker容器内优化网络服务性能和资源利用率。 4. **配置文件详解**:Nginx的配置文件通常以`.conf`为扩展名,包含一系列指令和块。`http`、`server`和`location`是最基本的配置...
一个开源的Linux下运行... 该工具从Apache Web服务器中的各模块功能的角度进行分析,生成Nginx中相应模块的配置方式,然后以报告的形式生成转换后的Nginx配置文件。 官网:https://github.com/leeleander/apache2nginx
在部署 Vue 项目时,Nginx 配置文件 `nginx.conf` 的关键设置如下: 1. **基本配置**: - `server` 块:定义一个监听特定端口(通常是80)的服务器实例。 ```nginx server { listen 80; server_name your...
总结来说,配置Nginx的文件上传功能涉及下载和编译第三方模块,修改Nginx配置文件以处理上传请求和进度查询,最后通过客户端与服务器的交互实现文件的上传和进度反馈。这个过程需要理解Nginx的工作原理以及如何与...
首先,配置文件的开头定义了 Nginx 运行的基本参数。`user nobody nobody;` 设置了 Nginx 的运行用户为 nobody,这意味着 Nginx 服务将以低权限用户身份运行,增加了系统安全性。`worker_processes 2;` 设定了 Nginx...
Nginx 配置文件详解 Nginx 配置文件是 Nginx 服务器的核心组件之一,负责控制 Nginx 服务器的行为和性能。本文将详细解释 Nginx 配置文件的结构和各个组件的作用。 全局配置 Nginx 配置文件的第一部分是全局配置...