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

相關內容