我有 :
Apache(v2.4)在我的服务器的端口80上www.domain1.com,启用了mod_proxy和mod_proxy_wstunnel
node.js + socket.io 在同一服务器的端口3001上.
www.domain2.com由于此处描述的方法,访问(使用端口80)重定向到2 . 我在Apache配置中设置了这个:
<VirtualHost *:80>
ServerName www.domain2.com
ProxyPass / http://localhost:3001/
ProxyPassReverse / http://localhost:3001/
ProxyPass / ws://localhost:3001/
ProxyPassReverse / ws://localhost:3001/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
除了websocket部分之外,它适用于所有内容:ws://...不会像代理那样传输.
当我访问该页面时www.domain2.com,我有:
Impossible to connect ws://www.domain2.com/socket.io/?EIO=3&transport=websocket&sid=n30rqg9AEqZIk5c9AABN.
Run Code Online (Sandbox Code Playgroud)
问题:如何使Apache代理也成为WebSockets?
我的目标是在端口80上运行Node.js.这是因为我发现node.js被阻止某些不允许来自任何其他端口的流量的网络.
看来最好的方法是通过Node.js代理Apache.我曾尝试使用node-http-proxy来做到这一点,但我没有运气.
我正在使用的代码在这里:
var util = require('util'),
http = require('http'),
httpProxy = require('http-proxy');
httpProxy.createServer(9000, 'localhost').listen(80);
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2));
res.end();
}).listen(9000);
Run Code Online (Sandbox Code Playgroud)
但我不断收到端口80的错误"正在使用的地址".我一定是做错了.
如何使用node-http-proxy通过node.js代理Apache?这会让我在端口80上运行node.js吗?node-http-proxy是实现这一目标的最佳方式吗?
谢谢.
我最近在ubuntu上安装了apache2,但是我遇到了问题,我的httpd.conf是空的.有人可以在ubuntu上为我的apache2提供一份干净的httpd.conf副本吗?谢谢!
编辑:我看到你的答案,但在wampserver httpd.conf不是空的,正如你所提到的那样是用户选项.所以我该怎么做?
Edit2:这就是我在apache2.conf上得到的,我如何添加模块,启用gzip以及所有这些?
[删除了内容,因为它们使问题不可读并且无用,因为这是Ubuntu下的默认Apache2配置.]
我刚刚开始使用我的第一个 Next.JS 应用程序。npx create-next-app当我意识到我不确定如何使用文件时,我已经使用并制作了几页.htaccess。我已经习惯了 Apache 为我处理这些事情,并且简单地将我的.htaccess文件放入我的 Next.JS 应用程序的根目录中似乎并没有什么效果,这并不奇怪。我将如何设置.htaccess类似于以下内容的文件?
RewriteEngine on
RewriteRule ^profile/([a-z0-9]+) profile.html
Run Code Online (Sandbox Code Playgroud) 我有一个标准的Apache服务器.在服务器端运行node.js脚本(http://socket.io/)需要什么特别的东西吗?
在我的Apache配置中,我将所有流量转发/node到端口3000 Express服务器正在侦听的.
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyPass /node http://localhost:3000/
</IfModule>
Run Code Online (Sandbox Code Playgroud)
Express应用程序如下所示:
var express = require('express');
var app = express();
var router = express.Router();
router.route('/route/:id').get(function (req, res) {
res.json({ description: 'Welcome to a route with an ID' });
});
router.route('/route').get(function (req, res) {
res.json({ description: 'Welcome to the normal route' });
});
router.route('/').get(function (req, res) {
res.json({ data: 'Welcome to the app' });
});
app.use('/', router);
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
当我将浏览器定向到http://myserver.com/node时,我得到了响应{ data: 'Welcome to the app' },这很好.但是,当我尝试访问 …
我正在寻找一种方法来以下列方式集成Node.js + Socket.io + Apache:我希望apache继续提供HTML/JS文件.我希望node.js监听端口8080上的连接.这样的事情:
var util = require("util"),
app = require('http').createServer(handler),
io = require('/socket.io').listen(app),
fs = require('fs'),
os = require('os'),
url = require('url');
app.listen(8080);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
socket.emit('ok 1', { hello: 'world' });
});
socket.on('clientMSG', function (data) {
socket.emit('ok 2', { hello: …Run Code Online (Sandbox Code Playgroud) 我使用节点js开发了推送通知服务.为此,我必须每次都手动启动服务.

如何自动启动此服务?例如:如果我登录,它应该自动运行.提前致谢
尝试通过我的Apache2服务器访问ws:// localhost:8080 /时收到错误500.该服务器运行OpenSuse Leap 42.1和Apache 2.4.16.
启用了这些Apache2模块:mod_proxy,mod_proxy_http,mod_proxy_wstunnel.
从本地网络调用请求时,一切正常.网址示例:http://<myhost-ip-address>/api/ws/<some-url>.它返回状态101和响应:Upgrade: websocket.没关系.
来自外部网络的同类请求失败.网址示例:ws://www.mysite.com/api/ws/<some-url>.它返回错误500.
Apache访问日志包含: GET /api/ws/<some-url> HTTP/1.1" 500 ...
Apache错误日志包含: [proxy:warn] AH01144: No protocol handler was valid for the URL /api/ws/<some-url>. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
我的httpd.conf:
<VirtualHost *:80>
ServerName mysite.com
ServerAlias mysite.com
# Redirection for ws protocol
ProxyPreserveHost On
ProxyVia full
ProxyRequests OffHere
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/api/ws/(.*) [NC]
RewriteCond …Run Code Online (Sandbox Code Playgroud) 我即将使用 node.js 构建我的第一个网站,我很好奇是否有一个核对清单列出了我在启动之前应该完成的所有事情。在开发过程中,当我的数据库调用中不需要某些值时(使用 Mongoose),我的网站就会死掉(例如节点段错误)。
我还将在我的 VPS 上使用它,该 VPS 上已经安装了 Apache,那么我是否能够同时运行这两者,或者我是否需要为此研究其他内容?
基本上一旦启动,我想继续下去,并且我想知道在这样做之前我应该知道的任何标准预防措施。
谢谢!
我们打算使用Apache服务器进行Web开发.对于服务器端脚本,我们希望使用服务器端javascript.
使serverside javascript在Apache服务器上运行需要什么?SSJS是否建议用于服务器端脚本?我们在哪里可以获得有关Apache服务器中SSJS的任何信息和样本?
任何帮助和信息将不胜感激.
javascript apache server-side-scripting serverside-javascript ssjs
我已经在ec2上部署了一个节点应用程序,它使用以下命令将端口80重定向到3000:
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
Run Code Online (Sandbox Code Playgroud)
现在我想在子文件夹mydomain.com/blog中添加一个Wordpress博客.我必须使用apache的ProxyPass,如此处所述?它会不会减慢node.js的速度?
链接中的示例似乎更适合于想要将节点添加到apache而不是相反的情况.由于URL区别(/ node)和端口8000,或者它可以适合两种情况?有没有其他方法允许节点和Apache在同一台服务器上工作?另外,如何管理端口?
node.js ×9
apache ×8
websocket ×4
socket.io ×3
express ×2
javascript ×2
proxy ×2
.htaccess ×1
deployment ×1
httpd.conf ×1
mod-proxy ×1
next.js ×1
port ×1
reactjs ×1
server-side ×1
ssjs ×1
ubuntu ×1
wordpress ×1