将所有请求通过管道传输到特定端口 - 节点 js 应用程序

Posted

技术标签:

【中文标题】将所有请求通过管道传输到特定端口 - 节点 js 应用程序【英文标题】:pipe all requests to a particular port - node js application 【发布时间】:2019-02-16 02:39:23 【问题描述】:

我正在尝试在同一台服务器上运行 node jsapache

我正在尝试将所有请求通过管道传输到特定端口(例如:example.com:80 到 example.com:3000)。

为此,我更改了位于“/etc/httpd/conf/httpd.conf”中的 httpd.conf 文件

在末尾添加了这些行

<VirtualHost *:80>
    ServerName mysite.com
    ProxyPreserveHost on
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
</VirtualHost>

并使用sudo service httpd restart重新启动

没有任何改变。

还有 2 个 httpd.conf 文件可用->

/usr/local/apache/conf/httpd.conf
/etc/httpd/conf/httpd.conf
/etc/apache2/conf/httpd.conf

/etc/apache2/conf/httpd.conf 文件的末尾我看到了这个:

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
#   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#   DO NOT EDIT. AUTOMATICALLY GENERATED.  USE INCLUDE FILES IF YOU NEED TO MAKE A CHANGE
#   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

USE INCLUDE FILES IF YOU NEED TO MAKE A CHANGE这行我听不懂。

我该怎么办????

【问题讨论】:

【参考方案1】:

我有一段时间没有使用 Apache2,因为我通常使用 nginx 来代理我的 Node.JS 应用程序。

您应该从/etc/apache2/sites-available/000-default.conf 复制默认站点配置。 (命令:sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/mysite.com.conf)。

然后将您在那里的配置放入新文件中。编辑需要编辑的内容,然后通过运行sudo a2ensite mysite.com.conf 启用新站点配置。然后运行sudo service apache2 restart重启apache2进程。

您现在应该能够对其进行测试,如果您的配置语法正确,它应该可以工作。

【讨论】:

这个/etc/apache2/sites-available/000-default.conffile 不存在,我应该创建两个文件吗?? @HelloWorld 奇怪的是默认站点配置文件不存在。尝试访问服务器 IP 时是否显示默认的 Apache 页面? 我对 apache 或其他类似 nginx 的东西不太了解。但我重新启动并通过运行 httpd 命令执行更改端口或任何其他配置等操作。 (例如:service httpd restart);【参考方案2】:

我个人更喜欢 Nginx 而不是 Apache2,但你可以使用其中任何一个。

对于 apache2,您应该启用 proxyproxy_http 模块:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo service apache2 restart

那么你应该为 apache 添加一个配置文件,通常命名为/etc/apache2/sites-available/example.com.conf: (如果不需要,可以删除目录部分)

<VirtualHost *:80>
ServerName example.com

   ProxyRequests Off
   ProxyPreserveHost On
   ProxyVia Full
   <Proxy *>
      Require all granted
   </Proxy>

   <Location / >
      ProxyPass http://127.0.0.1:3000
      ProxyPassReverse http://127.0.0.1:3000
   </Location>

    <Directory "/var/www/example.com/html">
    AllowOverride All
    </Directory>
</VirtualHost>

然后启用配置并使用以下命令重新启动 apache2:

sudo a2ensite example.com
sudo services apache2 restart

对于 Nginx 配置,您应该将这些行添加到 /etc/nginx/site-available/your-app.conf:

upstream app 
server 0.0.0.0:3000;


server 
    listen 80;
    listen [::]:80;
    server_name example.com;


    location / 
        proxy_pass http://app/;
        proxy_set_header Host $http_host;
    
    access_log /var/log/nginx/app-access.log;
    error_log /var/log/nginx/app-error.log info;

那么你应该运行:

sudo ln -s /etc/nginx/sites-available/your-app.conf /etc/nginx/sites-enabled/

然后:

# remove default config symlink from sites-enabled dir
rm /etc/nginx/sites-enabled/default
# test if config is OK:
sudo nginx -t
# restart the nginx:
sudo systemctl restart nginx

P.S:我使用了来自 this 链接的 apache conf 示例

【讨论】:

以上是关于将所有请求通过管道传输到特定端口 - 节点 js 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

通过套接字连接将 https 代理请求传递到命名管道(node.js)

如何将档案 (zip) 通过管道传输到 S3 存储桶

是否可以通过管道传输到 console.log?

如何将 find 命令返回的文件列表通过管道传输到 cat 以查看所有文件

如何将 node.js 中的管道传输到 redis?

是否可以将所有浏览器控制台消息/错误通过管道传输到远程机器?