我有一個在 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
。