我有一个在 Linux 服务器的 8080 端口上运行的 node.js 站点。我在同一个 sarver 上还有一个在端口 80 上运行的 PHP 站点 (bugzilla)。所以我当前的配置是:
- http://example.com:8080(node.js 应用程序)
- http://example.com/bugzilla(bugzilla 网站)
我想让两个站点都在端口 80 上运行,如下所示:
- http://example.com/mynodejs(node.js 应用程序)
- http://example.com/bugzilla(bugzilla 网站)
那可能吗?
答案1
首先,禁用计算机上的这两个服务。然后将它们的端口更改为不寻常的端口并重新启动它们,例如:
PHP 应用程序
6821
NodeJS 应用在
6822
请记得打开它们127.0.0.1
!您不应该在网络接口上打开它们。
安装nginx
为最常用的Reverse Proxy
。根据您的发行版,您可以使用以下命令之一安装它:
对于基于 Debian 的发行版:
$ sudo apt install nginx
对于基于 Arch 的发行版:
$ sudo pacman -S nginx
再次完全取决于您的发行版,该包可以有自己的文件分层结构。所以我会给你nginx.conf
作为主配置文件。只需记住使用您喜欢的任何名称复制原始配置文件,例如 nginx.conf.origin
$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.origin
现在,打开/etc/nginx/nginx.conf
,删除现有配置并将这些配置复制到其中:
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
keepalive_timeout 15;
server {
listen 80 default_server;
server_name example.com;
location /mynodejs {
proxy_pass http://127.0.0.1:6822;
}
location /bugzilla {
proxy_pass http://127.0.0.1:6821;
}
}
}
注意:请考虑一下这个配置文件是我用心写的,因此当你想运行 nginx 时可能会遇到错误。如果是这样,请在这里写评论,以便我进行测试。
现在,只需重新启动您的 nginx 即可!你会得到你想要的。
答案2
php 应用程序可以保留在未修改的位置。
当使用apache作为Web服务器时,需要启用代理模块。以ubuntu为例
a2enmod proxy
a2enmod proxy_http
并使用ProxyPass
和ProxyPassReverse
行修改您的虚拟主机。
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot "/var/www/www.example.com/htdocs"
#nodejs app
ProxyPass /mynodejs http://127.0.0.1:8080/
ProxyPassReverse /mynodejs http://127.0.0.1:8080/
<Directory "/var/www/www.example.com/htdocs">
Options -Indexes +FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog "|/usr/bin/cronolog /var/www/www.example.com/logs/%Y-%m-%d/error_log"
CustomLog "|/usr/bin/cronolog /var/www/www.example.com/logs/%Y-%m-%d/access_log" combined
</VirtualHost>
重新启动阿帕奇/etc/init.d/apache2 restart
。