2024-01-15|Nginx配置结构与指令语法
今天做了什么:
1、看 JHipster 源码发现这两个类库
jackson-datatypes-collections 支持 hppc 数据类型。hppc:Java 的高性能原始集合,HPPC 为所有 Java 基元类型提供典型集合的模板生成实现,例如列表、集合和映射。HPPC 背后的主要驱动力是针对最高性能和内存效率的优化。
Handy-URI-Templates A Java URI Template processor implementing RFC6570
2、整理文档《Nginx进程模型》、《Nginx配置结构与指令语法》
Nginx配置结构与指令语法
Nginx的配置文件使用一种块结构和指令语法来定义服务器的行为和属性。以下是Nginx配置文件的基本结构和指令语法:
基本结构和指令语法
- 配置文件结构:
- Nginx配置文件由多个块(Block)组成,每个块用花括号
{}
括起来。 - 主要的配置块是
http
块,用于全局HTTP配置。 - 在
http
块内部,可以包含多个server
块,每个server
块用于配置一个虚拟主机。 - 在
server
块内部,可以包含多个其他块(如location
块),用于配置请求的处理规则。
- Nginx配置文件由多个块(Block)组成,每个块用花括号
- 指令语法:
- 指令是配置文件中的关键字,用于指定服务器的行为和属性。
- 指令通常由指令名称和参数组成,中间使用空格分隔。
- 指令以分号
;
结束。 - 有些指令可以包含块结构,以定义更复杂的配置规则。
以下是一个示例的Nginx配置文件的结构和指令语法:
# 全局配置块
http {
# 全局指令
directive_name parameter;
# 服务器块
server {
# 服务器指令
directive_name parameter;
# 位置块
location / {
# 位置指令
directive_name parameter;
}
}
}
在上面的示例中,http
是全局配置块,server
是服务器块,location
是位置块。每个块内部可以包含相应的指令。
注意事项:
- 指令名称对大小写不敏感,但通常以小写字母表示。
- 多个指令可以在同一行上用分号
;
分隔。 - 注释以
#
开头,并在行的任何位置添加。 - 可以使用变量和预定义变量来设置指令参数。
nginx.conf 配置
user
:设置Nginx工作进程的运行用户和用户组。默认情况下,Nginx以nobody
用户运行。- 语法:
user username [groupname]
- 例如:
user nginx;
或user nginx nginx;
- 语法:
worker_processes
:设置Nginx工作进程的数量。可以是一个整数值或auto
。通常,建议将其设置为服务器可用CPU核心数量的一倍或两倍,以充分利用服务器的性能。- 语法:
worker_processes number | auto
- 语法:
error_log
:用于设置错误日志文件的路径和级别- 语法:
error_log file [level];
file
:指定错误日志文件的路径。level
:可选参数,指定记录的错误级别。- 常见的级别包括
emerg
、alert
、crit
、error
、warn
、notice
、info
和debug
。 - 默认情况下,错误日志的级别为
error
。 - 可以使用
syslog:facility.level
格式将错误日志发送到系统日志(syslog)中。
- 常见的级别包括
- 语法:
events
:配置与Nginx事件相关的参数。- 语法:
events {}
- 常用的参数包括:
worker_connections
:每个工作进程的最大并发连接数。multi_accept
:是否接受多个请求同时处理。use
:指定事件模块(如epoll
、kqueue
等)。
- 语法:
http
:- 语法:
http {}
- 定义全局HTTP配置。
- 常用的指令包括:
include
:包含其他配置文件。default_type
:设置默认的Content-Type。access_log
:定义访问日志的位置和格式。sendfile
:用于控制是否使用操作系统提供的零拷贝技术进行文件传输。当启用sendfile
时,Nginx 可以直接将文件从磁盘读取并发送到客户端,而无需将文件内容复制到用户空间。这可以显著提高文件传输的效率和性能。- 当
sendfile
设置为on
时,Nginx 将尝试使用操作系统提供的sendfile()
系统调用进行文件传输。 - 当
sendfile
设置为off
时,Nginx 将使用普通的方式进行文件传输,即通过将文件内容从磁盘复制到用户空间再发送给客户端。 - 在大多数情况下,默认值
sendfile off
是安全和可靠的选择,但在某些情况下,启用sendfile
可能会带来更好的性能和效率。 - 启用
sendfile
可以降低 CPU 和内存的使用量,但在某些特定的操作系统或文件系统中,可能会出现某些问题,如传输不完整或文件内容损坏等。因此,在启用sendfile
之前,建议进行充分的测试和评估。
- 当
tcp_nopush
:- 当
tcp_nopush
设置为on
时,Nginx 将启用TCP_CORK
选项,数据将被缓冲并一次性发送给客户端,以提高传输效率。 - 当
tcp_nopush
设置为off
时,Nginx 将禁用TCP_CORK
选项,数据将立即发送给客户端,减少延迟。 - 在大多数情况下,使用默认值
tcp_nopush off
是安全和可靠的选择,可以减少延迟。 - 然而,在某些具体的场景中,如高带宽、低延迟的网络环境,启用
tcp_nopush on
可以提高传输效率,但可能会增加延迟。
- 当
keepalive_timeout
:设置与客户端的 HTTP keep-alive 连接的超时时间。HTTP keep-alive 允许客户端和服务器之间的多个 HTTP 请求和响应共享同一个 TCP 连接,以减少连接建立和关闭的开销。keepalive_timeout
指定了一个持续连接的超时时间。如果在超过指定的时间内没有新的请求到达,Nginx 将关闭 keep-alive 连接。- 当客户端发送新请求时,超过
keepalive_timeout
的连接将被关闭,并在必要时重新创建一个新的连接。 - 默认情况下,
keepalive_timeout
设置为 65 秒。 - 如果将
keepalive_timeout
设置为 0,表示禁用 keep-alive 连接,每个请求将使用独立的连接。 - 可以使用
s
后缀表示秒,或使用ms
后缀表示毫秒。
gzip
:用于启用或禁用对响应进行 Gzip 压缩。Gzip 压缩是一种在服务器端将响应内容进行压缩,然后再发送给客户端的技术,可以减少传输数据的大小,提高网络传输效率。- 当
gzip
设置为on
时,Nginx 将对响应内容进行 Gzip 压缩。 - 当
gzip
设置为off
时,Nginx 将禁用 Gzip 压缩。 - 启用 Gzip 压缩可以显著减少传输数据的大小,提高网络传输效率,但会增加服务器的 CPU 和内存负载。
- 在启用 Gzip 压缩之前,建议评估服务器的性能和资源使用情况,确保服务器具备足够的计算资源来处理压缩操作。
- 可以通过配置
gzip_types
指令来指定要进行 Gzip 压缩的 MIME 类型。 - 还可以通过配置
gzip_comp_level
指令来调整 Gzip 压缩的压缩级别。
- 当
- 语法:
server
:- 语法:
server {}
- 配置虚拟主机。
- 常用的指令包括:
listen
:定义监听的端口号和地址。server_name
:定义虚拟主机的域名。root
:指定根目录的路径。index
:定义默认的索引文件。error_page
:用于定义在特定 HTTP 错误状态码出现时,向客户端发送自定义错误页面的路径或重定向到其他 URL。- 语法:
error_page [error_code] [action];
- 适用范围:
http
,server
,location
配置块内部。 error_page
指定了特定 HTTP 错误状态码的处理方式。error_code
参数指定了要处理的 HTTP 错误状态码,如 404、500 等。还可以使用通配符*
匹配所有错误状态码。action
参数定义了对应错误状态码的处理行为。可以有以下几种处理方式:- 发送自定义错误页面:
error_page error_code path;
,其中path
是自定义错误页面的路径。 - 重定向到其他 URL:
error_page error_code redirect_url;
,其中redirect_url
是要重定向的 URL。 - 使用默认的 Nginx 错误页面:
error_page error_code =default;
,将使用 Nginx 默认的错误页面。 - 返回空响应:
error_page error_code =;
,将返回一个空的响应,即不发送任何内容给客户端。
- 发送自定义错误页面:
- 语法:
- 语法:
location
:- 语法:
location [modifier] uri {}
- 配置请求的处理规则。
- 常用的指令包括:
root
:指定根目录的路径。proxy_pass
:反向代理到指定的后端服务器。try_files
:尝试匹配多个文件或路径。
- 语法:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
#默认使用 epoll 模式
use epoll;
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#gzip_types text/plain text/html;
#gzip_comp_level 5;
include /etc/nginx/conf.d/*.conf;
}
Related content
- 2024-11-13|今天我做了什么
- 2024-11-07|今天我做了什么
- 2024-11-06|今天我做了什么
- 2024-11-05|今天我做了什么
- 2024-11-04|SivaLabs博客文章
- 2024-02-20|RateLimitAspect请求限流、调整spring-cloud-examples项目结构
- 2024-02-19|foodie-cloud集成Sharding Sphere实现读写分离
- 2024-02-18|NewRelice应用性能监控、6个Diagrams工具、foodie-food测试
- 2024-02-05|Spring Cloud Config快速入门
- 2024-02-04|foodie-cloud集成Resilience4j