将所有请求通过管道传输到特定端口 - 节点 js 应用程序
Posted
技术标签:
【中文标题】将所有请求通过管道传输到特定端口 - 节点 js 应用程序【英文标题】:pipe all requests to a particular port - node js application 【发布时间】:2019-02-16 02:39:23 【问题描述】:我正在尝试在同一台服务器上运行 node js
和 apache
我正在尝试将所有请求通过管道传输到特定端口(例如: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.conf
file 不存在,我应该创建两个文件吗??
@HelloWorld 奇怪的是默认站点配置文件不存在。尝试访问服务器 IP 时是否显示默认的 Apache 页面?
我对 apache 或其他类似 nginx 的东西不太了解。但我重新启动并通过运行 httpd 命令执行更改端口或任何其他配置等操作。 (例如:service httpd restart
);【参考方案2】:
我个人更喜欢 Nginx 而不是 Apache2,但你可以使用其中任何一个。
对于 apache2,您应该启用 proxy
和 proxy_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)