开源项目中ngnix.conf文件如下
worker_processes 1;error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;# 限制body大小client_max_body_size 100m;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;upstream server {ip_hash;# gateway 地址server 127.0.0.1:8080;# server 127.0.0.1:8081;}server {listen 80;server_name localhost;# https配置参考 start#listen 443 ssl;# 证书直接存放 /docker/nginx/cert/ 目录下即可 更改证书名称即可 无需更改证书路径#ssl on;#ssl_certificate /etc/nginx/cert/xxx.local.crt; # /etc/nginx/cert/ 为docker映射路径 不允许更改#ssl_certificate_key /etc/nginx/cert/xxx.local.key; # /etc/nginx/cert/ 为docker映射路径 不允许更改#ssl_session_timeout 5m;#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;#ssl_prefer_server_ciphers on;# https配置参考 end# 演示环境配置 拦截除 GET POST 之外的所有请求# if ($request_method !~* GET|POST) {# rewrite ^/(.*)$ /403;# }# location = /403 {# default_type application/json;# return 200 '{"msg":"演示模式,不允许操作","code":500}';# }# 限制外网访问内网 actuator 相关路径location ~ ^(/[^/]*)?/actuator.*(/.*)?$ {return 403;}location / {root /usr/share/nginx/html; # docker映射路径 不允许更改try_files $uri $uri/ /index.html;index index.html index.htm;}location /prod-api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_read_timeout 86400s;# sse 与 websocket参数proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_buffering off;proxy_cache off;proxy_pass http://server/;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}
解析如下:
以下是对你提供的 Nginx 配置文件的逐行解析:
nginx
worker_processes 1;
- 指定 Nginx 启动的工作进程数。在这里设置为 1,适合于小型应用或开发环境。
nginx
error_log /var/log/nginx/error.log warn;
- 设置错误日志的路径和日志级别。这里的日志会记录到 `/var/log/nginx/error.log` ,并且只记录警告级别及以上的错误。
nginx
pid /var/run/nginx.pid;
- 指定 Nginx 主进程的 PID 文件路径。这个文件用于存储 Nginx 主进程的进程 ID。
nginx
events {worker_connections 1024;
}
- `events` 块用于配置与事件处理相关的设置。 `worker_connections` 指定每个工作进程可以同时处理的最大连接数,这里设置为 1024。
nginx
http {
- 开始 `http` 块,所有与 HTTP 相关的配置都在这个块内。
nginxinclude mime.types;
- 包含 MIME 类型的定义文件,Nginx 将根据文件扩展名来确定内容类型。
nginxdefault_type application/octet-stream;
- 设置默认的内容类型为 `application/octet-stream` ,用于未明确指定类型的文件。
nginxsendfile on;
- 启用高效的文件传输方式,使用 `sendfile` 系统调用来提高文件传输的性能。
nginxkeepalive_timeout 65;
- 设置客户端连接的保持活动时间为 65 秒,超过这个时间后,连接将被关闭。
nginxclient_max_body_size 100m;
- 限制客户端请求的最大体积为 100MB,防止过大的请求影响服务器性能。
nginxlog_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
- 定义访问日志的格式,日志中将记录客户端 IP、请求时间、请求内容、状态码、发送的字节数、来源、用户代理和 X-Forwarded-For 信息。
nginxaccess_log /var/log/nginx/access.log main;
- 设置访问日志的路径为 `/var/log/nginx/access.log` ,并使用上面定义的 `main` 格式。
nginxupstream server {
- 定义一个名为 `server` 的上游服务器组,后端服务器的配置将放在这个块内。
nginxip_hash;
- 使用 `ip_hash` 负载均衡策略,确保来自同一 IP 的请求总是被转发到同一台后端服务器。
nginxserver 127.0.0.1:8080;
- 定义一个后端服务器,地址为 `127.0.0.1` ,端口为 `8080` 。
nginx# server 127.0.0.1:8081;
- 注释掉的行,表示这是一个备用的后端服务器地址( `127.0.0.1:8081` ),当前未启用。
nginx}
- 结束 `upstream` 块。
nginxserver {
- 开始一个 `server` 块,定义一个虚拟主机。
nginxlisten 80;
- 指定服务器监听的端口为 80,通常用于 HTTP 服务。
nginxserver_name localhost;
- 设置服务器的名称为 `localhost` ,可以通过该名称访问该虚拟主机。
nginx# https配置参考 start
- 注释行,表示 HTTPS 配置的起始部分。
nginx#listen 443 ssl;
- 注释掉的行,表示可以启用 SSL 的 443 端口。
nginx# ssl on;
- 注释掉的行,表示可以启用 SSL。
nginx#ssl_certificate /etc/nginx/cert/xxx.local.crt;
- 注释掉的行,表示 SSL 证书的路径。
nginx#ssl_certificate_key /etc/nginx/cert/xxx.local.key;
- 注释掉的行,表示 SSL 证书密钥的路径。
nginx#ssl_session_timeout 5m;
- 注释掉的行,表示 SSL 会话超时时间。
nginx#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
- 注释掉的行,表示 SSL 加密套件的配置。
nginx#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
- 注释掉的行,表示支持的 SSL 协议版本。
nginx#ssl_prefer_server_ciphers on;
- 注释掉的行,表示是否优先使用服务器的加密套件。
nginx# https配置参考 end
- 注释行,表示 HTTPS 配置的结束部分。
nginx# 演示环境配置 拦截除 GET POST 之外的所有请求
- 注释行,表示以下配置是用于演示环境的。
nginx# if ($request_method !~* GET|POST) {# rewrite ^/(.*)$ /403;# }
- 注释掉的条件语句,用于拦截除了 GET 和 POST 之外的所有请求,并重定向到 `/403` 。
nginx# location = /403 {# default_type application/json;# return 200 '{"msg":"演示模式,不允许操作","code":500}';# }
- 注释掉的块,用于处理 `/403` 请求,返回 JSON 格式的响应。
nginx# 限制外网访问内网 actuator 相关路径
- 注释行,表示以下配置是用于限制访问。
nginxlocation ~ ^(/[^/]*)?/actuator.*(/.*)?$ {return 403;}
- 这个配置块会匹配所有以 `/actuator` 开头的请求,并返回 403 Forbidden,限制外部访问。
nginxlocation / {root /usr/share/nginx/html; # docker映射路径 不允许更改try_files $uri $uri/ /index.html;index index.html index.htm;}
- 处理根路径的请求:- `root` 指定文档根目录为 `/usr/share/nginx/html` 。- `try_files` 尝试查找请求的文件,如果找不到,则返回 `/index.html` 。- `index` 指定默认的索引文件为 `index.html` 和 `index.htm` 。
nginxlocation /prod-api/ {
- 处理以 `/prod-api/` 开头的请求。
nginxproxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- 这些指令用于设置代理请求头,传递客户端的请求信息到后端服务器。
nginxproxy_read_timeout 86400s;
- 设置与后端服务器的读取超时时间为 86400 秒(24 小时),适合长时间的请求。
nginxproxy_http_version 1.1;
- 设置与后端服务器的 HTTP 协议版本为 1.1。
nginxproxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";
- 这两行用于支持 WebSocket 协议的升级。
nginxproxy_buffering off;proxy_cache off;
- 关闭代理缓冲和缓存,以确保实时数据流的传输。
nginxproxy_pass http://server/;
- 将请求转发到上游服务器组 `server` 。
nginx}
- 结束 `/prod-api/` 的配置块。
nginxerror_page 500 502 503 504 /50x.html;
- 定义当出现 500、502、503 或 504 错误时,显示 `/50x.html` 页面。
nginxlocation = /50x.html {root html;}
- 处理 `/50x.html` 请求,指定其文档根目录为 `html` 。
nginx}
}
- 结束 `server` 块和 `http` 块。整体来看,这个 Nginx 配置文件设置了一个基本的 HTTP 服务器,支持反向代理、负载均衡、错误处理和静态文件服务。它还包含了一些安全和性能的优化配置。