nginx.conf配置

nginx.conf配置

    • 1、检查、启动、重启、停止 nginx服务
    • 2、Nginx服务的主配置文件 nginx.conf
    • 3、全局配置
    • 4、I/O 事件配置
    • 5、HTTP 配置
    • 6、`log_format main`日志格式部分
    • 7、文件缓存部分

1、检查、启动、重启、停止 nginx服务

nginx -t								#检查配置文件是否配置正确
nginx									#启动		
cat /usr/local/nginx/logs/nginx.pid		#先查看nginx的PID号
kill -3 
kill -s QUIT 					#停止
killall -3 nginx
killall -s QUIT nginx

kill -1 							#重载
kill -s HUP 
killall -1 nginx
killall -s HUP nginx
#日志分隔,重新打开日志文件
kill -USR1 
#平滑升级
kill -USR2 

2、Nginx服务的主配置文件 nginx.conf

user nginx;
worker_processes auto;

pid /var/run/nginx.pid;
worker_rlimit_nofile 5120;

events {
  use epoll;
  worker_connections 5120;
  multi_accept on;
}

http {
  include mime.types;
  default_type application/octet-stream;
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 1024m;
  client_body_buffer_size 10m;
  sendfile on;
  tcp_nopush on;
  keepalive_timeout 120;
  server_tokens off;
  tcp_nodelay on;

  log_format main   '{"timestamp":"$time_iso8601",'
                      '"ip":"$http_x_real_ip",'
                      '"client":"$remote_addr",'
                      '"request_method":"$request_method",'
                      '"scheme":"$scheme",'
                      '"domain":"$http_host",'
                      '"request":"$request_uri",'
                      '"args":"$args",'
                      '"referer":"$http_referer",'
                      '"size":"$body_bytes_sent",'
                      '"status":"$status",'
                      '"upstream_status":"$upstream_status",'
                      '"upstreamaddr":"$upstream_addr",'
                      '"responsetime":"$request_time",'
                      '"upstreamtime":"$upstream_response_time",'
                      '"http_user_agent":"$http_user_agent"'
                      '}';
  access_log  /var/log/nginx/access.log  main;

  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;
  fastcgi_intercept_errors on;

#  limit_conn_zone $binary_remote_addr zone=peripconn:50m;
#  #limit_conn_zone $binary_remote_addr zone=perserverconn:50m;
#  limit_req_zone $binary_remote_addr zone=peripreq:50m rate=50r/s;
#  limit_req_zone $binary_remote_addr zone=perserverreq:50m rate=400r/s;
#  limit_conn peripconn 300;
#  #limit_conn perserverconn 2500;
#  limit_req zone=peripreq burst=800 nodelay;
#  limit_req zone=perserverreq burst=4000 nodelay;

  #Gzip Compression
  gzip on;
  gzip_buffers 16 8k;
  gzip_comp_level 6;
  gzip_http_version 1.1;
  gzip_min_length 256;
  gzip_proxied any;
  gzip_vary on;
  gzip_types
    text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
    text/javascript application/javascript application/x-javascript
    text/x-json application/json application/x-web-app-manifest+json
    text/css text/plain text/x-component
    font/opentype application/x-font-ttf application/vnd.ms-fontobject
    image/x-icon;
  gzip_disable "MSIE [1-6]\.(?!.*SV1)";

  #If you have a lot of static files to serve through Nginx then caching of the files' metadata (not the actual files' contents) can save some latency.
  open_file_cache max=1000 inactive=20s;
  open_file_cache_valid 30s;
  open_file_cache_min_uses 2;
  open_file_cache_errors on;
  include /etc/nginx/servers/*.conf;
}

stream {
    include /etc/nginx/servers/*.tcp;
}

3、全局配置

#user nobody; 					#运行用户,若编译时未指定则默认为 nobody
worker_processes 1; 			#工作进程数量,可配置成服务器内核数 * 2
#error_log logs/error.log; 		#错误日志文件的位置
#pid logs/nginx.pid; 			#PID 文件的位置
pid /var/run/nginx.pid;    	#pid文件位置

在这段配置中,pid 是用于指定 Nginx 进程 ID(PID)文件的路径和名称。具体来说,pid /var/run/nginx.pid; 这行配置指定了 PID 文件的路径为 /var/run/nginx.pid

PID 文件是一种记录运行中进程 ID 的文件。当 Nginx 启动时,它会将自己的进程 ID 写入这个文件中,其他程序可以通过读取该文件来获取 Nginx 的进程 ID。PID 文件的作用是帮助系统管理工具和其他相关程序进行与 Nginx 进程的交互。

在实际应用中,PID 文件常常被用于以下情况:

  1. 管理进程:系统管理工具(如 systemd、init.d 等)使用 PID 文件来启动、停止和重启 Nginx 进程。它们会读取 PID 文件中记录的进程 ID,并根据该进程 ID 来执行相应的操作。

  2. 进程监控:其他监控程序或运维工具(如监控系统、自动化脚本等)可以通过读取 PID 文件来获得 Nginx 的进程 ID,并监控进程的状态、性能和健康状况,以及执行相应的操作或报警。

  3. 避免重复启动:在启动脚本或运维操作中,PID 文件通常会先被检查是否存在。如果该文件存在,并且其中记录的进程 ID 对应的进程正在运行中,则会阻止重复启动新的 Nginx 进程,避免冲突和资源浪费。

在本例中,pid /var/run/nginx.pid; 配置指定了 PID 文件的路径为 /var/run/nginx.pid,通过此配置,Nginx 进程会将自己的进程 ID 写入 /var/run/nginx.pid 文件中,以供其他程序进行相应的操作。

worker_rlimit_nofile 5120;   #进程可以打开的最大文件描述符(file descriptor)数量的限制
  • 在 Nginx 的配置文件中,worker_rlimit_nofile 参数用于设置 Nginx工作进程可以打开的最大文件描述符(file descriptor)数量的限制
  • 文件描述符是操作系统为进程分配的用于访问文件、套接字等 I/O 资源的标识符。在 Nginx中,工作进程需要打开文件描述符来处理客户端的请求。当一个 Nginx服务处理大量并发请求时,工作进程可能需要打开大量的文件描述符才能同时处理请求。
  • 通过设置 worker_rlimit_nofile 参数,可以调整 Nginx工作进程的文件描述符数量限制,以确保能够处理并发请求。在上述示例中,设置了 worker_rlimit_nofile 5120;表示每个工作进程的最大文件描述符数量限制为 5120 个。
  • 调整 worker_rlimit_nofile 参数的值可能需要根据具体的系统资源和实际需求进行调整。如果此限制设置过低,可能导致Nginx 无法处理更多的并发请求。而设置过高可能会占用过多系统资源,导致性能下降或对系统稳定性产生负面影响。
    在更改完 worker_rlimit_nofile 参数后,一般需要重新加载或重启 Nginx 服务器使其生效。

4、I/O 事件配置

events {
    use epoll; 					#使用 epoll 模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
    worker_connections 4096; 	#每个进程处理 4096 个连接
    multi_accept on;   			#开启多个并发连接的接收功能
}
#如提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可以同时打开的最大文件数。
#在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制
(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
#可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制.

use epoll:这个指令用于指定 Nginx 使用 epoll 事件驱动模型。epoll 是一种在 Linux 操作系统上高效处理大量并发连接的事件驱动机制。使用 epoll 可以提高 Nginx 处理并发请求的性能。

worker_connections:这个指令用于设置每个工作进程允许的最大并发连接数。在上述示例中,设置为 worker_connections 5120 表示每个工作进程允许处理的最大并发连接数为 5120。

multi_accept on:这个指令用于开启多个并发连接的接收功能。当多个客户端连接同时到达时,开启 multi_accept 可以一次性接受多个连接,提高并发连接的处理效率。

5、HTTP 配置

http {
  include mime.types;
  default_type application/octet-stream;
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 1024m;
  client_body_buffer_size 10m;
  sendfile on;
  tcp_nopush on;
  keepalive_timeout 120;
  server_tokens off;
  tcp_nodelay on;

  log_format main   '{"timestamp":"$time_iso8601",'
                      '"ip":"$http_x_real_ip",'
                      '"client":"$remote_addr",'
                      '"request_method":"$request_method",'
                      '"scheme":"$scheme",'
                      '"domain":"$http_host",'
                      '"request":"$request_uri",'
                      '"args":"$args",'
                      '"referer":"$http_referer",'
                      '"size":"$body_bytes_sent",'
                      '"status":"$status",'
                      '"upstream_status":"$upstream_status",'
                      '"upstreamaddr":"$upstream_addr",'
                      '"responsetime":"$request_time",'
                      '"upstreamtime":"$upstream_response_time",'
                      '"http_user_agent":"$http_user_agent"'
                      '}';
  access_log  /var/log/nginx/access.log  main;

  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;
  fastcgi_intercept_errors on;

#  limit_conn_zone $binary_remote_addr zone=peripconn:50m;
#  #limit_conn_zone $binary_remote_addr zone=perserverconn:50m;
#  limit_req_zone $binary_remote_addr zone=peripreq:50m rate=50r/s;
#  limit_req_zone $binary_remote_addr zone=perserverreq:50m rate=400r/s;
#  limit_conn peripconn 300;
#  #limit_conn perserverconn 2500;
#  limit_req zone=peripreq burst=800 nodelay;
#  limit_req zone=perserverreq burst=4000 nodelay;

  #Gzip Compression
  gzip on;
  gzip_buffers 16 8k;
  gzip_comp_level 6;
  gzip_http_version 1.1;
  gzip_min_length 256;
  gzip_proxied any;
  gzip_vary on;
  gzip_types
    text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
    text/javascript application/javascript application/x-javascript
    text/x-json application/json application/x-web-app-manifest+json
    text/css text/plain text/x-component
    font/opentype application/x-font-ttf application/vnd.ms-fontobject
    image/x-icon;
  gzip_disable "MSIE [1-6]\.(?!.*SV1)";

  #If you have a lot of static files to serve through Nginx then caching of the files' metadata (not the actual files' contents) can save some latency.
  open_file_cache max=1000 inactive=20s;
  open_file_cache_valid 30s;
  open_file_cache_min_uses 2;
  open_file_cache_errors on;
  include /etc/nginx/servers/*.conf;
}

在 Nginx 主配置文件中的 http 块是配置 HTTP 协议相关的参数和指令。以下是其中一些常见的配置项的解释:

  1. include mime.types;:通过 include 指令引入 mime.types 配置文件,该文件定义了文件扩展名与 MIME 类型的映射关系。

  2. default_type application/octet-stream;:当无法识别客户端请求的文件类型时,将使用指定的 MIME 类型 application/octet-stream 作为默认的响应类型。

  3. server_names_hash_bucket_size 128;:指定 server 名字的哈希表的大小。影响到能够配置的 server 数量。数值越大,能够处理的 server 数量也越多。

  4. client_header_buffer_size 32k;:设置客户端请求头的缓冲区大小,用于存储客户端请求的头部信息。

  5. large_client_header_buffers 4 32k;:指定用于存储大型客户端请求头的缓冲区大小和数量。

  6. client_max_body_size 1024m;:指定客户端请求的最大请求体大小,限制客户端能够上传的文件大小。

  7. client_body_buffer_size 10m;:设置客户端请求体缓冲区的大小,用于存储客户端请求提交的主体内容。

  8. sendfile on;:开启使用 sendfile 系统调用向客户端发送文件,提高文件传输的效率。

  9. tcp_nopush on;:开启 TCP 的 nopush 特性,将数据立即发送给客户端,提高网络传输的效率。

  10. keepalive_timeout 120;:指定持久连接(keep-alive)的超时时间,即客户端和服务器之间的空闲连接在超过指定时间后将被关闭。

  11. server_tokens off;:关闭在响应中暴露 Nginx 版本信息的功能,增强服务器的安全性。

  12. tcp_nodelay on;:开启 TCP 的 nodelay 特性,禁用 Nagle 算法,提高网络传输的效率。

以上是一些常见配置项的说明。其中还包括用于自定义日志格式、配置 FastCGI 相关的参数等。这些配置项可以根据实际需求进行调整和优化,以改善 Nginx 服务器的性能和安全性。

这段配置实际上是定义了 Nginx 中的日志格式和相关的访问日志配置,以及 FastCGI 的一些相关参数。

6、log_format main日志格式部分

首先,log_format main 定义了名为 “main” 的日志格式。该格式使用了 JSON 形式的字符串,包含了一些常见的访问日志字段,比如时间戳、客户端 IP、请求方法、请求的域名、URL、参数、参考页面、返回的响应大小、状态码、上游服务的状态码、上游服务器地址、请求的响应时间、上游请求的响应时间和客户端的 User-Agent。

接下来,access_log /var/log/nginx/access.log main 指定了日志的存储路径和使用上述定义的 “main” 日志格式

在 FastCGI 部分,以下参数用于设置 FastCGI 相关的超时和缓冲区大小:

  • fastcgi_connect_timeout 设置连接到 FastCGI 服务器的超时时间为 300 秒。
  • fastcgi_send_timeout 设置向 FastCGI 服务器发送请求的超时时间为 300 秒。
  • fastcgi_read_timeout 设置从 FastCGI 服务器读取响应的超时时间为 300 秒。
  • fastcgi_buffer_size 设置 FastCGI 缓冲区的大小为 64K。
  • fastcgi_buffers 设置用于缓存 FastCGI 响应的缓冲区的数量和大小。
  • fastcgi_busy_buffers_size 设置 FastCGI 忙缓冲区的大小为 128K。
  • fastcgi_temp_file_write_size 设置 FastCGI 临时文件的写入大小为 128K。
  • fastcgi_intercept_errors on 开启 FastCGI 拦截错误功能,当 FastCGI 返回错误时,Nginx 将向客户端返回错误信息。

这些配置用于调整日志的格式和记录方式,以及控制与 FastCGI 服务器的交互过程中的超时和缓冲区大小,以满足具体的需求。

#  limit_conn_zone $binary_remote_addr zone=peripconn:50m;
#  #limit_conn_zone $binary_remote_addr zone=perserverconn:50m;
#  limit_req_zone $binary_remote_addr zone=peripreq:50m rate=50r/s;
#  limit_req_zone $binary_remote_addr zone=perserverreq:50m rate=400r/s;
#  limit_conn peripconn 300;
#  #limit_conn perserverconn 2500;
#  limit_req zone=peripreq burst=800 nodelay;
#  limit_req zone=perserverreq burst=4000 nodelay;

  #Gzip Compression
  gzip on;
  gzip_buffers 16 8k;
  gzip_comp_level 6;
  gzip_http_version 1.1;
  gzip_min_length 256;
  gzip_proxied any;
  gzip_vary on;
  gzip_types
    text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
    text/javascript application/javascript application/x-javascript
    text/x-json application/json application/x-web-app-manifest+json
    text/css text/plain text/x-component
    font/opentype application/x-font-ttf application/vnd.ms-fontobject
    image/x-icon;
  gzip_disable "MSIE [1-6]\.(?!.*SV1)";

这部分配置主要涉及两个方面:连接速率和请求速率的限制以及 Gzip 压缩。

对于连接速率和请求速率的限制,注释代码块中的配置实际上都是被注释掉的,也就是说这些限制没有生效。这些限制可以用于控制客户端对服务器的连接和请求速率,以保护服务器免受过多的连接和请求的影响。其中,
limit_conn_zone 用于定义连接速率限制的共享内存区域,
limit_conn 则指定了具体的连接数限制,
limit_req_zone 用于定义请求速率限制的共享内存区域,
limit_req 则指定了具体的请求速率限制。

而对于 Gzip 压缩的配置,以下是各个配置项的含义:

  • gzip on 开启 Gzip 压缩。
  • gzip_buffers 16 8k 设置 Gzip 缓冲区的数量和大小。
  • gzip_comp_level 6 设置 Gzip 压缩级别,级别越高压缩率越高,但消耗的 CPU 资源也越多。
  • gzip_http_version 1.1 开启对 HTTP 1.1 协议的 Gzip 压缩支持。
  • gzip_min_length 256 设置只压缩长度大于 256 字节的响应内容。
  • gzip_proxied any 适用于所有类型的代理服务器。
  • gzip_vary on 在响应头中添加 “Vary: Accept-Encoding”,通知代理服务器根据不同的压缩方式缓存响应。
  • gzip_disable "MSIE [1-6]\.(?!.*SV1)" 禁用某些特定的浏览器,不对其进行 Gzip 压缩。
  • gzip_types 定义需要进行 Gzip 压缩的 MIME 类型。

这段gzip_types 配置是用于指定需要进行 Gzip 压缩的 MIME 类型。具体来说,它定义了一系列文本类型和资源类型。

下面是对每个类型的详细解释:

  • text/xml:XML 数据类型。

  • application/xml:XML 文件类型。

  • application/atom+xml:Atom XML 格式文件类型。

  • application/rss+xml:RSS XML 格式文件类型。

  • application/xhtml+xml:XHTML 文件类型。

  • image/svg+xml:可缩放矢量图形文件类型,常用于网页中显示矢量图形。

  • text/javascript:纯文本格式的 JavaScript 文件类型。

  • application/javascript:JavaScript 文件类型。

  • application/x-javascript:JavaScript 文件类型。

  • text/x-json:纯文本格式的 JSON 数据类型。

  • application/json:JSON 数据类型。

  • application/x-web-app-manifest+json:Web App Manifest JSON 文件类型,用于定义 Web 应用的相关信息。

  • text/css:Cascading Style Sheets (CSS) 文件类型。

  • text/plain:纯文本文件类型。

  • text/x-component:用于定义 Web 组件的类型。

  • font/opentype:OpenType 字体文件类型。

  • application/x-font-ttf:TrueType 字体文件类型。

  • application/vnd.ms-fontobject:Microsoft 字体文件类型。

  • image/x-icon:ICO 图标文件类型,常用于网站的 favicon。

这些 MIME 类型表示了不同的资源文件的类型。在客户端请求这些类型的文件时,如果开启了 Gzip 压缩,并且符合其他 Gzip 配置的条件,服务器会对这些文件进行 Gzip 压缩,然后再发送给客户端,以减少传输的数据量,提高传输效率。

这些配置用于开启和调整 Gzip 压缩功能,通过对文本类型的响应进行压缩,可以减少传输的数据量,提高网站的响应速度。

7、文件缓存部分

  #If you have a lot of static files to serve through Nginx then caching of the files' metadata 
  #(not the actual files' contents) can save some latency.
  open_file_cache max=1000 inactive=20s;
  open_file_cache_valid 30s;
  open_file_cache_min_uses 2;
  open_file_cache_errors on;
  include /etc/nginx/servers/*.conf;
}

stream {
    include /etc/nginx/servers/*.tcp;
} 

这段配置是在 Nginx 中实现静态文件缓存的设置。静态文件缓存可以减少对文件元数据(而不是实际文件内容)的访问延迟。

具体来说,这段配置包括以下几个指令:

  • open_file_cache: 开启文件缓存,并设置相关参数。

    • max=1000: 设置缓存中保存的文件描述符的最大数量为 1000 个。文件描述符是操作系统为每个打开的文件维护的一个数据结构,用于对文件进行操作。
    • inactive=20s: 设置文件描述符在 20 秒内没有被使用时被视为不活跃,不再保留在缓存中。这样可以在一定时间内保留最近使用的文件描述符。
    • valid=30s: 设置文件描述符的缓存有效期为 30 秒。在这个时间内,可以直接从缓存中获取文件描述符而不需要重新打开文件。
    • min_uses=2: 设置文件描述符的最低使用次数为 2 次。只有当文件被使用了至少 2 次才会被缓存起来,这样可以避免对很少使用的文件进行缓存。
  • open_file_cache_errors on: 开启对文件打开过程中的错误进行缓存。

  • include /etc/nginx/servers/*.conf;: 包含其他配置文件,这里指定了一个目录,所有以 .conf 结尾的文件都会被包含进来,用于配置具体的服务器。

以上的配置都是在 http 块内,表示对 HTTP 请求的文件进行缓存。而最后的 stream 块是用于配置对 TCP/UDP 连接的文件进行缓存,其中的 include /etc/nginx/servers/*.tcp; 用于包含 TCP/UDP 服务器的具体配置文件。

这段配置的作用是为了提高静态文件的访问效率,通过缓存文件描述符来减少对文件元数据的访问延迟,提供更快速的静态文件服务。

你可能感兴趣的:(运维工程师学习,1024程序员节,linux,运维,学习,nginx)