Nginx配置文件详解(万字图文总结)

文摘   2024-08-28 17:29   四川  

关注mikechen的架构笔记十余年BAT架构经验倾囊相授


大家好,我是mikechen。

Nginx是非常重要的负载均衡,也是大型架构必备技能,下面我就全面来详解Nginx配置文件@mikechen


最新mikechen原创超30万字《阿里架构师进阶专题合集》和《最全大厂面试题及答案总结》,请关注本公众号【mikechen的架构笔记】,后台回复:资料,即可领取。


Nginx

Nginx 是一款高性能的 HTTP 服务器和反向代理服务器,Nginx 以其轻量级、可扩展性、和高并发处理能力而闻名。

Nginx广泛应用于各种 Web 服务环境中,比如:作为一个静态和动态内容的 Web 服务器。

Nginx 可以直接处理 HTTP 请求,提供静态文件(如:HTML、CSS、JS、图片...等)。

Nginx 支持对传输内容进行压缩,如 Gzip 压缩,这不仅可以节省带宽,还能加快内容传输速度。

Nginx 作为反向代理服务器,接收客户端请求并将其转发给后端服务器,同时返回来自后端服务器的响应。

Nginx广泛用于负载均衡、请求缓存和加速、SSL 终端.......等。


Nginx配置文件

Nginx 的配置文件主要由以下几部分组成:全局块、events 块、http 块,以及 server 块。。。等。

如下图所示:

全局块:配置影响整个 “Nginx" 服务的指令;

events 块:配置 Nginx 如何处理连接相关的指令;

http 块:主要配置: HTTP 服务器相关的指令,包括:处理 HTTP 请求。。。等行为。

下面,我分别重点详解Nginx核心的配置文件@mikechen


Nginx全局配置

全局配置部分通常位于文件的最开头,这些指令适用于 Nginx 的整个生命周期。

# 全局配置
user  www-data; # 定义Nginx的运行用户worker_processes  4; # 设置工作进程数,通常设置为CPU核心数error_log  /var/log/nginx/error.log warn; # 定义错误日志路径和日志级别pid        /var/run/nginx.pid; # 存放Nginx进程ID的文件位置
  • user:指定 Nginx 进程的用户/和组;

  • worker_processes:指定工作进程的数量,auto 表示自动检测 CPU 核数并设置合适的进程数。

  • error_log:定义错误日志的路径及日志级别,比如:日志级别包括 debug、info、notice、warn、error、crit、alert 和 emerg。

  • pid:指定存放 Nginx 主进程 ID 的文件路径。


events 块

events 块主要用于:配置、与网络连接和工作线程相关的参数。

events 块配置,影响 Nginx 与操作系统之间的网络通信方式。

配置如下:

events {    worker_connections  1024; # 每个工作进程允许的最大连接数}
  • worker_connections:每个工作进程允许的最大连接数;

  • worker_connections 1024:每个工作进程可以同时打开的最大连接数,该数值影响Nginx的并发能力;


http 块

http 块是 Nginx 的核心,用于处理 HTTP 请求。

配置如下:

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; include /etc/nginx/conf.d/*.conf;}
  • include:包含其他配置文件或片段,通常用来导入 MIME 类型等。

  • default_type:设置默认的 MIME 类型,例如 application/octet-stream 用于未识别文件类型。

  • log_format:定义日志的格式,这里定义了一个名为 main 的日志格式。

  • access_log:指定访问日志的路径和格式。

  • sendfile:开启 sendfile,用于高效地传输文件。

  • tcp_nopush:在使用 sendfile 时,可以提高性能。

  • keepalive_timeout:定义客户端保持连接的超时时间。

  • gzip:开启 gzip 压缩,以减少传输数据量。


server 块

server 块定义了一个虚拟主机的配置,用于处理不同域名或 IP 地址的请求。

每个 server 块可以有多个 location 块,配置如下:

server {    listen       80; # 监听端口    server_name  example.com www.example.com; # 定义服务器域名        location / {        root   /usr/share/nginx/html; # 站点根目录        index  index.html index.htm; # 默认首页文件    }
location /images/ { root /usr/share/nginx/html; # 静态文件目录 autoindex on; # 自动列出目录内容 }
error_page 404 /404.html; # 自定义404错误页面 location = /404.html { root /usr/share/nginx/html; }
# 反向代理配置 location /api/ { proxy_pass http://backend_server; # 转发到后端服务器 proxy_set_header Host $host; # 保留原始请求的Host头 proxy_set_header X-Real-IP $remote_addr; # 保留客户端IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 保留代理链 proxy_set_header X-Forwarded-Proto $scheme; # 保留请求协议(HTTP/HTTPS) }}

listen:指定 Nginx 监听的端口号,如 80(HTTP)、或 443(HTTPS);

server_name:定义虚拟主机的域名,可以是一个或多个域名,支持通配符;

location:匹配 URI 路径并定义如何处理请求,例如 / 代表根路径,而 /images/ 代表所有以 /images/ 开头的请求路径;

root:指定资源的根目录;

index:指定默认的索引文件,当请求指向一个目录时,Nginx 会查找该目录下的索引文件。

autoindex:打开目录列表,如果目录中没有 index 文件,Nginx 会列出该目录中的文件。

error_page:指定错误页面,例如 404 错误的页面。


location 块

location 块用于根据 URI 匹配规则处理请求,可以嵌套在 server 块中。

location:匹配的 URI,可以是精确匹配 =、前缀匹配 ^~、正则匹配 ~ 或 ~*(不区分大小写)。

配置如下:

location /api/ {        proxy_pass http://backend_server; # 转发到后端服务器        proxy_set_header Host $host; # 保留原始请求的Host头        proxy_set_header X-Real-IP $remote_addr; # 保留客户端IP        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 保留代理链        proxy_set_header X-Forwarded-Proto $scheme; # 保留请求协议(HTTP/HTTPS)    }

proxy_pass http://backend_server;
反向代理,将请求转发到指定的后端服务器。

proxy_set_header Host $host;
传递请求的Host头到后端服务器。

proxy_set_header X-Real-IP $remote_addr;
传递客户端的真实IP地址。

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
用于保留客户端的代理链。

proxy_set_header X-Forwarded-Proto $scheme;
用于传递请求协议,通常用于判断是否通过HTTPS访问。

Nginx反向配置

Nginx 常用于反向代理,将请求转发给后端服务器,如下所示:

http {    upstream backend {        server backend1.example.com;        server backend2.example.com;        server backend3.example.com;    }
server { listen 80; server_name example.com;
location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }}


Nginx负载均衡配置

Nginx 可以通过 upstream 指令实现负载均衡,如下所示:

upstream backend {    server backend1.example.com weight=3;    server backend2.example.com;    server backend3.example.com backup;}
server { location / { proxy_pass http://backend; }}
  • upstream:定义后端服务器池。

  • weight:指定权重。

  • backup:指定备用服务器。


Nginx SSL配置

Nginx 也可以用来处理 HTTPS 请求,如下所示:

server {    listen 443 ssl;    server_name example.com;
ssl_certificate /etc/ssl/certs/nginx.crt; ssl_certificate_key /etc/ssl/private/nginx.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5;}
  • ssl_certificate:指定 SSL 证书文件路径。

  • ssl_certificate_key:指定 SSL 证书密钥文件路径。

  • ssl_protocols:定义支持的 SSL/TLS 协议版本。

  • ssl_ciphers:定义加密套件。


Nginx动静分离配置

可以将静态资源,比如:图片、CSS、JS 文件...直接由 Nginx 提供,动态请求则转发到后端服务器处理。

从而实现动静分离,配置如下:

server {    listen 80;    server_name example.com;
# 静态资源直接由 Nginx 提供 location /static/ { root /var/www/html; }
# 动态请求转发到后端服务器 location / { proxy_pass http://backend_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }}

总之,Nginx 是一款功能强大的服务器软件,适用于各种 Web 服务场景。

Nginx 核心功能包括高效的 HTTP 服务器、强大的反向代理、灵活的负载均衡........等机制与功能。

以上


最后送大家一个福利:

送我原创超30万字阿里架构师进阶专题合集


以及给大家整理最全大厂Java面试题及答案详解,包含:Java、多线程、JVM、Spring、MySQL、Redis、中间件...等必考题答案详解。


需要以上架构专题&面试答案的同学,加我微信即可领取!


添加时备注:资料






mikechen的架构笔记
十余年BAT架构经验倾囊相授!
 最新文章