适用场景:使用 LNMP 一键包(军哥版)搭建网站后,若需要在 Nginx 中获取真实 IP(Real IP)或进行 TCP/SSL 分流(如四层负载均衡、SNI 预读),则需手动启用 http_realip_module 与 stream_ssl_preread_module 模块。
一、模块简介
- http_realip_module:用于获取客户端真实 IP 地址(如反向代理或 CDN 场景),可通过
set_real_ip_from与real_ip_header指令实现。 - stream_ssl_preread_module:支持 Nginx 在未解密 TLS 数据的情况下读取 SNI 主机名,实现基于域名的 SSL 分流,非常适合多域名共用 443 端口的场景。
默认 LNMP 的 Nginx 未编译这些模块,因此需要通过 upgrade.sh 重新编译添加。
二、进入 LNMP 安装目录
在 SSH 终端执行以下命令进入 LNMP 安装路径(默认为 /root/lnmp):
cd /root/lnmp若你在安装时指定了自定义路径,请进入对应目录。
三、编辑配置文件 lnmp.conf
用 vi 或 nano 打开配置文件:
vi lnmp.conf找到以下两行:
Nginx_Modules_Options=''
PHP_Modules_Options=''修改为(增加两个模块):
Nginx_Modules_Options='--with-http_realip_module --with-stream_ssl_preread_module'
PHP_Modules_Options=''保存退出(在 vi 中按 Esc → 输入 :wq → 回车)。
四、执行升级命令
在 LNMP 目录下运行升级脚本以重新编译 Nginx:
./upgrade.sh nginx升级过程会自动下载源码、重新编译 Nginx 并保留原有配置。
注意事项:
- 升级前可执行
nginx -V查看当前编译参数。 - 若系统提示 “nginx: command not found”,请确认 LNMP 安装路径是否正确。
- 升级过程需联网,请确保服务器能正常访问
nginx.org。
五、验证模块是否启用成功
执行以下命令查看 Nginx 编译模块列表:
nginx -V 2>&1 | grep module若输出中包含以下两项,则表示模块已启用:
--with-http_realip_module
--with-stream_ssl_preread_module六、应用示例
1️⃣ http_realip_module 示例
用于获取反向代理后的真实 IP:
set_real_ip_from 127.0.0.1;
set_real_ip_from 192.168.0.0/16;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
2️⃣ stream_ssl_preread_module 示例
基于 SNI 分流不同域名到不同后端:
stream {
map $ssl_preread_server_name $backend {
www.site1.com backend1;
www.site2.com backend2;
default backend_default;
}
upstream backend1 { server 127.0.0.1:8443; }
upstream backend2 { server 127.0.0.1:9443; }
server {
listen 443;
ssl_preread on;
proxy_pass $backend;
}
}
此功能常用于多域名共用 443 端口的多站点部署。
七、常见问题与解决办法
| 问题 | 原因 | 解决办法 |
|---|---|---|
upgrade.sh: command not found | 未进入 LNMP 安装目录 | 执行 cd /root/lnmp 后再运行 |
| 升级中断或失败 | 网络异常 / 源码下载失败 | 确认网络正常,重试 ./upgrade.sh nginx |
| 网站无法启动 | Nginx 配置语法错误或模块冲突 | 运行 nginx -t 检查语法后再重启 |
八、总结
http_realip_module:用于正确识别客户端 IP。stream_ssl_preread_module:用于 TLS SNI 分流。- 只需修改
lnmp.conf并运行./upgrade.sh nginx即可启用。
提示:在执行升级前,建议先备份网站配置与 Nginx 文件,避免异常升级导致中断。
延伸阅读







