Nginx 配置文件介绍
本文争对nginx-1.22.0
nginx的核心配置文件是nginx.conf.
1、基本配置
(1)、worker_processes 定义工作进程的数量
最佳值取决于许多因素,包括(但不限于)CPU内核的数量、存储数据的硬盘驱动器的数量以及负载模式。当有人怀疑时,将其设置为可用CPU内核的数量将是一个好的开始(值“auto”将尝试自动检测它)。
(2)、error_log 配置日志记录
可以在同一配置级别【debug、info、notice、warn、error、crit、alert或emerg。】上指定多个日志。如果在主配置级别上未明确定义将日志写入文件,则将使用默认文件。
第一个参数定义将存储日志的文件。特殊值stderr选择标准错误文件。可以通过指定“syslog:”前缀来配置对syslog的日志记录。记录到循环内存缓冲区可以通过指定“memory:”前缀和缓冲区大小进行配置,通常用于调试(1.7.11)。
第二个参数决定日志记录的级别,可以是以下参数之一:debug、info、notice、warn、error、crit、alert或emerg。以上日志级别按严重性增加的顺序列出。设置某个日志级别将导致记录指定和更严重日志级别的所有消息。例如,默认级别错误将导致记录错误、crit、alert和emerg消息。注:默认级别error
(3)、pid 进程id配置
2、events
提供配置文件上下文,其中指定了影响连接处理的指令。
2.1 、worker_connections 设置work进程(worker_processes)可以同时打开的最大连接数。 正式环境可以放大(65535)
这个数字包括所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接。另一个考虑因素是,同时连接的实际数量不能超过当前打开文件的最大数量限制,该限制可以由worker_rlimit_nofile更改。
总连接数=worker_processes * worker_connections
2.2 multi_accept
如果禁用multi_accept,工作进程将一次接受一个新连接。否则,工作进程将一次接受所有新连接。
如果使用kqueue连接处理方法,则忽略该指令,因为它会报告等待接受的新连接数。
2.3 use epoll
设置用于复用客户端线程的轮询方法。具体参考epoll原理
更改工作进程的最大打开文件数(RLIMIT_NOFILE)限制。用于在不重新启动主进程的情况下增加限制。
4、http配置
提供指定HTTP服务器指令的配置文件上下文。
4.1 include mime.types;
配置支持的多媒体类型,在conf/mime.types文件下查看支持的类型
4.2 default_type
定义响应的默认MIME类型。可以使用types指令设置文件扩展名到MIME类型的映射。 默认是application/octet-stream; 字节流类型,能兼容绝大多数的资源文件.
4.3 log_format
定义日志格式,相关内容查看文档
4.4 access_log 访问日志
简单使用方式 access_log 日志路径 使用的日志模板(log_format);
4.5 sendfile 高效文件传输模式
在此配置中,使用SF_NODISKIO标志调用sendfile(),这将导致它不会在磁盘I/O上阻塞,而是报告数据不在内存中。然后,nginx通过读取一个字节来启动异步数据加载。在第一次读取时,FreeBSD内核将文件的前128K字节加载到内存中,尽管下一次读取将只加载16K块中的数据。这可以使用read_ahead指令进行更改。
限制单个sendfile()调用中可以传输的数据量。如果没有限制,一个快速连接可能会完全占用工作进程。 默认2m.
4.7 tcp_nopush
sendfile可以开启高效的文件传输模式,tcp_nopush开启可以确保在发送到客户端之前数据包已经充分“填满”, 这大大减少了网络开销,并加快了文件发送的速度
4.8 tcp_nodelay 该指令必须在keep-alive连接开启的情况下才生效,来提高网络包传输的'实时性'
启用或禁用TCP_NODELAY选项的使用。当连接转换为保持活动状态时,将启用该选项。此外,它在SSL连接、无缓冲代理和WebSocket代理上启用。
当tcp_nopush到达最后一个可能因为没有“填满”而暂停的数据包时,Nginx会忽略tcp_nopush参数, 然后,tcp_nodelay强制套接字发送数据。由此可知,TCP_NOPUSH可以与TCP_NODELAY一起设置,它比单独配置TCP_NODELAY具有更强的性能。所以我们可以使用如下配置来优化Nginx静态资源的处理
注意:4.5~4.8全部合理的开启和设置,能有效的解决静态资源访问处理的问题,提升效率.
4.9 keepalive_timeout 长连接超时时间设置
第一个参数设置了一个超时,在此期间,keep-alive客户端连接将在服务器端保持打开状态。零值将禁用保持活动状态的客户端连接。可选的第二个参数在“Keep Alive:timeout=time”响应头字段中设置一个值。两个参数可能不同。
Mozilla和Konqueror可以识别“Keep Alive:timeout=time”标题字段。MSIE会在大约60秒内关闭保持活动连接。
5、server配置
5.1 listen 配置监听端口
5.2 server_name 服务名称
5.3 charset 字符集配置
5.4 access_log 和4.4 access_log类似 如果在server中给了会覆盖4.4中的
5.5 location
语法 location [ = | ~ | ~* | ^~ |@ ] uri{...}
位置 server,location
uri变量是待匹配的请求字符串,可以不包含正则表达式,也可以包含正则表达式,那么nginx服务器在搜索匹配location的时候,是先使用不包含正则表达式进行匹配,找到一个匹配度最高的一个,然后在通过包含正则表达式的进行匹配,如果能匹配到直接访问,匹配不到,就使用刚才匹配度最高的那个location来处理请求。'
5.5.1 示例一 配置请求访问nginx安装目录下的静态资源
location / {
root html;
index index.html index.htm;
}
匹配访问ip地址加监听端口加/的请求,请求会重定向到nginx root(根目录)的html文件夹,访问index.html或者index.htm页面.
5.5.2 示例二 精准匹配
location = /50x.html {
root html;
}
访问ip地址加监听端口加/50x.html并转发
5.5.3示例三 配置禁止访问的文件
#location ~ /\.ht {
# deny all;
#}
5.5.3示例四 配置https访问
# 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; # } #}
完整配置文件内容如下:
#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; worker_rlimit_nofile 65535; events { use epoll; worker_connections 65535; } http { include mime.types; 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; tcp_nodelay on; #keepalive_timeout 0; keepalive_timeout 65; gzip on; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; 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; # } #} }