将所有请求通过管道传输到特定端口 - 节点 js 应用程序
pipe all requests to a particular port - node js application
我正在尝试 运行 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
。
我该怎么办????
我有一段时间没有使用 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进程
您现在应该可以测试它了,如果您的配置语法正确,它应该可以工作。
我个人更喜欢 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 link
中的 apache conf 示例
我正在尝试 运行 node js
和 apache
在同一个服务器上
我正在尝试将所有请求传送到特定端口(例如:example.com:80 到 example.com:3000)。
为此,我更改了位于“/etc/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
。
我该怎么办????
我有一段时间没有使用 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
.
您现在应该可以测试它了,如果您的配置语法正确,它应该可以工作。
我个人更喜欢 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 link
中的 apache conf 示例