Apache 阿帕奇&x2B;Node.js+;mod_代理。如何将一个域路由到:3000,将另一个域路由到:80
问题:我需要在不同域的同一台服务器上托管一个节点应用程序和一个php应用程序 example.com应正常使用端口80,但node-example.com应路由到端口3000 使用mod_代理将所有流量从端口80路由到3000可以正常工作,因此:Apache 阿帕奇&x2B;Node.js+;mod_代理。如何将一个域路由到:3000,将另一个域路由到:80,apache,node.js,mod-proxy,Apache,Node.js,Mod Proxy,问题:我需要在不同域的同一台服务器上托管一个节点应用程序和一个php应用程序 example.com应正常使用端口80,但node-example.com应路由到端口3000 使用mod_代理将所有流量从端口80路由到3000可以正常工作,因此: <VirtualHost *:80> ServerAdmin info@node-example.com ServerName node-example.com ServerAlias www.node-examp
<VirtualHost *:80>
ServerAdmin info@node-example.com
ServerName node-example.com
ServerAlias www.node-example.com
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
ProxyPass http://localhost:3000/
ProxyPassReverse http://localhost:3000/
</Location>
</VirtualHost>
服务器管理员info@node-example.com
ServerName node-example.com
ServerAlias www.node-example.com
代理请求关闭
命令拒绝,允许
通融
ProxyPasshttp://localhost:3000/
ProxyPassReversehttp://localhost:3000/
然而,这使得example.com和node-example.com都指向localhost:3000并运行节点应用程序
有没有办法让example.com指向端口80
例如,也可以将.com/old-admin指向端口80。只需做两个
标记
<VirtualHost *:80>
ServerAdmin info@node-example.com
ServerName www.node-example.com
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
ProxyPass http://localhost:3000/
ProxyPassReverse http://localhost:3000/
</Location>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin info@node-example.com
ServerName node-example.com
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
ProxyPass http://localhost:80/
ProxyPassReverse http://localhost:80/
</Location>
</VirtualHost>
服务器管理员info@node-example.com
服务器名www.node-example.com
代理请求关闭
命令拒绝,允许
通融
ProxyPasshttp://localhost:3000/
ProxyPassReversehttp://localhost:3000/
服务器管理员info@node-example.com
ServerName node-example.com
代理请求关闭
命令拒绝,允许
通融
ProxyPasshttp://localhost:80/
ProxyPassReversehttp://localhost:80/
应该是这样的;)
或者,如果您的
localhost:80
应用程序不是节点,您可以删除该目标的
&
标记,并将其替换为DocumentRoot/var/www/node example.com
-您的index.html的静态路径我建议您为两个域创建两个不同的虚拟主机配置文件。这将使您能够独立地配置它们,并且在扩展不同时将它们移动到不同的服务器
对于具有默认安装位置的apache2
在/etc/apache2/sites available/www.example1.com.conf中创建一个文件
服务器名www.example1.com
服务器管理员webmaster@example1.com
选项-索引+FollowSymLinks
允许超越所有
要求所有授权
DirectoryIndex.html
选项-索引+FollowSymLinks
允许超越所有
要求所有授权
DirectoryIndex.html
代理请求关闭
代理主机
ProxyPass/api/“http://localhost:30007/"
ProxyPassReverse/“http://localhost:30007/"
ErrorLog${APACHE\u LOG\u DIR}/example1/example1.LOG
CustomLog${APACHE\u LOG\u DIR}/example1/example1.LOG组合
在可用站点中创建另一个文件www.example2.com.conf
,并复制上述配置,将example1替换为example2
对于子域,将文件名和内部配置中的www
替换为子域,例如:api
创建conf文件后,必须使用命令启用它们
a2ensite www.example1.com.conf
然后使用命令重新加载apache2
sudo systemctl重新加载apache2
在重新加载APACHE之前,请确保已在APACHE_LOG_DIR中创建了目录example1
和example2
就这样。在域注册器或CDN中使用服务器IP地址配置域的A记录,无论您正在使用什么,您都可以使用。我以前尝试过使用两个virtualhost标记,但它不起作用。。。结果我忘了设置“NameVirtualHost*”。谢谢你的回答!哇!你把我从iptables和它的隐形规则中救了出来:)效果很好。tnx mate。如果仍然无法正常工作,请确保在apache配置中启用了
mod_proxy
和mod_proxy\u http
,然后重新启动服务器。@drinchev是否需要将“ProxyRequests off”添加到我的所有apache站点文件中?来自:如果使用转发代理,严格限制访问是必不可少的(使用ProxyRequests指令)。否则,任何客户端都可以使用服务器访问任意主机,同时隐藏其真实身份。这对您的网络和整个Internet都是危险的。使用反向代理时(在关闭ProxyRequests的情况下使用ProxyPass指令),访问控制不那么重要,因为客户端只能联系您专门配置的主机。
<VirtualHost *:80>
ServerName www.example1.com
ServerAdmin webmaster@example1.com
<Directory /home/example1/api/admin/docs>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
DirectoryIndex index.html
</Directory>
<Directory /home/example1/api/mobile/docs>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
DirectoryIndex index.html
</Directory>
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /api/ "http://localhost:30007/"
ProxyPassReverse / "http://localhost:30007/"
ErrorLog ${APACHE_LOG_DIR}/example1/example1.log
CustomLog ${APACHE_LOG_DIR}/example1/example1.log combined
</VirtualHost>