RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 860868
Accepted
Mykola Veryha
Mykola Veryha
Asked:2020-07-27 09:10:09 +0000 UTC2020-07-27 09:10:09 +0000 UTC 2020-07-27 09:10:09 +0000 UTC

Drupal 7 nodejs 与 CloudFlare 的集成

  • 772

Drupal 7 中的 Nodejs 集成。如何配置服务器所需的模块

drupal
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Mykola Veryha
    2020-07-27T09:10:09Z2020-07-27T09:10:09Z

    首先,使用相同日志的示例很容易查看 nodejs 模块的原理。例如,网站上有一个管理员在用户执行操作时查看日志。当管理员访问日志页面时,正在运行的 nodejs 服务器对他进行身份验证并知道他在站点上。当用户执行需要记录的操作时,记录后,会启动一个发送消息的 ajaxCallback

    nodejs_send_content_channel_message($message)
    

    到正在运行的 nodejs 服务器。它已经向管理员显示了新日志,而无需使用 NodeJS 工具重新加载页面

    Drupal 目前开始与 NodeJS 对话

    Drupal.Nodejs.connect();  
    

    在文件中

    sites/all/modules/nodejs/nodejs.js
    

    设置 drupal-node.js

    1. nodejs在npm操作系统上安装。你可以找到如何

    2. 转到站点的根目录一级到 index.php 并安装包drupal-node.js

      npm 安装 drupal-node.js

    3. 设置 nodejs 服务器配置。转到目录

      cd node_modules/drupal-node.js

    从示例创建配置文件

    cp nodejs.config.js.example nodejs.config.js
    

    打开它

    sudo nano nodejs.config.js
    

    接下来,我将展示我的配置示例。

    settings = {
      // сервер nodejs будет работать с подтвержденным сертификатом SSL
      scheme: 'https',
      // указываем порт на котором запустим его, потом будет нужно открыть этот порт
      port: 8888,
      // ваш хост, наиболее просто использовать тот же хост сайта 
      host: 'veriga.space',
      // с помощью чего будет работь сервер nodejs, не нужно изменять, так как это нарушит интеграцию с Drupal
      resource: '/socket.io',
      // Секретный ключ для того что бы никто кроме вас не мог слать запросы к этому серверу nodejs.Вам нужно его придумать и потом нужно будет еще его указать в настройке модуля nodejs в самом Drupal
      serviceKey: '1111',
      // сайт с которым будет общаться 
      backend: {
        // если сверху мы указали что схема будет https, тогда сдесь мы так же обязаны использовать ее. Иначе будет как мининум Mixed Content и вам нужно будет делать много лишних настроек 
        port: 443,
        host: 'veriga.space',
        scheme: 'https',
        // эти две настройки по умолчанию нужно оставить
        basePath: '',
        messagePath: '/nodejs/message'
      },
      //  при запуске (node app.js) будут выводиться в консоль логи или нет 
      debug: false,
      // пути к ключам, они должны у вас быть, если нужно сгенирировать  можно использовать [https://certbot.eff.org/][1] 
      sslKeyPath: '/etc/letsencrypt/live/veriga.space/privkey.pem',
      sslCertPath: '/etc/letsencrypt/live/veriga.space/fullchain.pem',
      sslCAPath: '',
      // оставить по умолчанию
      baseAuthPath: '/nodejs/',
      // расширение для примера, потом можно будет убрать его
      extensions: ["example_extension.js"],
      // включаем 
      clientsCanWriteToChannels: true,
      clientsCanWriteToClients: true,
      // просто оставляем по умолчанию, что это можно будет понять во врямя работы
      transports: ['polling', 'websocket'],
      jsMinification: true,
      jsEtag: true,
      logLevel: 1
    };
    
    1. 启动 nodejs 服务器

      节点应用程序.js

    这个时候你会犯错

    events.js:167
          throw er; // Unhandled 'error' event
          ^
    
    Error: listen EADDRNOTAVAIL 104.27.182.127:8888
    

    这个错误意味着(ERROR ADDRESS NOT AVAILABLE)这个端口在你的操作系统中是关闭的,你需要打开它 打开端口

    fs.js:119
        throw err;
        ^
    
    Error: ENOENT: no such file or directory, open
    

    此错误表示未找到ssl证书文件,需要检查sslKeyPath、sslCertPath

    events.js:167
          throw er; // Unhandled 'error' event
          ^
    
    Error: listen EACCES 127.0.0.1:80
    

    使用不同的端口

    events.js:167
          throw er; // Unhandled 'error' event
          ^
    
    Error: listen EADDRINUSE 127.0.0.1:8080
    

    (ERROR ADDRESS IN USE) 端口已经在使用中,一个简单的选项是选择不同的端口

    我没有任何其他错误。服务器启动并在控制台中显示一条消息

    Started https server.
    

    这样就完成了 drupal-node.js 设置

    在 Drupal 中设置 nodejs 模块

    首先去 /admin/config/nodejs/config

    协议 - https 主机 - veriga.space Node.js 服务密钥 - 1111

    即使在这一点上我也犯了一个错误

    Error reaching the Node.js server at "nodejs/health/check": [0] Error opening socket ssl://veriga.space:8888.
    

    该错误出现在方法中的/includes/common.inc文件中drupal_http_request

    当 Drupal 尝试使用该函数向 nodejs 服务器发送请求(检查其版本)时

    stream_socket_client
    

    从 php5.6 版本开始,根本不可能使用未经验证的 SSL 证书,这就是它返回 FALSE 的原因。

    另一个错误是可能的

    Error reaching the Node.js server at "nodejs/health/check": [-111] Connection refused.
    

    这意味着您忘记启动 nodejs 服务器

    在后台运行nodejs服务器

    1. 在站点的根目录

      npm 永远安装 -g

      cd node_modules/drupal-node.js

      永远启动 app.js

    永远

    • 0
  2. Best Answer
    Mykola Veryha
    2020-08-03T19:58:39Z2020-08-03T19:58:39Z
    1. nodejs在npm操作系统上安装。你可以找到如何

    2. 安装包drupal-node.js

      cd /var/aegir/platforms/photon_tec-7.0.2/sites/dev.bcltec.com npm install drupal-node.js

    3. 设置 nodejs 服务器配置。

      cd /var/aegir/platforms/photon_tec-7.0.2/sites/dev.bcltec.com/node_modules/drupal-node.js

    从示例创建配置文件

    cp nodejs.config.js.example nodejs.config.js
    

    打开它

    sudo nano nodejs.config.js
    

    下一个内容

    settings = {
      scheme: 'https',
      port: 8888,
      host: '206.189.150.100',
      resource: '/socket.io',
      serviceKey: '1111',
      backend: {
        port: 443,
        host: 'dev.bcltec.com',
        scheme: 'https',
        basePath: '',
        messagePath: '/nodejs/message'
      },
      debug: false,
      sslKeyPath: '/var/aegir/config/ssl.d/bcltec.com/openssl.key',
      sslCertPath: '/var/aegir/config/ssl.d/bcltec.com/openssl.crt',
      sslCAPath: '',
      baseAuthPath: '/nodejs/',
      // расширение для примера, потом можно будет убрать его
      extensions: ["example_extension.js"],
      clientsCanWriteToChannels: true,
      clientsCanWriteToClients: true,
      transports: ['polling', 'websocket'],
      jsMinification: true,
      jsEtag: true,
      logLevel: 1
    };
    
    1. 打开端口 8888 iptables -A INPUT -p tcp --dport 8888--jump ACCEPT iptables -A OUTPUT -p tcp --dport 8888 --jump ACCEPT iptables-save

    2. 启动 nodejs 服务器

      节点应用程序.js

    服务器启动并在控制台中显示一条消息

    Started https server.
    

    检查服务器

    https://206.189.150.100:8888/example

    应该在浏览器中显示 - Hello World

    在后台运行nodejs服务器

    1. cd /var/aegir/platforms/photon_tec-7.0.2/sites/dev.bcltec.com

      npm 永远安装 -g

      cd node_modules/drupal-node.js

      永远启动 app.js

    https://github.com/foreverjs/forever

    这样就完成了 drupal-node.js 设置

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ +++++++++++++++++++++++++++++++++++

    NodeJs 的子域设置和代理配置

    子域 njs.dev.bcltec.com 必须按照此说明配置 https://support.cloudflare.com/hc/en-us/articles/200168756-How-do-I-add-a-subdomain-to-my -现场-

    根据本教程安装代理https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension

    主机配置 njs.dev.bcltec.com.conf

    cd /etc/apache2/sites-available touch njs.dev.bcltec.com.conf nano njs.dev.bcltec.com.conf

    ProxyRequests Off ProxyPreserveHost On ProxyVia full

    SSLProxyEngine on
    SSLProxyVerify none 
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
    
    ProxyPass / https://206.189.150.100:8888/
    ProxyPassReverse / https://206.189.150.100:8888/
    
    ServerName njs.dev.bcltec.com
    
    SSLCertificateFile /var/aegir/config/ssl.d/bcltec.com/openssl.crt
    SSLCertificateKeyFile /var/aegir/config/ssl.d/bcltec.com/openssl.key
    

    a2ensite njs.dev.bcltec.com.conf 服务 apache2 重新加载

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ +++++++++++++++++++++++++++++++++++++++

    在 Drupal 中设置 nodejs 模块

    启用以下模块

    Nodejs Config Nodejs 集成 Nodejs Notifications - 检查它是否有效

    转到 /admin/config/nodejs/config

    协议 - https 主机 - njs.dev.bcltec.com Node.js 服务密钥 - 1111

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5