[乐意黎原创] 通过Apache反向代理实现多个http/https访问NodeJS服务

来源:互联网 发布:脑卒中危险因素知多少 编辑:程序博客网 时间:2024/05/16 11:53


乐意黎使用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?
  1.  <VirtualHost *:80>  
  2. 226   ServerName wxapi.luxi.ren  
  3. 227   ServerAlias wxapi.luxi.ren  
  4. 228   ProxyRequests off  
  5. 229  
  6. 230   # DocumentRoot /usr/local/apache/htdocs  
  7. 231  
  8. 232   <Directory />  
  9. 233       Options -Indexes +FollowSymLinks  
  10. 234       AllowOverride None  
  11. 235       Require all granted  
  12. 236    </Directory>  
  13. 237  
  14. 238    ProxyRequests Off  
  15. 239    ProxyPreserveHost On  
  16. 240    ProxyVia Full  
  17. 241    <Proxy *>  
  18. 242       Require all granted  
  19. 243    </Proxy>  
  20. 244  
  21. 245   <Location />  
  22. 246     ProxyPass http://localhost:3389/  
  23. 247     ProxyPassReverse http://localhost:3389/  
  24. 248   </Location>  
  25. 249 </VirtualHost>  

Nodejs 中设置如下, 

[html] view plain copy
 print?
  1. var http = require('http');  
  2. var port = 3389;  
  3. ...
  4. http.createServer(app).listen(port, function(req, res){  
  5.     // res.writeHead(200);  
  6.     console.log('server is running on port '+port);  
  7. });  



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 443SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4SSLHonorCipherOrder on SSLProtocol      all -SSLv3 -TLSv1 -TLSv1.1SSLProxyProtocol all -SSLv3SSLPassPhraseDialog  builtin#   Inter-Process Session Cache:SSLSessionCache        nonenotnullSSLSessionCacheTimeout  300#SSLUseStapling On#<VirtualHost _default_:443><VirtualHost *:443>#   General setup for the virtual hostServerName wxapi.luxi.renDocumentRoot "/usr/local/apache/htdocs"ServerAdmin aerchi@gmail.comErrorLog "/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

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新买的狗一直叫怎么办 刚买的幼犬老叫怎么办 狗狗什么都不吃怎么办 新买的吊扇风小怎么办 夜市卖果汁没电怎么办 榻榻米太长2米45怎么办 木质桌子黏黏的怎么办 白色塑料桌子染色了怎么办 3dmax模型变透明了怎么办 刚养的兔子不吃怎么办 熊猫兔不吃下喝怎么办 熊猫兔感冒了一直打喷嚏怎么办 兔子后腿骨断了怎么办 兔子的腿肿了怎么办 仓鼠喝了牛奶该怎么办 宠物兔不吃不喝怎么办 兔子把木屑吃了怎么办? 小车司机碰瓷大车司机怎么办 在淘宝买到假的护肤品怎么办 淘宝购物发现是假的怎么办 电脑键盘灯不亮不能打字怎么办 海棠兔屁股有屎怎么办 大冒险告白被接受了怎么办剧透微博 大冒险被告白了怎么办 腐书网 大冒险告白被接受了怎么办 006 大冒险告白被接受了怎么办广播剧 coolpad手机解锁图案忘了怎么办 装死兔严重掉毛怎么办 兔子嘴巴磕破了怎么办 嘴巴里面摔烂了怎么办 兔子的鼻子损了怎么办 两个人嘴巴被粘牙糖粘住怎么办 小鸟被老鼠粘粘住了怎么办 小猫被老鼠粘粘住怎么办 羊子嘴巴烂了怎么办 小孩突然嘴肿了怎么办 电视机图像颜色变了 怎么办 冰沙床垫结块了怎么办 冰沙床垫融化了怎么办 脚真菌感染肿了怎么办 水雾魔珠被吃了怎么办