CentOS下Apache+Node.js SSL配置:分路径访问静态页与Node服务
解决方法
1. 启用必要Apache模块
首先确认Apache加载了代理、SSL和目录索引所需的模块,CentOS 7下执行:
# 检查已加载模块 sudo apachectl -M
确保输出中包含proxy_module、proxy_http_module、ssl_module、dir_module。如果缺失,编辑/etc/httpd/conf.modules.d/下对应模块的配置文件,取消LoadModule行的注释,例如:
- 对于mod_proxy:
LoadModule proxy_module modules/mod_proxy.so - 对于mod_proxy_http:
LoadModule proxy_http_module modules/mod_proxy_http.so - 对于mod_ssl:
LoadModule ssl_module modules/mod_ssl.so - 对于mod_dir:
LoadModule dir_module modules/mod_dir.so
2. 配置SSL虚拟主机
找到你的SSL虚拟主机配置文件(通常在/etc/httpd/conf.d/目录下,比如ssl.conf或自定义的phpnodejs.conf),替换原有内容为以下配置:
<VirtualHost *:443> ServerName phpnodejs.mydomain.com # 根路径静态文件设置 DocumentRoot "/var/www/html/phpcode" <Directory "/var/www/html/phpcode"> Options Indexes FollowSymLinks AllowOverride None Require all granted # 指定默认索引文件,优先加载index.html DirectoryIndex index.html index.htm </Directory> # 仅代理/nodejssl/路径到Node.js服务 ProxyPass "/nodejssl/" "http://localhost:3000/" ProxyPassReverse "/nodejssl/" "http://localhost:3000/" # SSL证书配置(替换为你的证书路径) SSLEngine On SSLCertificateFile "/etc/pki/tls/certs/phpnodejs.crt" SSLCertificateKeyFile "/etc/pki/tls/private/phpnodejs.key" # 若有中间证书,添加此行 # SSLCertificateChainFile "/etc/pki/tls/certs/chain.crt" </VirtualHost> # 可选:配置HTTP自动跳转至HTTPS <VirtualHost *:80> ServerName phpnodejs.mydomain.com Redirect permanent / https://phpnodejs.mydomain.com/ </VirtualHost>
3. 验证配置并重启服务
检查配置语法是否正确:
sudo apachectl configtest
如果返回Syntax OK,重启Apache生效:
sudo systemctl restart httpd
核心逻辑说明
- 根路径请求由
DocumentRoot指定的静态目录处理,DirectoryIndex确保访问/时自动加载index.html。 - 仅
/nodejssl/路径的请求会被代理到监听3000端口的Node.js服务,ProxyPassReverse确保响应头的路径正确。 - 所有访问通过SSL加密,配合80端口的跳转配置,强制用户使用HTTPS。
内容的提问来源于stack exchange,提问作者Kaushal
相关产品推荐
相关产品推荐

