docker nginx 的配置
温馨提示:
本文最后更新于 2025年09月26日,已超过 260 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
自身
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
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;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/conf.d/*.conf;
}
负载均衡
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
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;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# 定义后端服务器负载均衡
upstream backend {
server 123.207.64.127:38085;
server 123.207.64.127:8443;
}
# 示例 server 块,使用 upstream
server {
listen 80;
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;
}
}
include /etc/nginx/conf.d/*.conf;
} 负载均衡调优 .conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 10240;
use epoll;
multi_accept on;
}
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;
tcp_nodelay on;
access_log off;
keepalive_timeout 65;
types_hash_max_size 2048;
# 定义后端服务器负载均衡
upstream backend {
server 10.206.16.12:9002;
server 10.206.16.12:9003;
server 10.206.16.12:9004;
server 10.206.16.12:9005;
server 10.206.16.12:9006;
server 10.206.16.12:9007;
server 10.206.16.12:9008;
server 10.206.16.12:9009;
server 10.206.16.12:9010;
server 10.206.16.12:9011;
server 10.206.16.12:9012;
}
# 示例 server 块,使用 upstream
server {
listen 80;
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;
}
}
include /etc/nginx/conf.d/*.conf;
} ./start-nginx.sh
#!/bin/bash
# 默认路径
DEFAULT_NGINX_CONF_PATH="/etc/nginx"
DEFAULT_NGINX_HTML_PATH="/var/www/html"
DEFAULT_NGINX_LOG_PATH="/var/log/nginx"
# 显示使用帮助
show_help() {
echo "Usage: $0 [OPTIONS]"
echo "Options:"
echo " -c, --conf-path PATH Nginx 配置文件根路径 (默认: $DEFAULT_NGINX_CONF_PATH)"
echo " -w, --web-path PATH Nginx 网站文件路径 (默认: $DEFAULT_NGINX_HTML_PATH)"
echo " -p, --port PORT 对外暴露的HTTP端口号 (默认: 80)"
echo " -s, --https-port PORT 对外暴露的HTTPS端口号 (默认: 443)"
echo " -n, --container-name NAME 容器名称 (默认: nginx-container)"
echo " --help 显示此帮助信息"
echo ""
echo "说明:"
echo " 所有 nginx 配置文件都将放在 conf-path 路径下,包括:"
echo " - 主配置文件: conf-path/nginx.conf"
echo " - MIME类型: conf-path/mime.types"
echo " - 网站配置: conf-path/conf.d/"
echo " - SSL证书: conf-path/ssl/"
echo ""
echo "示例:"
echo " $0"
echo " $0 -c /custom/nginx -w /var/www/my-site"
echo " $0 -p 8080 -s 8443"
echo " $0 --conf-path /etc/my-nginx --web-path /var/www/html --port 8080 --container-name my-nginx"
}
# 初始化变量
NGINX_CONF_PATH=""
NGINX_HTML_PATH=""
CONTAINER_NAME="nginx-container"
HTTP_PORT="80"
HTTPS_PORT="443"
# 解析命令行参数
while [[ $# -gt 0 ]]; do
case $1 in
-c|--conf-path)
NGINX_CONF_PATH="$2"
shift 2
;;
-w|--web-path)
NGINX_HTML_PATH="$2"
shift 2
;;
-p|--port)
HTTP_PORT="$2"
shift 2
;;
-s|--https-port)
HTTPS_PORT="$2"
shift 2
;;
-n|--container-name)
CONTAINER_NAME="$2"
shift 2
;;
--help)
show_help
exit 0
;;
*)
echo "未知参数: $1"
show_help
exit 1
;;
esac
done
# 设置默认值
NGINX_CONF_PATH=${NGINX_CONF_PATH:-$DEFAULT_NGINX_CONF_PATH}
NGINX_HTML_PATH=${NGINX_HTML_PATH:-$DEFAULT_NGINX_HTML_PATH}
NGINX_LOG_PATH="$NGINX_CONF_PATH/logs"
# 检查是否已安装 Docker
if ! command -v docker &> /dev/null; then
echo "错误: 未检测到 Docker,请先安装 Docker"
exit 1
fi
# 检查 Docker 是否正在运行
if ! docker info &> /dev/null; then
echo "错误: Docker 服务未运行,请启动 Docker 服务"
exit 1
fi
echo "=================================="
echo "开始部署 Nginx 容器"
echo "=================================="
echo "配置根路径: $NGINX_CONF_PATH"
echo "网站文件路径: $NGINX_HTML_PATH"
echo "日志文件路径: $NGINX_LOG_PATH"
echo "HTTP对外端口: $HTTP_PORT"
echo "HTTPS对外端口: $HTTPS_PORT"
echo "容器名称: $CONTAINER_NAME"
echo "=================================="
# 创建必要的目录
echo "创建 nginx 相关目录..."
mkdir -p "$NGINX_CONF_PATH"
mkdir -p "$NGINX_CONF_PATH/conf.d"
mkdir -p "$NGINX_CONF_PATH/ssl"
mkdir -p "$NGINX_HTML_PATH"
mkdir -p "$NGINX_LOG_PATH"
# 创建 MIME 类型文件
echo "创建 MIME 类型配置文件..."
cat > "$NGINX_CONF_PATH/mime.types" << 'EOF'
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
application/font-woff woff;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.wap.wmlc wmlc;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}
EOF
# 创建主配置文件
echo "创建主配置文件..."
cat > "$NGINX_CONF_PATH/nginx.conf" << EOF
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
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;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/conf.d/*.conf;
}
EOF
# 创建默认网站配置
echo "创建默认网站配置..."
cat > "$NGINX_CONF_PATH/conf.d/default.conf" << EOF
server {
listen 80;
server_name localhost;
location / {
root /var/www/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
EOF
# 创建默认首页文件 - 使用优化后的现代化页面
echo "创建默认首页文件..."
cat > "$NGINX_HTML_PATH/index.html" << EOF
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Welcome to Nginx</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: #333;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
}
.container {
background: rgba(255, 255, 255, 0.95);
border-radius: 15px;
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
padding: 40px;
width: 100%;
max-width: 800px;
backdrop-filter: blur(10px);
}
.header {
text-align: center;
margin-bottom: 30px;
}
.logo {
font-size: 3.5em;
color: #009900;
margin-bottom: 15px;
font-weight: bold;
}
h1 {
color: #2c3e50;
margin-bottom: 10px;
font-weight: 600;
}
.subtitle {
color: #7f8c8d;
font-size: 1.2em;
margin-bottom: 30px;
}
.section {
margin-bottom: 30px;
padding: 20px;
border-radius: 10px;
background: #f8f9fa;
border-left: 4px solid #667eea;
}
h2 {
color: #2c3e50;
margin-bottom: 15px;
display: flex;
align-items: center;
}
ul {
list-style-type: none;
padding-left: 0;
}
li {
padding: 10px 0;
border-bottom: 1px solid #eee;
}
li:last-child {
border-bottom: none;
}
.config-label {
font-weight: 600;
color: #2c3e50;
display: inline-block;
width: 120px;
}
.config-value {
color: #667eea;
font-family: 'Courier New', monospace;
}
.links {
display: flex;
justify-content: space-around;
flex-wrap: wrap;
margin-top: 30px;
}
.link-card {
background: #fff;
border-radius: 10px;
padding: 20px;
text-align: center;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);
transition: transform 0.3s ease, box-shadow 0.3s ease;
flex: 1;
margin: 0 10px;
min-width: 120px;
}
.link-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
}
.link-card a {
text-decoration: none;
color: #667eea;
font-weight: 600;
}
.footer {
text-align: center;
margin-top: 30px;
color: #7f8c8d;
font-size: 0.9em;
}
.status-indicator {
display: inline-block;
width: 12px;
height: 12px;
border-radius: 50%;
background-color: #27ae60;
margin-right: 8px;
animation: pulse 2s infinite;
}
@keyframes pulse {
0% { opacity: 1; }
50% { opacity: 0.5; }
100% { opacity: 1; }
}
@media (max-width: 768px) {
.container {
padding: 20px;
}
.links {
flex-direction: column;
align-items: center;
}
.link-card {
margin: 10px 0;
width: 100%;
}
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<div class="logo">nginx</div>
<h1>Welcome to Nginx!</h1>
<p class="subtitle">高性能HTTP和反向代理服务器</p>
</div>
<div class="section">
<h2>ℹ️ 服务器状态</h2>
<p><span class="status-indicator"></span> Nginx 正在运行</p>
</div>
<div class="section">
<h2>⚙️ 配置信息</h2>
<ul>
<li><span class="config-label">配置根路径:</span> <span class="config-value">$NGINX_CONF_PATH</span></li>
<li><span class="config-label">网站文件路径:</span> <span class="config-value">$NGINX_HTML_PATH</span></li>
<li><span class="config-label">日志文件路径:</span> <span class="config-value">$NGINX_LOG_PATH</span></li>
<li><span class="config-label">HTTP端口:</span> <span class="config-value">$HTTP_PORT</span></li>
<li><span class="config-label">HTTPS端口:</span> <span class="config-value">$HTTPS_PORT</span></li>
</ul>
</div>
<div class="section">
<h2>? 有用链接</h2>
<div class="links">
<div class="link-card">
<a href="http://nginx.org/" target="_blank">官方文档</a>
</div>
<div class="link-card">
<a href="http://nginx.com/" target="_blank">商业支持</a>
</div>
<div class="link-card">
<a href="https://github.com/nginx/nginx" target="_blank">源码</a>
</div>
</div>
</div>
<div class="footer">
<p>Thank you for using nginx.</p>
<p>nginx version: latest</p>
</div>
</div>
</body>
</html>
EOF
# 停止并删除已存在的同名容器
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
echo "停止并删除已存在的容器: $CONTAINER_NAME"
docker stop "$CONTAINER_NAME" >/dev/null 2>&1
docker rm "$CONTAINER_NAME" >/dev/null 2>&1
fi
# 启动 nginx 容器
echo "启动 nginx 容器..."
docker run -d \
--name "$CONTAINER_NAME" \
--restart=always \
-p "$HTTP_PORT:80" \
-p "$HTTPS_PORT:443" \
-v "$NGINX_CONF_PATH":/etc/nginx \
-v "$NGINX_HTML_PATH":/var/www/html \
-v "$NGINX_LOG_PATH":/var/log/nginx \
nginx:latest
if [ $? -eq 0 ]; then
echo ""
echo "=================================="
echo "Nginx 容器启动成功!"
echo "=================================="
echo "配置根路径: $NGINX_CONF_PATH"
echo "网站文件路径: $NGINX_HTML_PATH"
echo "日志文件路径: $NGINX_LOG_PATH"
echo "HTTP对外端口: $HTTP_PORT"
echo "HTTPS对外端口: $HTTPS_PORT"
echo "容器名称: $CONTAINER_NAME"
echo ""
echo "目录结构:"
echo " $NGINX_CONF_PATH/"
echo " ├── nginx.conf # 主配置文件"
echo " ├── mime.types # MIME类型配置"
echo " ├── conf.d/ # 站点配置目录"
echo " │ └── default.conf # 默认站点配置"
echo " ├── ssl/ # SSL证书目录"
echo " └── logs/ # 日志目录"
echo ""
echo "访问地址: http://localhost:$HTTP_PORT"
echo "HTTPS地址: https://localhost:$HTTPS_PORT (需要配置证书)"
echo "查看日志: docker logs $CONTAINER_NAME"
echo "进入容器: docker exec -it $CONTAINER_NAME /bin/bash"
echo "=================================="
else
echo "错误: Nginx 容器启动失败"
exit 1
fi
启动命令
./start-nginx.sh -c /mydata/nginx82 -w /mnt/data -p 82 -s 1443 -n static-nginx 主从 负载 nginx cn.sh
#!/bin/bash
# 颜色定义
declare -a colors=("red" "blue" "green" "orange" "purple" "cyan")
# HTML目录定义
HTML_DIR="html"
# 参数处理
if [ $# -gt 4 ]; then
echo "Usage: $0 [cluster_size] [lb_cluster_size] [host_port] [config_dir]"
echo " cluster_size: 后端节点数量 (默认: 3)"
echo " lb_cluster_size: 负载均衡器数量 (最小: 1)"
echo " host_port: 暴露的主机端口 (默认: 8080)"
echo " config_dir: 配置文件存储目录 (默认: ./nginx-configs)"
exit 1
fi
# 参数解析
CLUSTER_SIZE=${1:-3}
LB_CLUSTER_SIZE=${2:-2}
HOST_PORT=${3:-8080}
CONFIG_DIR=${4:-./nginx-configs}
# 参数验证
if ! [[ "$CLUSTER_SIZE" =~ ^[0-9]+$ ]] || [ "$CLUSTER_SIZE" -le 0 ]; then
echo "Error: Cluster size must be a positive integer"
exit 1
fi
if ! [[ "$LB_CLUSTER_SIZE" =~ ^[0-9]+$ ]] || [ "$LB_CLUSTER_SIZE" -lt 1 ]; then
echo "Error: Load balancer cluster size must be at least 1"
exit 1
fi
if ! [[ "$HOST_PORT" =~ ^[0-9]+$ ]] || [ "$HOST_PORT" -lt 1024 ] || [ "$HOST_PORT" -gt 65535 ]; then
echo "Error: Port must be between 1024 and 65535"
exit 1
fi
# 路径验证
if [ -e "$CONFIG_DIR" ] && [ ! -d "$CONFIG_DIR" ]; then
echo "Error: Config path exists but is not a directory"
exit 1
fi
# 网络配置(新增)
NETWORK_NAME=nginx-cluster
# 创建配置目录
mkdir -p "$CONFIG_DIR"
CONFIG_ROOT=$(cd "$CONFIG_DIR" && pwd)
# 文件定义
MAIN_CONF="nginx.conf"
LB_DIR="lb"
# 清理旧资源
docker rm -f nginx-node-* nginx-lb-* 2>/dev/null
docker network rm $NETWORK_NAME 2>/dev/null
rm -rf "$CONFIG_ROOT"
mkdir -p "$CONFIG_ROOT"
# 创建自定义网络(新增)
docker network create -d bridge --subnet=192.168.1.0/24 $NETWORK_NAME
# 生成主配置文件
cat <<'EOF' > "$CONFIG_ROOT/$MAIN_CONF"
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
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;
keepalive_timeout 65;
# Gzip 设置
gzip on;
include /etc/nginx/conf.d/*.conf;
}
EOF
# 启动后端节点
for i in $(seq 1 $CLUSTER_SIZE); do
# 创建节点目录结构
NODE_DIR="$CONFIG_ROOT/node-$i"
mkdir -p "$NODE_DIR/conf.d" "$NODE_DIR/$HTML_DIR"
# 生成节点配置文件
cat <<EOF > "$NODE_DIR/conf.d/default.conf"
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files \$uri \$uri/ =404;
}
}
EOF
# 生成节点页面
cat <<EOF > "$NODE_DIR/$HTML_DIR/index.html"
<!DOCTYPE html>
<html>
<head><title>Node $i</title></head>
<body style="background-color:${colors[$((i-1))]}">
<h1>Node $i</h1>
<p>Backend Server</p>
<p>Container ID: Placeholder</p>
</body>
</html>
EOF
# 启动容器(使用自定义网络)
docker run -d \
--name nginx-node-$i \
--network $NETWORK_NAME \
--ip 192.168.1.$((i+10)) \
-v "$NODE_DIR/conf.d:/etc/nginx/conf.d" \
-v "$NODE_DIR/$HTML_DIR:/usr/share/nginx/html" \
-v "$CONFIG_ROOT/$MAIN_CONF:/etc/nginx/nginx.conf" \
nginx:latest
done
# 创建负载均衡器配置
mkdir -p "$CONFIG_ROOT/$LB_DIR/conf.d"
LB_CONF="$CONFIG_ROOT/$LB_DIR/conf.d/default.conf"
# 生成负载均衡配置
cat <<EOF > $LB_CONF
upstream backend {
least_conn;
$(for i in $(seq 1 $CLUSTER_SIZE); do echo " server nginx-node-$i:80;"; done)
keepalive 32;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
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_cache_bypass \$http_upgrade;
}
location /_status {
stub_status on;
access_log off;
allow all;
}
}
EOF
# 启动负载均衡器集群
for i in $(seq 1 $LB_CLUSTER_SIZE); do
# 启动容器(使用自定义网络)
docker run -d \
--name nginx-lb-$i \
--network $NETWORK_NAME \
--ip 192.168.1.$((i+20)) \
-p $((HOST_PORT+i-1)):80 \
-v "$CONFIG_ROOT/lb/conf.d:/etc/nginx/conf.d" \
-v "$CONFIG_ROOT/$MAIN_CONF:/etc/nginx/nginx.conf" \
nginx:latest
done
# 等待容器初始化
sleep 3
# 更新页面中的容器ID
for i in $(seq 1 $CLUSTER_SIZE); do
CONTAINER_ID=$(docker inspect --format='{{.Id}}' nginx-node-$i | cut -c1-12)
sed -i "s/Placeholder/$CONTAINER_ID/" "$CONFIG_ROOT/node-$i/$HTML_DIR/index.html"
docker cp "$CONFIG_ROOT/node-$i/$HTML_DIR/index.html" nginx-node-$i:/usr/share/nginx/html/index.html
done
# 输出信息
echo "✅ 基础负载均衡集群已启动"
echo "配置目录: $CONFIG_ROOT"
echo "后端集群规模: $CLUSTER_SIZE 节点"
echo "负载均衡器集群规模: $LB_CLUSTER_SIZE 实例"
echo "访问地址: http://$(hostname):$HOST_PORT (端口映射: $HOST_PORT->$((HOST_PORT+LB_CLUSTER_SIZE-1)))"
echo "节点样式:"
for i in $(seq 1 $CLUSTER_SIZE); do
echo "Node $i -> 背景颜色: ${colors[$((i-1))]}"
done
启动命令
./cn.sh 1 1 1026 /data/configs nginx 中的健康检查
upstream gateway_servers { server 192.168.1.201:8080 weight=5; # Spring Cloud Gateway 实例1 server 192.168.1.202:8080 weight=5; # 实例2 check interval=3000 rise=2 fall=3 timeout=1000; } 这句的含义: check interval=3000 rise=2 fall=3 timeout=1000; 解释:
这是 `nginx` 中用于配置 upstream 服务器健康检查的指令,具体含义如下:
- `interval=3000`: 健康检查间隔为 3000 毫秒(3 秒),即每 3 秒检查一次后端服务器状态
- `rise=2`: 服务器从不可用状态恢复到可用状态需要连续 2 次健康检查成功
- `fall=3`: 服务器从可用状态变为不可用状态需要连续 3 次健康检查失败
- `timeout=1000`: 每次健康检查的超时时间为 1000 毫秒(1 秒),超过此时间未响应则视为检查失败
该配置确保了对 `gateway_servers` 这个 upstream 中的 Spring Cloud Gateway 实例进行定期健康监测,自动剔除故障节点,保证服务的高可用性。
使用 Nginx Stream 模块(Nginx 1.9+ 支持)
# /etc/nginx/nginx.conf
stream {
upstream mysql_backend {
server 192.168.1.150:3306 max_fails=2 fail_timeout=10s;
server 192.168.1.151:3306 max_fails=2 fail_timeout=10s;
}
upstream redis_backend {
server 192.168.1.160:6379 weight=1;
server 192.168.1.161:6379 weight=1;
}
# 转发 MySQL 流量
server {
listen 3307;
proxy_pass mysql_backend;
proxy_timeout 30s;
proxy_responses 1;
}
# 转发 Redis 流量
server {
listen 6380;
proxy_pass redis_backend;
}
}
✅ 启动后:
外部连接 VIP:3307 → 自动转发到真实 MySQL 主从
连接 VIP:6380 → 访问 Redis 集群入口 正文到此结束
- 本文标签: 其他
- 本文链接: http://119.91.109.247:8443//article/138
- 版权声明: 本文由张亚东原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权