文章目录
1:常用命令
进入 nginx 目录中
cd /usr/local/nginx/sbin
1 、查看 nginx 版本号
./nginx -v
2 、启动 nginx
./nginx
3 、停止 nginx
./nginx -s stop
4 、重新加载 nginx
./nginx -s reload
2 nginx 全文配置实例
# ------------------- 全局配置 -------------------
#user nobody; # 指定运行 Nginx 的用户,默认是 nobody。如果需要更高权限,可以设置为 www-data 或其他用户。
worker_processes 1; # 设置工作进程数为 1,适合低负载环境。建议改为 auto 或 CPU 核心数。
#error_log logs/error.log; # 错误日志路径,默认注释掉。可根据需求启用并设置日志级别(如 warn、info)。
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; # 主进程 PID 文件路径,默认注释掉。通常使用默认路径 /var/run/nginx.pid。
# ------------------- events 块配置 -------------------
events {
worker_connections 1024; # 每个工作进程允许的最大并发连接数。总并发数 = worker_processes * worker_connections。
}
# ------------------- http 块配置 -------------------
http {
include mime.types; # 包含 MIME 类型定义文件,用于识别文件类型。
default_type application/octet-stream; # 默认 MIME 类型,无法识别时返回此类型。
#charset gb2312; # 设置默认字符集为 GB2312(已注释)。如果需要支持中文,可以启用此配置。
server_names_hash_bucket_size 128; # 设置服务器名称哈希表的大小,避免因域名过长导致性能问题。
client_header_buffer_size 32k; # 设置客户端请求头的缓冲区大小,适合处理较大的请求头。
large_client_header_buffers 4 32k; # 设置大请求头的缓冲区数量和大小。
client_max_body_size 8m; # 设置客户端请求体的最大大小为 8MB,适用于文件上传等场景。
sendfile on; # 启用零拷贝机制,提高文件传输效率。
tcp_nopush on; # 在发送数据前等待所有包准备好,减少网络延迟。
keepalive_timeout 15; # 设置长连接超时时间为 15 秒。
tcp_nodelay on; # 启用 Nagle 算法,减少小包的延迟。
fastcgi_connect_timeout 300; # 设置 FastCGI 连接超时时间为 300 秒。
fastcgi_send_timeout 300; # 设置 FastCGI 发送超时时间为 300 秒。
fastcgi_read_timeout 300; # 设置 FastCGI 读取超时时间为 300 秒。
fastcgi_buffer_size 64k; # 设置 FastCGI 缓冲区大小为 64KB。
fastcgi_buffers 4 64k; # 设置 FastCGI 缓冲区数量和大小。
fastcgi_busy_buffers_size 128k; # 设置繁忙缓冲区大小为 128KB。
fastcgi_temp_file_write_size 128k; # 设置临时文件写入大小为 128KB。
gzip on; # 启用 Gzip 压缩以减少传输数据量。
gzip_min_length 1k; # 仅压缩大于 1KB 的文件。
gzip_buffers 4 16k; # 设置 Gzip 缓冲区数量和大小。
gzip_http_version 1.0; # 设置支持的 HTTP 版本。
gzip_comp_level 2; # 设置压缩级别为 2(范围 1-9,数值越大压缩率越高但消耗更多 CPU)。
gzip_types text/plain application/x-javascript text/css application/xml; # 指定需要压缩的 MIME 类型。
gzip_vary on; # 启用 Vary: Accept-Encoding 响应头。
gzip_disable msie6; # 禁用对 IE6 的 Gzip 支持。
#limit_zone crawler $binary_remote_addr 10m; # 限制爬虫连接数(已注释)。
log_format '$remote_addr - $remote_user [$time_local] "$request" ' # 自定义日志格式
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# ------------------- upstream 配置 -------------------
upstream gateway_server {
# 注意:移除 http://,Nginx 不需要协议前缀
server 192.168.10.74:8081 max_fails=1 fail_timeout=10s; # 定义后端服务器,失败 1 次后标记为不可用,持续 10 秒
}
# ------------------- server 块配置 -------------------
server {
listen 20249; # 监听非标准端口 20249,确保防火墙允许流量
client_max_body_size 64M; # 设置客户端请求体最大大小为 64MB
server_name localhost; # 仅匹配 localhost 请求,可改为具体域名或通配符
# ------------------- 根路径配置 -------------------
location / {
root /u01/isi/application/component/dy/web/dist/; # 静态文件根目录
try_files $uri $uri/ /index.html; # 尝试匹配文件路径,最后回退到 index.html(适用于 SPA)
index index.html index.htm; # 默认索引文件
# 注意:确保目录存在,并且 Nginx 用户有权限访问
}
# ------------------- API 路由配置 -------------------
location /stage-api/ {
# 添加跨域支持
add_header access-control-allow-origin *; # 允许所有来源访问
add_header access-control-allow-methods 'get, post, options'; # 允许的 HTTP 方法
add_header access-control-allow-headers 'dnt,x-mx-reqtoken,keep-alive,user-agent,x-requested-with,if-modified-since,cache-control,content-type,authorization'; # 允许的请求头
# 处理预检请求(OPTIONS 方法)
if ($request_method = 'options') {
return 204; # 返回 204 状态码(无内容)
}
# 代理转发设置
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_pass http://gateway_server/; # 转发到 upstream 定义的后端服务器
# 注意:避免复杂条件判断(如 if),可改用 map 或其他方式优化性能
}
# 其他 API 路由配置(与 /stage-api/ 类似)
location ^~/dev-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_pass http://gateway_server/;
}
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_pass http://gateway_server/;
}
# ------------------- 特殊路由配置 -------------------
location /#/personality/list {
# 注意:Nginx 不支持直接匹配带 # 的 URL,因为 # 是客户端解析的部分
# 如果需要处理前端路由中的哈希路径,建议使用 try_files 或重定向到入口文件
proxy_pass http://192.168.10.233:14900/#/personality/list;
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;
}
# ------------------- 安全配置 -------------------
# 禁止访问敏感路径 /actuator
if ($request_uri ~ "/actuator") {
return 403; # 返回 403 状态码(禁止访问)
}
# 注意:避免使用 if 指令,建议改用 location 匹配
# 示例:
# location /actuator {
# return 403;
# }
# ------------------- 错误页面配置 -------------------
error_page 500 502 503 504 /50x.html; # 自定义 5xx 错误页面
location = /50x.html {
root html; # 错误页面文件路径,默认为 /usr/share/nginx/html/50x.html
# 注意:确保文件存在并且内容符合需求
}
}
}
3:配置文件总览
位置:/nginx/conf/nginx.conf
第一部分:main:全局配置,对全局生效;
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
# ---------------------main段配置信息
#user nobody; # 指定运行 Nginx 的用户,默认是 nobody。如果需要更高权限,可以设置为 www-data 或其他用户。
worker_processes 1; # 设置工作进程数为 1,适合低负载环境。建议改为 auto 或 CPU 核心数。
#error_log logs/error.log; # 错误日志路径,默认注释掉。可根据需求启用并设置日志级别(如 warn、info)。
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; # 主进程 PID 文件路径,默认注释掉。通常使用默认路径 /var/run/nginx.pid。
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约
1 用户与进程
#user nobody;
worker_processes 1;
-
user
:
指定运行 Nginx 的用户,默认是nobody
。如果需要更高的权限或更细粒度的控制,可以显式设置为某个用户(如www-data
或nginx
)。-
示例:
user www-data;
-
-
worker_processes
:
设置工作进程数。值为1
表示单进程模式,适合低负载环境。对于多核 CPU,建议设置为auto
或 CPU 核心数。-
示例:
worker_processes auto;
-
2 日志与 PID 文件
#error_log logs/error.log;
#pid logs/nginx.pid;
-
error_log
:
定义错误日志的路径和级别。默认注释掉,表示使用默认路径和级别(通常是/var/log/nginx/error.log
和error
级别)。可以根据需求调整日志级别(如warn
、info
)。-
示例:
error_log /var/log/nginx/error.log warn;
-
-
pid
:
指定主进程的 PID 文件路径,默认注释掉,表示使用默认路径(通常是/var/run/nginx.pid
)。
第二部分:events 块:配置影响 Nginx 服务器与用户的网络连接;
# ------------------- events 块配置 -------------------
events {
use epoll; # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
worker_connections 1024; # 每个工作进程允许的最大并发连接数。总并发数 = worker_processes * worker_connections。
}
- events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 wordprocess 可以同时支持的最大连接数等。
- 上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
worker_connections
:
设置每个工作进程允许的最大并发连接数。总并发连接数 = worker_processes * worker_connections
。
- 如果服务器需要处理高并发请求,可以适当增加该值(如
2048
或更高),但需确保系统资源充足
第三部分:http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
# ------------------- http 块配置 -------------------
http {
include mime.types; # 包含 MIME 类型定义文件,用于识别文件类型。
default_type application/octet-stream; # 默认 MIME 类型,无法识别时返回此类型。
#charset gb2312; # 设置默认字符集为 GB2312(已注释)。如果需要支持中文,可以启用此配置。
server_names_hash_bucket_size 128; # 设置服务器名称哈希表的大小,避免因域名过长导致性能问题。
client_header_buffer_size 32k; # 设置客户端请求头的缓冲区大小,适合处理较大的请求头。
large_client_header_buffers 4 32k; # 设置大请求头的缓冲区数量和大小。
client_max_body_size 8m; # 设置客户端请求体的最大大小为 8MB,适用于文件上传等场景。
sendfile on; # 启用零拷贝机制,提高文件传输效率。
tcp_nopush on; # 在发送数据前等待所有包准备好,减少网络延迟。
keepalive_timeout 15; # 设置长连接超时时间为 15 秒。
tcp_nodelay on; # 启用 Nagle 算法,减少小包的延迟。
fastcgi_connect_timeout 300; # 设置 FastCGI 连接超时时间为 300 秒。
fastcgi_send_timeout 300; # 设置 FastCGI 发送超时时间为 300 秒。
fastcgi_read_timeout 300; # 设置 FastCGI 读取超时时间为 300 秒。
fastcgi_buffer_size 64k; # 设置 FastCGI 缓冲区大小为 64KB。
fastcgi_buffers 4 64k; # 设置 FastCGI 缓冲区数量和大小。
fastcgi_busy_buffers_size 128k; # 设置繁忙缓冲区大小为 128KB。
fastcgi_temp_file_write_size 128k; # 设置临时文件写入大小为 128KB。
gzip on; # 启用 Gzip 压缩以减少传输数据量。
gzip_min_length 1k; # 仅压缩大于 1KB 的文件。
gzip_buffers 4 16k; # 设置 Gzip 缓冲区数量和大小。
gzip_http_version 1.0; # 设置支持的 HTTP 版本。
gzip_comp_level 2; # 设置压缩级别为 2(范围 1-9,数值越大压缩率越高但消耗更多 CPU)。
gzip_types text/plain application/x-javascript text/css application/xml; # 指定需要压缩的 MIME 类型。
gzip_vary on; # 启用 Vary: Accept-Encoding 响应头。
gzip_disable msie6; # 禁用对 IE6 的 Gzip 支持。
#limit_zone crawler $binary_remote_addr 10m; # 限制爬虫连接数(已注释)。
log_format '$remote_addr - $remote_user [$time_local] "$request" ' # 自定义日志格式
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#这里也可以直接把具体项目配置独立出去,包括upstream 和server块
#include servers/*.conf;
# ------------------- upstream 配置 -------------------
upstream gateway_server {
# 注意:移除 http://,Nginx 不需要协议前缀
server 192.168.10.74:8081 max_fails=1 fail_timeout=10s; # 定义后端服务器,失败 1 次后标记为不可用,持续 10 秒
}
# ------------------- server 块配置 -------------------
server {
listen 20249; # 监听非标准端口 20249,确保防火墙允许流量
client_max_body_size 64M; # 设置客户端请求体最大大小为 64MB
server_name localhost; # 仅匹配 localhost 请求,可改为具体域名或通配符
# ------------------- 根路径配置 -------------------
location / {
root /u01/isi/application/component/dy/web/dist/; # 静态文件根目录
try_files $uri $uri/ /index.html; # 尝试匹配文件路径,最后回退到 index.html(适用于 SPA)
index index.html index.htm; # 默认索引文件
# 注意:确保目录存在,并且 Nginx 用户有权限访问
}
# ------------------- API 路由配置 -------------------
location /stage-api/ {
# 添加跨域支持
add_header access-control-allow-origin *; # 允许所有来源访问
add_header access-control-allow-methods 'get, post, options'; # 允许的 HTTP 方法
add_header access-control-allow-headers 'dnt,x-mx-reqtoken,keep-alive,user-agent,x-requested-with,if-modified-since,cache-control,content-type,authorization'; # 允许的请求头
# 处理预检请求(OPTIONS 方法)
if ($request_method = 'options') {
return 204; # 返回 204 状态码(无内容)
}
# 代理转发设置
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_pass http://gateway_server/; # 转发到 upstream 定义的后端服务器
# 注意:避免复杂条件判断(如 if),可改用 map 或其他方式优化性能
}
# 其他 API 路由配置(与 /stage-api/ 类似)
location ^~/dev-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_pass http://gateway_server/;
}
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_pass http://gateway_server/;
}
# ------------------- 特殊路由配置 -------------------
location /#/personality/list {
# 注意:Nginx 不支持直接匹配带 # 的 URL,因为 # 是客户端解析的部分
# 如果需要处理前端路由中的哈希路径,建议使用 try_files 或重定向到入口文件
proxy_pass http://192.168.10.233:14900/#/personality/list;
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;
}
# ------------------- 安全配置 -------------------
# 禁止访问敏感路径 /actuator
if ($request_uri ~ "/actuator") {
return 403; # 返回 403 状态码(禁止访问)
}
# 注意:避免使用 if 指令,建议改用 location 匹配
# 示例:
# location /actuator {
# return 403;
# }
# ------------------- 错误页面配置 -------------------
error_page 500 502 503 504 /50x.html; # 自定义 5xx 错误页面
location = /50x.html {
root html; # 错误页面文件路径,默认为 /usr/share/nginx/html/50x.html
# 注意:确保文件存在并且内容符合需求
}
}
}
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http 全局块、server 块。
1. http
块:核心功能配置
1 MIME 类型与字符集
include mime.types;
default_type application/octet-stream;
#charset gb2312;
mime.types
:
包含 MIME 类型定义文件,用于识别文件类型。default_type
:
默认 MIME 类型。如果无法识别文件类型,则返回application/octet-stream
。charset
:
设置默认字符集。如果需要支持中文,可以启用此配置并设置为utf-8
或gb2312
。
2 缓冲区与请求限制
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
client_header_buffer_size
和large_client_header_buffers
:
设置客户端请求头的缓冲区大小,适合处理较大的请求头。client_max_body_size
:
设置客户端请求体的最大大小为 8MB,适用于文件上传等场景。
3 文件传输优化
sendfile on;
tcp_nopush on;
tcp_nodelay on;
sendfile
:
启用零拷贝机制,提高文件传输效率。tcp_nopush
:
在发送数据前等待所有包准备好,减少网络延迟。tcp_nodelay
:
启用 Nagle 算法,减少小包的延迟。
4 FastCGI 参数
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
- 这些参数用于优化 FastCGI(如 PHP)的性能,包括连接超时、缓冲区大小等。
5 Gzip 压缩
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
gzip_disable msie6;
gzip
:
启用 Gzip 压缩以减少传输数据量。gzip_min_length
:仅压缩大于 1KB 的文件。gzip_types
:指定需要压缩的 MIME 类型。gzip_vary
:启用 Vary: Accept-Encoding 响应头。
2. upstream
配置:后端服务池
upstream gateway_server {
server 192.168.1.4:8081 max_fails=1 fail_timeout=10s;
}
- 作用:
定义一个名为gateway_server
的后端服务池。 - 参数:
max_fails
:在fail_timeout
时间内失败的次数。fail_timeout
:失败检查的时间窗口和不可用状态的持续时间。
3. server
块:虚拟主机配置
# ------------------- API 路由配置 -------------------
location /stage-api/ {
# 添加跨域支持
add_header access-control-allow-origin *; # 允许所有来源访问
add_header access-control-allow-methods 'get, post, options'; # 允许的 HTTP 方法
add_header access-control-allow-headers 'dnt,x-mx-reqtoken,keep-alive,user-agent,x-requested-with,if-modified-since,cache-control,content-type,authorization'; # 允许的请求头
# 处理预检请求(OPTIONS 方法)
if ($request_method = 'options') {
return 204; # 返回 204 状态码(无内容)
}
# 代理转发设置
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_pass http://gateway_server/; # 转发到 upstream 定义的后端服务器
# 注意:避免复杂条件判断(如 if),可改用 map 或其他方式优化性能
}
# 其他 API 路由配置(与 /stage-api/ 类似)
location ^~/dev-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_pass http://gateway_server/;
}
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_pass http://gateway_server/;
}
# ------------------- 特殊路由配置 -------------------
location /#/personality/list {
# 注意:Nginx 不支持直接匹配带 # 的 URL,因为 # 是客户端解析的部分
# 如果需要处理前端路由中的哈希路径,建议使用 try_files 或重定向到入口文件
proxy_pass http://192.168.10.233:14900/#/personality/list;
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;
}
# ------------------- 安全配置 -------------------
# 禁止访问敏感路径 /actuator
if ($request_uri ~ "/actuator") {
return 403; # 返回 403 状态码(禁止访问)
}
# 注意:避免使用 if 指令,建议改用 location 匹配
# 示例:
# location /actuator {
# return 403;
# }
# ------------------- 错误页面配置 -------------------
error_page 500 502 503 504 /50x.html; # 自定义 5xx 错误页面
location = /50x.html {
root html; # 错误页面文件路径,默认为 /usr/share/nginx/html/50x.html
# 注意:确保文件存在并且内容符合需求
}
}
1 监听端口与域名
listen 20249;
server_name localhost;
listen
:
设置监听端口。非标准端口(如20249
)需要确保防火墙允许流量。server_name
:
匹配域名,默认是localhost
。可根据需求改为具体域名或通配符。
2 静态文件服务
location / {
root /u01/isi/application/component/dy/web/dist/;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
root
:
指定静态文件根目录。try_files
:
尝试匹配文件路径,最后回退到index.html
,适用于单页应用(SPA)。
3 API 路由与跨域支持
location /stage-api/ {
add_header access-control-allow-origin *;
proxy_pass http://gateway_server/;
...
}
- 跨域支持:
添加 CORS 头部,允许跨域访问。 - 代理转发:
将请求转发到gateway_server
。
4 特殊路由与安全配置
location /#/personality/list {
proxy_pass http://192.168.1.233:14900/#/personality/list;
...
}
if ($request_uri ~ "/actuator") {
return 403;
}
- 特殊路由:
注意:Nginx 不支持直接匹配带#
的 URL,建议改用try_files
。 - 安全配置:
禁止访问敏感路径/actuator
。
4. 错误页面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
- 自定义 5xx 错误页面,提升用户体验。