前言:本文记录基于3台Redhat 10服务器部署Nginx,实现多IP、多端口、多域名及HTTPS访问的完整过程,重点梳理部署中遇到的404、连接失败、域名解析异常等常见问题,附精准解决方案,新手可直接照搬实操,避免踩坑。
核心需求:3台Redhat 10服务器(IP已提前配置),通过Nginx实现以下效果(与目标图完全一致):
-
访问 172.25.2.129 → 显示 "129"
-
访问 172.25.2.130 → 显示 "130"
-
访问 172.25.2.128:9091 → 显示 "9091"
-
访问 172.25.2.128:9092 → 显示 "9092"
-
访问 https://www.https.com → 显示 "www.https.com"
环境说明:3台服务器IP分配(可根据自身实际IP修改)
-
node1(主服务器):172.25.2.128(负责多端口、HTTPS、域名访问)
-
node2:172.25.2.129(负责IP直接访问,显示129)
-
node3:172.25.2.130(负责IP直接访问,显示130)
一、前期准备(3台服务器统一执行)
先完成Nginx安装、网页目录创建、权限配置及防火墙放行,为后续部署打下基础,避免因基础环境缺失导致报错。
php
# 1. 安装Nginx(Redhat 10 用dnf包管理)
dnf install -y nginx
# 2. 创建网页根目录及对应测试页面(按需求区分目录)
mkdir -p /www/ip129 /www/ip130 /www/9091 /www/9092 /www/https
# 3. 写入测试内容(确保访问后显示对应字符)
echo "129" > /www/ip129/index.html
echo "130" > /www/ip130/index.html
echo "9091" > /www/9091/index.html
echo "9092" > /www/9092/index.html
echo "www.https.com" > /www/https/index.html
# 4. 关键权限配置(Redhat必做,避免权限不足报错)
chown -R nginx:nginx /www # 给Nginx用户目录权限
chmod -R 755 /www # 给目录读写执行权限
chcon -R -t httpd_sys_content_t /www # SELinux网页权限配置
# 5. 防火墙放行所需端口(80、443、9091、9092)
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=9091/tcp
firewall-cmd --permanent --add-port=9092/tcp
firewall-cmd --reload
二、Nginx分机配置(按服务器角色分别配置)
核心:3台服务器分工明确,主服务器负责多端口和HTTPS,另外两台负责单一IP访问,配置需简洁精准,避免冗余导致报错。
1. 主服务器(node1:172.25.2.128)配置
负责9091、9092端口访问及HTTPS访问,需配置证书,覆盖默认nginx.conf文件:
php
# 重写nginx.conf配置文件
cat > /etc/nginx/nginx.conf << EOF
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 9091端口配置
server {
listen 9091;
root /www/9091;
index index.html;
}
# 9092端口配置
server {
listen 9092;
root /www/9092;
index index.html;
}
# HTTPS配置(www.https.com)
server {
listen 443 ssl;
server_name www.https.com;
# SSL证书配置(自签名证书,测试用)
ssl_certificate /etc/pki/nginx/server.crt;
ssl_certificate_key /etc/pki/nginx/server.key;
# 安全配置(可选,提升兼容性)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
root /www/https;
index index.html;
}
}
EOF
# 生成自签名SSL证书(测试专用,生产环境需用正规证书)
mkdir -p /etc/pki/nginx
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/nginx/server.key -out /etc/pki/nginx/server.crt -subj "/CN=www.https.com"
# 重启Nginx生效
systemctl restart nginx
systemctl enable nginx
2. node2(172.25.2.129)配置
仅负责IP访问,显示"129",配置极简,避免多余配置导致404:
php
# 重写nginx.conf,仅保留核心配置
cat > /etc/nginx/nginx.conf << EOF
worker_processes auto;
events { worker_connections 1024; }
http {
server {
listen 80; # 监听80端口(默认HTTP端口)
root /www/ip129; # 对应网页目录
index index.html; # 默认首页
}
}
EOF
# 重启Nginx生效
systemctl restart nginx
systemctl enable nginx
3. node3(172.25.2.130)配置
与node2配置逻辑一致,仅修改网页目录,显示"130":
php
# 重写nginx.conf
cat > /etc/nginx/nginx.conf << EOF
worker_processes auto;
events { worker_connections 1024; }
http {
server {
listen 80;
root /www/ip130;
index index.html;
}
}
EOF
# 重启Nginx生效
systemctl restart nginx
systemctl enable nginx
三、部署报错排查与解决方案(重点!)
实操中遇到多个典型报错,以下是报错现象、原因分析及精准解决方案,与本人实际部署过程完全一致,新手可直接对照解决。
报错1:curl 172.25.2.129 报 404 Not Found
【现象】访问172.25.2.129时,返回nginx 404页面,其他端口(9091、9092)访问正常。
【原因】1. 网页目录与Nginx配置中的root目录不匹配;2. 目录权限未生效;3. Nginx配置未重启。
【解决方案】登录172.25.2.129执行以下命令,重建目录、重置配置并重启:
php
# 重建网页目录及文件(确保路径正确)
mkdir -p /www/ip129
echo "129" > /www/ip129/index.html
# 重新配置权限(避免权限遗漏)
chown -R nginx:nginx /www
chcon -R -t httpd_sys_content_t /www
# 重启Nginx,使配置和权限生效
systemctl restart nginx
报错2:curl 172.25.2.130 报 Could not connect to server
【现象】访问172.25.2.130时,连接失败,提示"Failed to connect to 172.25.2.130 port 80"。
【原因】1. Nginx未启动或未设置开机自启;2. 防火墙未放行80端口;3. Nginx配置错误。
【解决方案】登录172.25.2.130执行以下命令,全面修复:
php
# 重建网页文件(确保文件存在)
mkdir -p /www/ip130
echo "130" > /www/ip130/index.html
# 重置Nginx配置(避免配置错误)
cat > /etc/nginx/nginx.conf << EOF
worker_processes auto;
events { worker_connections 1024; }
http {
server {
listen 80;
root /www/ip130;
index index.html;
}
}
EOF
# 重启Nginx并设置开机自启
systemctl restart nginx
systemctl enable nginx
# 重新放行防火墙80端口(确保端口开放)
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
报错3:curl -k https://www.https.com 报 Could not connect to server
【现象】HTTPS访问失败,提示无法连接443端口,其他端口访问正常。
【原因】1. SSL证书未生成或生成路径错误;2. Nginx未重启,HTTPS配置未生效;3. 防火墙未放行443端口。
【解决方案】登录主服务器(172.25.2.128)执行以下命令:
php
# 重新生成SSL证书(确保路径和域名正确)
mkdir -p /etc/pki/nginx
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/nginx/server.key -out /etc/pki/nginx/server.crt -subj "/CN=www.https.com"
# 重启Nginx,使HTTPS配置生效
systemctl restart nginx
# 确认防火墙443端口已放行(若未放行,执行以下命令)
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
报错4:curl www.test.com 卡住(无响应)
【现象】访问域名时卡住,无法返回内容,IP访问正常。
【原因】本地hosts文件未配置域名解析,导致无法将域名映射到主服务器IP。
【解决方案】在测试机器(或主服务器)配置hosts解析:
php
# 写入hosts文件,映射域名到主服务器IP
echo "172.25.2.128 www.test.com" >> /etc/hosts
echo "172.25.2.128 www.exam.com" >> /etc/hosts
echo "172.25.2.128 www.https.com" >> /etc/hosts
四、最终测试验证(全部成功)
所有问题修复后,在测试机器(或主服务器)执行以下curl命令,验证所有需求是否实现:

五、总结与避坑要点
本次部署基于3台Redhat 10服务器,实现了Nginx多IP、多端口、HTTPS访问,核心避坑点如下,新手必看:
-
Redhat系统必须配置SELinux权限(chcon命令),否则会因权限不足导致404或访问失败,这是Redhat与其他Linux系统的核心区别。
-
Nginx配置需简洁,避免冗余,尤其是单一IP访问的服务器,仅保留监听端口、根目录、首页三个核心配置即可。
-
SSL证书生成时,需确保域名(CN)与配置中的server_name一致,否则HTTPS访问会报错。
-
所有配置修改后,必须重启Nginx才能生效,防火墙规则修改后需reload生效,这是最容易遗漏的步骤。
-
域名访问前,必须配置hosts解析(测试环境),否则会出现域名无法解析、访问卡住的问题。
本文所有命令均经过实际测试,可直接复制执行,无需修改逻辑(仅需根据自身服务器IP调整即可),适合新手入门实操,也可作为企业测试环境部署参考。