NodeJS Express 和 Apache 在同一服务器上

2023-12-25

我有一个 VPS,在 Apache 配置 (/etc/apache2/sites-available/000-default.conf) 中指定了多个虚拟主机。

#Example config
<VirtualHost *:80>
    ServerName example.com
    Redirect / https://example.com/
    DocumentRoot /var/www/example
    ServerAdmin [email protected] /cdn-cgi/l/email-protection
</VirtualHost>

<VirtualHost *:80>
    ServerName sub.example.com
    DocumentRoot /var/www/sub.example
    ServerAdmin [email protected] /cdn-cgi/l/email-protection
</VirtualHost>

另外,我在同一台服务器上有 Nodejs 应用程序,运行端口 *:3000。问题是,某些 ISP 阻止该端口,用户无法使用该应用程序(例如,在我的学校,我无法访问该端口)。我希望这个应用程序将在端口 *:443 上运行,但我仍然想在其他主机上使用 Apache。有没有办法让应用程序与 Apache 位于同一端口上,并仅在用户访问域时才使用该应用程序https://socket.example.com https://socket.example.com,否则将使用 Apache。我正在添加 Apache 服务器的示例配置和 Nodejs 应用程序的一部分。

var fs = require('fs');
var http = require('http');
var https = require('https');
var privateKey = fs.readFileSync('/etc/letsencrypt/live/socket.example.com/privkey.pem', 'utf8');
var certificate = fs.readFileSync('/etc/letsencrypt/live/socket.example.com/cert.pem', 'utf8');
var bodyParser = require("body-parser");
var credentials = { key: privateKey, cert: certificate };
var express = require('express');
var app = express();
var port = 3000;
var httpsServer = https.createServer(credentials, app);


httpsServer.listen(port, function () {
    console.log('Server running on port: ' + port);
});


var urlencodedParser = bodyParser.urlencoded({ extended: false });

app.use(function (req, res, next) {
    res.header('Access-Control-Allow-Origin', req.headers.origin);
    res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    res.header('Access-Control-Allow-Credentials', 'true');
    res.header('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type');

    if ('OPTIONS' == req.method) {
        res.writeHead(200);
        res.end();
    } else {
        next();
    }
});


app.get('/', function (req, res) {
    res.send(400);
    console.log("visit");
});

如果我忘记了什么,请告诉我,我会添加它。


创建一个 Apache 虚拟主机,它将代理对 Node.js 应用程序的请求。您可以将node.js应用程序运行到任何可用端口,并通过apache代理它。

<VirtualHost *:443>
   ServerName yourdomain.com
   ServerAlias www.yourdomain.com
   DocumentRoot /var/www/defaultapp/
   Options -Indexes
   ErrorDocument 503 /check.html

   SSLProxyEngine On
   ProxyPass /check.html !
   ProxyPass / https://localhost:3000
   ProxyPassReverse / https://localhost:3000
   ProxyPreserveHost On

   SSLEngine on
   SSLCertificateFile /etc/apache2/ssl/domain.com.crt
   SSLCertificateKeyFile /etc/apache2/ssl/domain.com.key
   SSLCertificateChainFile /etc/apache2/ssl/domain.com:3000.ca-bundle
</VirtualHost>

请检查https://linuxtogether.org/configuring-reverse-proxy-for-node-using-apache-mod-proxy/ https://linuxtogether.org/configuring-reverse-proxy-for-node-using-apache-mod-proxy/欲了解详情

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NodeJS Express 和 Apache 在同一服务器上 的相关文章

  • 如何使用 Protractor 检查某个元素是否不可点击?

    测试一个元素是否很简单is可使用量角器点击 但我一直在挠头试图弄清楚如何检查元素是否not可点击 我尝试将 click 函数包装在 try catch 中 这样当尝试单击时抛出错误时 它应该捕获它并让测试通过 然而 这不起作用 这是我执行检
  • 在ubuntu 12.04上安装nodejs和npm后找不到.npmrc文件

    我刚刚按照教程在我的 ubuntu 12 04 上安装了 nodejs 和 npm https gist github com dwayne 2983873 https gist github com dwayne 2983873 现在安装
  • 获取express.js中间件请求中“#”后的url

    我需要获取服务器中间件上的 url 使用express js 我用req url但是当 url 开头时 some urlreq url 返回 与req path 有没有办法获取url之后 在express js中 No URL 中以 符号永
  • API 使用令牌向 odoo 进行身份验证

    我想使用令牌从 Express 应用程序向 Odoo 进行身份验证 我在用odoo xmlrpc https www npmjs com package odoo xmlrpc连接 Odoo 的节点模块 我的快递应用程序 Odoo 要求 A
  • Nodejs 调试生产中的错误

    我有一个在生产环境中运行的 Nodejs 脚本 我不太可能 千分之一 遇到这样的错误 TypeError value is out of bounds at checkInt buffer js 1009 11 at Buffer writ
  • Meteor.setTimeout 和 Meteor.methods 之间的并发

    在我的 Meteor 应用程序中实现回合制多人游戏服务器 客户端通过发布 订阅接收游戏状态 并且可以调用 Meteor 方法sendTurn将回合数据发送到服务器 他们无法直接更新游戏状态集合 var endRound function g
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • 使用socket.io进行用户身份验证

    我已经红色了这个教程 http howtonode org socket io auth http howtonode org socket io auth 它展示了如何使用express和socket io对用户进行身份验证 但是有没有一
  • 让 Rails 生产在端口 80 上运行

    我正在尝试让我的 Rails 应用程序在生产模式下运行 但遇到了一些困难 我正在使用 Passenger 和 apache 并运行 Ubuntu 12 04 我已经配置和创建了生产数据库 并设置了乘客 状态如下 rvmsudo passen
  • 为什么 Node.js 应用程序只能从 127.0.0.1/localhost 访问?

    我本来打算教我的朋友介绍 Node 但是后来 我想知道为什么这个代码来自nodejs org var http require http http createServer function req res res writeHead 20
  • 对于实时网站使用 Node.js 或 Ringojs 安全吗?

    正如标题中所述 我想知道使用实际的 omg 平台 即 Node js 和 Ringo js 的实际版本 之一来开发网站是否安全 另外 我想知道他们是否支持cookie sessions以及他们如何处理多字段帖子 PHP中的fieldname
  • 沙箱中的 Nodejs

    我使用 NodeJS 作为客户端浏览器和服务器之间的中间人来处理所有请求 我正在尝试使用 nodejs 作为过滤工具并突出显示 如果不是 所有恶意脚本 但我意识到nodejs让脚本以当前环境权限运行 因此 我决定通过安装沙箱在新的上下文中运
  • Bot Framework Node.js 发送给特定用户的临时消息

    我已经盯着这个问题好几个小时了 找不到解决方案 即使根据所有建议 它应该很容易 https learn microsoft com en us bot framework nodejs bot builder nodejs proactiv
  • 如何设置上传的文件名?

    By using multer I made it to request image file like this 这个文件存储在我设置的 上传 文件夹中 我的代码如下 var multer require multer var uploa
  • Should js 无法读取 null 的属性“should”

    我尝试在node中使用测试工具mocha 考虑以下测试场景 var requirejs require requirejs requirejs config Pass the top level main js index js requi
  • Sequelize - 使用 es6 和模块运行迁移

    我不确定我是否做错了什么或者什么 我觉得我正在运行一个现代的 相当常见的堆栈 但我无法让新的 Sequelize v6 与我的设置完美配合 我在 Node v14 17 Sequelize v6 6 2 上 在我的 package json
  • NestJS e2e 测试模拟会话装饰器

    我正在尝试使用 supertest 编写一个 e2e 测试 其中我的控制器实际上使用了 Session 装饰师 然而 我不想承担使用数据库连接等启动会话的全部负担 因此测试中的我的应用程序实际上并未初始化会话 相反 我想首先模拟掉装饰器提供
  • 找不到“节点”的类型定义文件

    更新 Angular Webpack 和 TypeScript 后出现奇怪的错误 知道我可能会错过什么吗 当我使用 npm start 运行应用程序时 出现以下错误 at loader Cannot find type definition
  • Node.js 和 Passport 对象没有 validPassword 方法

    我正在使用 Node js Express Passport 创建一个简单的身份验证 本地 到目前为止我所达到的效果是 当输入错误的用户名或密码时 用户将被重定向到错误页面 但是当用户输入正确的用户名和密码时 我收到此错误 node mod

随机推荐

  • 如何在 C 中将 2 字节整数转换并分解为 2 个不同的字符?

    我想转换一个 unsigned int 并将其分成 2 个字符 例如 如果整数为 1 则其二进制表示形式为 0000 0001 我希望 0000 部分位于一个 char 变量中 0001 部分位于另一个二进制变量中 我如何在 C 中实现这一
  • 对象“RealmSwiftPermissionRole”上不存在主键属性“名称”

    我在我的 swift 项目中使用 RealmSwift 作为数据库 今天 在 Xcode beta 版本 11 中打开我的项目后 我的应用程序崩溃并出现以下错误 由于未捕获的异常 RLMException 而终止应用程序 原因 对象 Rea
  • 跨进程(和机器)同步(信号量)

    背景 我的 WCF 应用程序必须调用一个没有任何并发 检查的服务 它是由第三方创建的服务 让他们添加并发检查可能是不可能的 我可以确保调用第三方服务的唯一方法是通过我的 WCF 应用程序 所以我正在考虑在我的代码中添加并发检查 为此 我将使
  • 与 APN 名称相关的问题

    我正在使用 simcom900 调制解调器 我能够成功建立 GPRS 连接并将数据从我的模块发送到服务器 我正在使用 2g Airtel SIM 我已将 APN 名称指定为 airtelgprs com 我也尝试过指定不同的 APN与 Ai
  • 在 React+Django 应用程序中加载图像

    所以我有一个用 python django 编写的小项目作为后端 并为前端做出反应 我按照以下教程进行操作 http geezhawk github io using react with django rest framework htt
  • 使用 htaccess 重定向到移动网站

    如何将用户重定向到我的移动页面 我在 htaccess 上使用此代码 RewriteEngine on RewriteCond QUERY STRING desktop RewriteCond HTTP USER AGENT android
  • Mock 对象和 Spring 注解

    我在代码中使用 Spring 注释来执行 DI 假设我有一个类 class1 依赖于另一个类 class2 我定义 class1 如下 Component public class class1 Resource private inter
  • 使用单个操作/规则生成多个目标[重复]

    这个问题在这里已经有答案了 如何编写规则来使用单个操作生成文件集 例子 文件x y z作为单次执行脚本的结果生成t sh它需要文件a作为输入 x y z a t sh GNU make 尝试执行t sh3次 您可以实施中指定的解决方案之一汽
  • 如何加载实体框架预编译视图

    我发现我可以通过使用预编译视图来提高应用程序的性能EdmGen exe tool 这一切都很好 但我和我的大学都无法解决这个问题how生成的 cs文件实际被项目使用 似乎没有任何对任何地方生成的类的引用 那么它是如何被包含在内的呢 任何人都
  • Spring Cloud Stream 多个函数定义

    是否有可能使用函数式 spring cloud function 具有多个独立函数 绑定的样式 我发现的所有示例始终只注册一个具有默认绑定的功能 beaninput output 我想注册多个 每个都有自己的绑定 传统上这可以使用sprin
  • 领域数据库解密失败

    Question 当我尝试打开加密领域文件时Realm Browser Windows 它给了我以下消息 这不是 Realm 文件或者已加密 输入 128 个字符的十六进制编码的加密密钥 重要的 我在保存到磁盘之前关闭我的领域 Code R
  • system()的返回码 = 256

    我使用 system 在 Swift 中执行 shell 命令 正如文档中所述 如果成功 返回值应为 0 如果失败 则返回值应为 1 但我得到 256 并且执行似乎成功了 还有一些其他与魔法值 256 相关的问题 但语言不同 没有解决方案
  • 如何从 NodeJS/Tedious 连接到 SQL Azure?

    我有一个 SQL Azure 数据库 正在尝试从 Azure Linux VM 中运行的 NodeJS 应用程序连接到该数据库 当我在本地 SQL 数据库 和 NodeJS 本地计算机上时 一切工作正常 但是 当我从虚拟机运行时 我得到以下
  • Java 中的弯曲文本

    我正在寻找最简单的方法来绘制一些 我的应用程序上椭圆对象周围的文本 我需要创造一种 拥抱 的感觉 到目前为止 我已经使用 Graphics2D 类来打印我的绘图 在屏幕上 我的 画布 是 BufferedImage 我的椭圆的宽度和高度分别
  • Microsoft.IdentityModel 与 System.IdentityModel

    我正在使用表单身份验证和 ASP NET MVC 2 开发基于声明的授权系统 我看到一个命名空间 Microsoft IdentityModel 提供了许多与另一个 System IdentityModel 相同的内容 系统 身份模型 ht
  • boost测试库:多重定义错误

    我正在尝试在 Windows 版 QTCreator 中测试我已经完成的库 微积分 我创建了一个主文件 并在一个单独的文件中创建了一个类用于测试 如果我编译在中找到的示例http www boost org doc libs 1 47 0
  • .Net RIA 服务:DomainService 需要无参数构造函数?

    我在带有一些 Silverlight 组件的 ASP Net 应用程序中使用 Net RIA 服务的 7 月 CTP 我正在从 Silverlight 调用 RIA 服务 当我尝试在域服务 LinqToEntitiesDomainServi
  • Python - “导入”或将模块作为参数传递?

    我想知道是否将模块对象传递给需要它的类或对象而不是使用import可能不是一个坏主意 因为它避免了对这些模块的硬依赖 我想知道是否有人比我更了解 Python Zen 可以解释为什么这是一个可怕 不可怕的想法 你所说的这个叫做依赖注入 ht
  • 如何从常规网站调用 Chrome 扩展程序中定义的函数?

    我想创建一个不属于 chrome 插件的网站 而只是使用该插件公开的一些 API 这可能吗 如果可以 我该怎么做 我用谷歌搜索了这个问题 但找不到任何东西 我正在尝试使用内容脚本 但没有任何反应 有人可以解释这里出了什么问题吗 清单 jso
  • NodeJS Express 和 Apache 在同一服务器上

    我有一个 VPS 在 Apache 配置 etc apache2 sites available 000 default conf 中指定了多个虚拟主机 Example config