【问题标题】:How to run my NodeJS server behind Apache using .htaccess?如何使用 .htaccess 在 Apache 后面运行我的 NodeJS 服务器?
【发布时间】:2018-02-26 15:38:56
【问题描述】:

这是我的设置。

  • 我在域根文件夹 mydomain.com 上安装了 WordPress
  • 我的 nodejs 服务器监听端口 3000 并安装在 mydomain.com/server/ 文件夹中
  • 我无权使用虚拟主机或更改 apache 配置

这是我的 .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^server/(.*)?$ http://127.0.0.1:3000/$1 [P,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>

我仍然无法从浏览器访问我的 nodejs 服务器或从我的脚本调用它(无论是它的 ajax 还是 socket.io)

如果有人解决了这个问题,我一直在尝试解决它,但没有成功。

编辑:这是我的 server.js

var express = require('express');
var path = require('path');
var mysql = require('mysql');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
var db = require('./db');
var operators = new Array;

// socket.io connection
io.on('connection', function(socket){
    socket.emit('login', { operators: operators });
});

// Request chat button
app.get('/get_button/:key', function(req, res){
    db.connect(function(err){ if (err){ throw err; } else { console.log('DB connected'); }});
    db.query('select * from `wp_oboxchat_keys` where `key` = `' + req.params.key + '` limit 1', function(err, result) {
        if (err) {
            throw err;
        } else {
            res.sendFile(path.join(__dirname, '../', 'app/widget.html'));
            console.log('DB successful query: get_button');
        }
    });
});

// Listen to server
server.listen(3000, function(){ console.log('Server started.'); });

服务器使用节点 server.js 在我的控制台上运行没有任何错误,但无法从 Web 浏览器访问。

【问题讨论】:

  • 是监听3000端口的http服务器还是socket服务器?
  • NodeJS /socket.io 服务器监听 3000。我编辑了我的问题

标签: node.js apache .htaccess


【解决方案1】:

已解决。

在我的 server.js 中,我必须这样做:

var server = app.listen(3000);
var io = require('socket.io').listen(server);

然后在我的 .htaccess 中,我使用 mod rewrite 如下:(我的 nodeserver 位于 /server/ 相对于我的域根目录(安装 wordpress 的位置)目录中

RewriteEngine On
RewriteBase /
RewriteRule ^server/(.*)?$ http://127.0.0.1:3000/$1 [P,L]

就是这样。我希望这对遇到类似问题的人有所帮助。

【讨论】:

    【解决方案2】:

    这对我有帮助:

    所以我必须为子域配置它。假设 subdomain.domain.com 已链接到 public_html/ 内的 app/ 文件夹em> 文件夹。我使用终端访问在 app/ 文件夹中使用 pm2 运行 NodeJS 服务器(在端口 3000 上)。在 public_html/app/ 文件夹中,我添加了一个 .htaccess 文件,其中包含以下代码:

    RewriteEngine on
    RewriteRule (.*) http://0.0.0.0:3000/$1 [P,L]
    DirectoryIndex disabled
    

    像魅力一样工作。补充说明:

    1. 您可以在每个文件夹中都有一个 .htaccess 文件。所以 public_html/test/ 文件夹正在运行一个 React 应用程序,所以它有自己的 .htaccess 文件,独立于上一个目录的 .htaccess 文件。

    2. .htaccess 文件中的地址也可以是 127.0.0.1:3000 或 localhost:3000。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2016-12-01
      • 2015-12-01
      • 2015-07-30
      • 1970-01-01
      • 2015-08-27
      • 2018-02-23
      相关资源
      最近更新 更多