欢迎光临
我们一直在努力

CentOS 9:HTTPS 代理配置及局域网访问指南

很多人申请域名之余,为了正常访问,还要选择SSL证书颁发机构(CA)来申请证书,

正常情况下是这样的:

生成CSR(证书签名请求): 由申请平台自动生成CSR,并自行留存,以备后续使用。 提交申请: 按照指引提交申请,还有对IP地址或域名的所有权进行验证。 这些验证可能需要通过映射外网端口或提供其他所有权证明。 支付费用: 所选CA可能还会要求支付费用,所以每年都要按照指示完成支付。

目前互联网上绝大多数的情况下都是使用https加密方式数据传输,那么在局域网内提供的服务如何实现这种打开方式呢?

我在一台安装了CentOS 9的系统上,将原本只能通过HTTP+IP+端口访问的内置服务器,改造为支持HTTPS+IP+端口在局域网内方式访问。

本篇内容,可解决开源项目:公众号文章导出( wechat-article-exporter )(见下图),需要https支持,在此抛砖引玉,也可将次应用到其他需要https的服务中。

CentOS 9默认无自带的应用服务器,通常用Nginx做反向代理是最通用、稳定的方案。

一、环境前置检查(CentOS 9)

首先确认系统基础环境,执行以下命令:

# 1. 更新系统(可选,确保依赖最新)
sudo dnf update -y

# 2. 检查防火墙状态(CentOS 9默认用firewalld)
sudo systemctl status firewalld
# 若未启动,执行:sudo systemctl start firewalld && sudo systemctl enable firewalld

# 3. 关闭SELinux(避免权限干扰,测试环境推荐;生产环境可微调规则)
sudo setenforce 0 # 临时关闭
sudo sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config # 永久关闭(需重启生效)

二、步骤1:安装OpenSSL并生成自签名证书

CentOS 9默认已安装OpenSSL,直接生成证书(核心:Common Name填服务器内网IP,本处以192.168.1.100为例)。

1. 创建证书存放目录

# 创建专属目录,避免和系统证书混淆
sudo mkdir -p /etc/nginx/ssl # 后续Nginx会用这个路径,统一管理
sudo chmod 700 /etc/nginx/ssl # 提高安全性,仅root可访问
cd /etc/nginx/ssl

2. 生成自签名证书(一步到位,无需手动填信息)

执行以下命令(替换192.168.1.100为你的服务器内网IP):

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \\
-keyout server.key \\
-out server.crt \\
-subj "/C=CN/ST=Province/L=City/O=Local/CN=192.168.1.100"

参数说明:

  • -x509:直接生成自签名证书(无需CSR中间步骤);

  • -nodes:私钥不加密(避免启动Nginx时需要输入密码);

  • -days 3650:证书有效期10年;

  • CN=192.168.1.100:核心!必须填服务器内网IP,否则浏览器提示证书不匹配;

  • 其他字段(C/ST/L/O)可自定义,不影响局域网访问。

3. 验证证书文件

ls /etc/nginx/ssl/
# 应输出:server.key(私钥) server.crt(证书)
sudo chmod 600 /etc/nginx/ssl/* # 权限加固,仅root可读,本处可不做

三、步骤2:安装并配置Nginx(反向代理实现HTTPS)

CentOS 9的AppStream仓库包含Nginx,直接安装即可,通过Nginx反向代理将HTTPS请求转发到你的原有HTTP服务。

1. 安装Nginx

# 安装Nginx
sudo dnf install -y nginx

# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx

# 验证Nginx启动状态
sudo systemctl status nginx
# 看到 "active (running)" 即为成功

2. 配置Nginx反向代理(核心)

假设你的原有HTTP服务运行在127.0.0.1:3000(替换为你的实际HTTP服务端口,比如3000/80等),配置Nginx监听13000端口的HTTPS请求,并转发到原有HTTP服务。

# 备份默认配置(避免冲突),如系统没有,可不用做此步骤
sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak

# 创建自定义HTTPS配置文件
sudo vim /etc/nginx/conf.d/https-proxy.conf

将以下内容粘贴到文件中(重点替换标注的两处配置):

# 监听13000端口的HTTPS请求(IP访问)
server {
listen 13000 ssl; # 核心:13000端口 + SSL(HTTPS)使用13000避免与3000冲突
listen [::]:13000 ssl; # 兼容IPv6(可选)
server_name _; # 匹配所有IP,无需域名

# 加载自签名证书(路径和之前生成的一致)
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;

# SSL优化配置(CentOS 9推荐)
ssl_protocols TLSv1.2 TLSv1.3; # 仅支持安全的TLS版本
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;

# 反向代理到你的原有HTTP服务(★替换为你的实际端口★)
location / {
proxy_pass http://127.0.0.1:3000; # 比如原有服务是8080端口
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; # 告诉后端服务是HTTPS
}
}

3. 验证Nginx配置并重启

# 检查配置语法是否正确(关键!避免配置错误导致Nginx启动失败)
sudo nginx -t
# 输出 "nginx: configuration file /etc/nginx/nginx.conf test is successful" 即为正确

# 重启Nginx使配置生效
sudo systemctl restart nginx

四、步骤3:放行防火墙端口(CentOS 9)

CentOS 9默认防火墙会拦截3000端口,需要手动放行:

# 放行3000/TCP端口(HTTPS用TCP协议)
sudo firewall-cmd –add-port=3000/tcp –permanent

# 重新加载防火墙规则
sudo firewall-cmd –reload

# 验证端口是否放行
sudo firewall-cmd –list-ports
# 应看到 "3000/tcp"

五、步骤4:测试局域网HTTPS访问

1. 服务器本地测试

# 用curl测试(-k忽略自签名证书的安全提示)
curl -k https://192.168.1.100:3000
# 若返回原有HTTP服务的内容,说明配置成功

2. 局域网其他设备测试

在同一局域网的电脑/手机浏览器中访问:

https://你的服务器内网IP:13000(比如https://192.168.1.100:13000)

浏览器提示处理:

  • Chrome/Edge:点击「高级」→「继续访问xxx(不安全)」;

  • Firefox:点击「高级」→「添加安全例外」→「确认例外」;

  • 手机浏览器:同理,选择「继续访问」即可(仅局域网测试用,无安全风险)。

六、常见问题排查

  • 访问超时:检查防火墙是否放行3000端口、Nginx是否启动、原有HTTP服务是否正常;

  • 证书不匹配:重新生成证书,确保CN=后是服务器内网IP;

  • Nginx启动失败:执行sudo nginx -t检查配置语法,或查看日志sudo journalctl -u nginx。

  • 针对你遇到的「Job for nginx.service failed because the control process exited with error code」报错,按以下步骤精准排查解决(结合你选中的Nginx配置,重点排查以下4点):

  • 1. 优先检查配置语法(最常见原因):执行sudo nginx -t,若提示「syntax is ok」则语法无问题,若提示具体行错误(如括号不匹配、路径错误),打开配置文件sudo vim /etc/nginx/conf.d/https-proxy.conf,对照选中的配置内容修正(比如括号未闭合、标点符号缺失,CentOS 9 Nginx对语法要求严格,空格、分号不能遗漏); 2. 检查证书路径和权限:确认证书文件存在且Nginx可访问,执行ls -l /etc/nginx/ssl/,若文件不存在,重新生成证书;若权限不足,重新执行sudo chmod 600 /etc/nginx/ssl/*,并确保证书路径与配置文件中ssl_certificate、ssl_certificate_key的路径完全一致(无拼写错误); 3. 排查端口冲突(选中配置监听3000端口):执行netstat -tulpn | grep 3000,若显示3000端口已被其他服务占用,可修改Nginx配置中的监听端口(如3001),或停止占用端口的服务(sudo systemctl stop 占用服务名); 4. 查看详细错误日志定位问题:执行sudo journalctl -xeu nginx.service,日志中会明确提示失败原因(如「invalid SSL certificate」「address already in use」),根据提示针对性解决,比如证书损坏则重新生成,端口冲突则调整端口。 解决后重新执行sudo nginx -t验证配置,无误后再重启Nginx:sudo systemctl restart nginx。

    总结

  • 核心流程:CentOS 9下生成以服务器内网IP为CN的自签名证书 → 安装Nginx并配置反向代理(监听13000端口HTTPS,转发到原有HTTP服务) → 放行防火墙13000端口;

  • 关键注意:自签名证书的CN必须填服务器内网IP,否则浏览器会提示证书无效;

  • 适配调整:只需修改Nginx配置中的proxy_pass为你的实际HTTP服务端口,即可适配任意内置/自定义HTTP服务。

  • 按照以上步骤操作后,你就能在局域网内通过https://服务器IP:13000稳定访问目标服务了。

    赞(0)
    未经允许不得转载:171主机测评 » CentOS 9:HTTPS 代理配置及局域网访问指南
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址