[乐意黎原创] 通过Apache反向代理实现多个http/https访问NodeJS服务
2017-06-22 16:56
936 查看
乐意黎使用ECS主机的环境: Centos 7.2 系统, php +Apache, 搭了 Nodejs.
起先只能通过 IP 来访问node, 折腾了好几天, 起初配置了, 可以通过https子域名来访问, 但会跳转到 IP上,(我使用了 htacess 来转向), 终于可以通过配置apache来通过http或https子域名 来访问nodejs了. 未在 htacess中设置任何转向.
服务器安装了 Nodejs, Apache, 并且申请了SSL证书.
1. 通过 80端口访问(http访问 node)
在 /etc/httpd/httpd.conf里添加如下配置, (注, 未在 .htacess 文件中做任何设置)nodejs 服务返回 http 服务, 端口为: 3389
即: 通过 http://wxapi.luxi.ren 访问代理的 node 服务
[html] view
plain copy
print?
<VirtualHost *:80>
226 ServerName wxapi.luxi.ren
227 ServerAlias wxapi.luxi.ren
228 ProxyRequests off
229
230 # DocumentRoot /usr/local/apache/htdocs
231
232 <Directory />
233 Options -Indexes +FollowSymLinks
234 AllowOverride None
235 Require all granted
236 </Directory>
237
238 ProxyRequests Off
239 ProxyPreserveHost On
240 ProxyVia Full
241 <Proxy *>
242 Require all granted
243 </Proxy>
244
245 <Location />
246 ProxyPass http://localhost:3389/
247 ProxyPassReverse http://localhost:3389/
248 </Location>
249 </VirtualHost>
Nodejs 中设置如下,
[html] view
plain copy
print?
var http = require('http');
var port = 3389;
...
http.createServer(app).listen(port, function(req, res){
// res.writeHead(200);
console.log('server is running on port '+port);
});
2. 通过 443端口访问 (https访问node)
如: 通过 https://api.luxi.ren 访问 nodejs 服务 特别说明:
1. 此种情况下, api 子域名配置 SSL 证书
2. Node JS 返回的是 http 服务 即var https = require('http'); node 未绑定证书. 端口为 3389.
node 部分代码如下:
var http = require('http');
...
var port = 3389;
...
http.createServer(app).listen(port, function(req, res){
// res.writeHead(200);
console.log('server is running on port '+port);
});
编辑 vim /etc/httpd/extra/httpd-ssl.conf 文件的配置.
# Listen 443 SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4 SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4 SSLHonorCipherOrder on SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLProxyProtocol all -SSLv3 SSLPassPhraseDialog builtin # Inter-Process Session Cache: SSLSessionCache nonenotnull SSLSessionCacheTimeout 300 #SSLUseStapling On #<VirtualHost _default_:443> <VirtualHost *:443> # General setup for the virtual host ServerName wxapi.luxi.ren DocumentRoot "/usr/local/apache/htdocs" ServerAdmin aerchi@gmail.com ErrorLog "/usr/local/apache/logs/error_log" TransferLog "/usr/local/apache/logs/access_log" SSLEngine on #SSLCertificateFile "/etc/httpd/server.crt" SSLCertificateFile "cert/public.pem" #SSLCertificateFile "/etc/httpd/server-dsa.crt" #SSLCertificateFile "/etc/httpd/server-ecc.crt" SSLCertificateKeyFile "cert/private.key" SSLCertificateChainFile "cert/chain.pem" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/usr/local/apache/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-5]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 # Per-Server Logging: CustomLog "/usr/local/apache/logs/ssl_request_log" \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
# 2017-06-22 #<VirtualHost wxapi-2.luxi.ren:443> <VirtualHost *:443> ServerName wxapi-2.luxi.ren ServerAlias wxapi-2.luxi.ren ServerAdmin aerchi@gmail.com SSLEngine on # SSLProtocol "TLSv1.2 TLSv1.1 TLSv1" SSLCertificateFile "cert/public.pem" SSLCertificateKeyFile "cert/private.key" SSLCertificateChainFile "cert/chain.pem" # ProxyRequests off <Directory /> Options -Indexes +FollowSymLinks AllowOverride None Require all granted </Directory> ProxyRequests Off ProxyPreserveHost On ProxyVia Full <Proxy *> Require all granted </Proxy> <Location /> ProxyPass http://localhost:3389/ ProxyPassReverse http://localhost:3389/ </Location> </VirtualHost>
附: apache里SSL 的配置
安装证书
文件说明:
1. 证书文件xxxx.pem,包含两段内容,请不要删除任何一段内容。
2. 如果是证书系统创建的CSR,还包含:证书私钥文件214137331610269.key、证书公钥文件public.pem、证书链文件chain.pem。
( 1 ) 在Apache的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并且命名为214137331610269.key;
( 2 ) 打开 apache 安装目录下 conf 目录中的 httpd.conf 文件,找到以下内容并去掉“#”:
#LoadModule ssl_module modules/mod_ssl.so (如果找不到请确认是否编译过 openssl 插件) #Include conf/extra/httpd-ssl.conf
( 3 ) 打开 apache 安装目录下 conf/extra/httpd-ssl.conf 文件 (也可能是conf.d/ssl.conf,与操作系统及安装方式有关), 在配置文件中查找以下配置语句:
# 添加 SSL 协议支持协议,去掉不安全的协议 SSLProtocol TLSv1.2 TLSv1.1 TLSv1 # 修改加密套件如下 SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4 # 证书公钥配置 SSLCertificateFile cert/public.pem # 证书私钥配置 SSLCertificateKeyFile cert/xxxx.key # 证书链配置,如果该属性开头有 '#'字符,请删除掉 SSLCertificateChainFile cert/chain.pem
( 4 ) 重启 Apache。
( 5 ) 通过 https 方式访问您的站点。
-------------------------------------------------------------------------------------------------------
表述有所混乱, 但配置测试成功.
4. 测试页面(未在 htacess中设置任何转向. )
1). 第一个 正常的 https服务2). 第二个https访问代理的nodejs
乐意黎原创
2017-06-22
本文地址: http://blog.csdn.net/aerchi/article/details/73605496
相关文章推荐
- 通过 Apache 代理访问 NodeJS 服务
- nginx通过ssl证书实现https和http共存访问
- 通过NodeJS,Express搭建本地HTTP访问服务.
- web服务之Apache实现的https访问
- 源码编译apache实现CGI,虚拟主机,httpds安全访问,status服务状态信息,压缩等功能。
- 三步实现通过域名访问tomcat的http和https服务器
- [转]深入Android通过Apache HTTP访问HTTP资源
- Android开发进阶(四)--深入Android通过Apache HTTP访问HTTP资源
- 使用 gSOAP 通过 HTTP 和 HTTPS 调用由 WSAD 创建的 J2EE Web 服务
- [转]C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现
- windows下快速安装可以通过http和https访问的subversion服务器
- Apache的应用三-- 通过HTTP访问本地用户目录
- 通过HttpClient实现访问HTTPS网站
- 通过HttpListener实现简单的Http服务
- windows下apache配置SSL以实现http转换为https
- ArcGIS API for Silverlight中通过https访问rest服务
- 通过HttpListener实现简单的Http服务
- ArcGIS API for Silverlight中通过https访问rest服务(二)
- linux下使用apache http server 连接 tomcat 达到使用直接apache一个服务端口就可访问php和jsp