深入解析Nginx配置文件
Nginx是一款高性能的HTTP和反向代理服务器,广泛应用于各类Web服务器。作为一名Java后端开发工程师,了解Nginx配置文件的细节是非常有必要的。之前工作中遇到的问题,都是一加一改就了事了,从来没有真正仔细研究过,那么本篇文章就深入解析Nginx配置文件。
一、Nginx配置文件的基本结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| user www-data; worker_processes auto; pid /run/nginx.pid;
events { worker_connections 768; }
http {
sendfile on; tcp_nopush on; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log;
gzip on; include /etc/nginx/conf.d/*.conf; }
|
主要分成四部分:
1.main(全局设置)
:main
部分设置的指令将影响其它所有部分的设置;
2.server(主机设置)
: server
部分的指令主要用于指定虚拟主机域名、IP和端口;
3.upstream(反向代理、负载均衡相关配置)
: upstream
的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡
4. location(URL匹配特定位置后的设置)
: location
部分用于匹配网页位置(比如,根目录“/”,“/images”,等等)。
每部分包含若干个指令。
他们之间的关系式:server继承main,location继承server;upstream既不会继承指令也不会被继承。它有自己的特殊指令,不需要在其他地方的应用。
二、配置项详解
1.全局指令
user
: 指定Nginx进程的运行用户。默认值通常为nginx
。
worker_processes
: 指定Nginx的工作进程数。根据服务器的CPU核心数进行设置可以提升性能。
error_log
: 定义错误日志文件的位置和日志级别。日志级别包括debug
、info
、notice
、warn
、error
、crit
等。
pid
: 指定存放Nginx进程ID文件的位置。
2.事件模块
1 2 3 4
| events { worker_connections 768; }
|
worker_connections
: 每个工作进程可以同时处理的最大连接数。与worker_processes
一起决定了Nginx的并发处理能力。
3.HTTP模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| http { sendfile on; tcp_nopush on; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log;
gzip on; include /etc/nginx/conf.d/*.conf; }
|
include
: 包含其他配置文件。/etc/nginx/mime.types
定义了MIME类型,/etc/nginx/conf.d/*.conf
包含了其他子配置文件。
default_type
: 设置默认的MIME类型。
log_format
: 定义日志格式。
access_log:
定义访问日志文件的位置和使用的日志格式。
sendfile
: 启用高效的文件传输模式。默认开启。
keepalive_timeout
: 定义客户端连接保持活动的时间。
gzip on
:开启gzip压缩输出
三、Server模块
http
模块中的server
块定义了虚拟主机配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| server { listen 80; server_name localhost;
location / { root /usr/share/nginx/html; index index.html index.htm; }
error_page 404 /404.html; location = /404.html { internal; }
error_page 500 502 503 504 /50x.html; location = /50x.html { internal; } }
|
listen
: 定义服务器监听的端口。
server_name
: 定义虚拟主机名。
location
: 用于匹配URI,定义请求的处理方式。
root
: 设置请求的根目录。
index
: 定义默认的索引文件。
error_page
: 指定错误页面。当发生404错误时,跳转到/404.html
。
四、Location指令
location
指令用于匹配请求URI,可以根据不同的匹配规则来处理请求。
匹配优先级:精确匹配 > 正则匹配 > 前缀匹配。
1 2 3 4 5 6 7 8 9 10 11
| error_page 404 /404.html; location = /404.html { internal; }
error_page 500 502 503 504 /50x.html; location = /50x.html { internal; }
|
1 2 3 4 5 6 7
| location ~* \.(jpg|jpeg|png|gif|ico|css|js|webp|svg|woff|woff2|ttf|eot)$ { expires 30d; access_log off; add_header Cache-Control "public, no-transform"; }
|
五、反向代理配置
反向代理是Nginx常用的功能之一,通过配置Nginx作为反向代理服务器,可以实现负载均衡、缓存、SSL终止等功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| location / { proxy_pass http://127.0.0.1:88; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host; client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
|
proxy_pass
: 指定后端服务器的地址。
proxy_set_header
: 设置请求头信息,传递客户端的真实IP地址等信息。
六、负载均衡配置
Nginx支持多种负载均衡策略,包括轮询、IP哈希、最少连接等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| http { upstream backend { server backend1.example.com; server backend2.example.com; }
server { listen 80; server_name example.com;
location / { proxy_pass http://backend; } } }
|
upstream
: 定义后端服务器组。
proxy_pass
: 将请求转发到后端服务器组。