开源项目中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 相关的配置都在这个块内。
nginx
include mime.types;
- 包含 MIME 类型的定义文件,Nginx 将根据文件扩展名来确定内容类型。
nginx
default_type application/octet-stream;
- 设置默认的内容类型为 `application/octet-stream` ,用于未明确指定类型的文件。
nginx
sendfile on;
- 启用高效的文件传输方式,使用 `sendfile` 系统调用来提高文件传输的性能。
nginx
keepalive_timeout 65;
- 设置客户端连接的保持活动时间为 65 秒,超过这个时间后,连接将被关闭。
nginx
client_max_body_size 100m;
- 限制客户端请求的最大体积为 100MB,防止过大的请求影响服务器性能。
nginx
log_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 信息。
nginx
access_log /var/log/nginx/access.log main;
- 设置访问日志的路径为 `/var/log/nginx/access.log` ,并使用上面定义的 `main` 格式。
nginx
upstream server {
- 定义一个名为 `server` 的上游服务器组,后端服务器的配置将放在这个块内。
nginx
ip_hash;
- 使用 `ip_hash` 负载均衡策略,确保来自同一 IP 的请求总是被转发到同一台后端服务器。
nginx
server 127.0.0.1:8080;
- 定义一个后端服务器,地址为 `127.0.0.1` ,端口为 `8080` 。
nginx
# server 127.0.0.1:8081;
- 注释掉的行,表示这是一个备用的后端服务器地址( `127.0.0.1:8081` ),当前未启用。
nginx
}
- 结束 `upstream` 块。
nginx
server {
- 开始一个 `server` 块,定义一个虚拟主机。
nginx
listen 80;
- 指定服务器监听的端口为 80,通常用于 HTTP 服务。
nginx
server_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 相关路径
- 注释行,表示以下配置是用于限制访问。
nginx
location ~ ^(/[^/]*)?/actuator.*(/.*)?$ {
return 403;
}
- 这个配置块会匹配所有以 `/actuator` 开头的请求,并返回 403 Forbidden,限制外部访问。
nginx
location / {
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` 。
nginx
location /prod-api/ {
- 处理以 `/prod-api/` 开头的请求。
nginx
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;
- 这些指令用于设置代理请求头,传递客户端的请求信息到后端服务器。
nginx
proxy_read_timeout 86400s;
- 设置与后端服务器的读取超时时间为 86400 秒(24 小时),适合长时间的请求。
nginx
proxy_http_version 1.1;
- 设置与后端服务器的 HTTP 协议版本为 1.1。
nginx
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
- 这两行用于支持 WebSocket 协议的升级。
nginx
proxy_buffering off;
proxy_cache off;
- 关闭代理缓冲和缓存,以确保实时数据流的传输。
nginx
proxy_pass http://server/;
- 将请求转发到上游服务器组 `server` 。
nginx
}
- 结束 `/prod-api/` 的配置块。
nginx
error_page 500 502 503 504 /50x.html;
- 定义当出现 500、502、503 或 504 错误时,显示 `/50x.html` 页面。
nginx
location = /50x.html {
root html;
}
- 处理 `/50x.html` 请求,指定其文档根目录为 `html` 。
nginx
}
}
- 结束 `server` 块和 `http` 块。
整体来看,这个 Nginx 配置文件设置了一个基本的 HTTP 服务器,支持反向代理、负载均衡、错误处理和静态文件服务。它还包含了一些安全和性能的优化配置。