Node.js 和 PHP 在同一服务器上的端口 80 上

Node.js 和 PHP 在同一服务器上的端口 80 上

我有一个在 Linux 服务器的 8080 端口上运行的 node.js 站点。我在同一个 sarver 上还有一个在端口 80 上运行的 PHP 站点 (bugzilla)。所以我当前的配置是:

我想让两个站点都在端口 80 上运行,如下所示:

那可能吗?

答案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

并使用ProxyPassProxyPassReverse行修改您的虚拟主机。

<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

相关内容