概要#
Apache 作為 Web 伺服器,同時監聽 8081 和 8082 端口,分別提供不同的 Web 服務。
Nginx 作為反向代理伺服器,通過 HTTP host 標頭的域名判斷要將請求轉發到哪一台伺服器的哪個端口。
下面的演示示例中 Web 伺服器和反向代理伺服器將會運行在一台主機,反向代理的域名以 yuukiz.com 代替,在真實場景中,可以根據實際情況替換。
操作步驟#
安裝 Apache 和 Nginx#
CentOS 需要安裝 httpd,如果是 Ubuntu 系統則需要安裝 apache2。
# RH-based
yum install httpd
# Debian-based
apt-get install apache2
安裝 Nginx
# RH-based
yum install nginx
# Debian-based
apt-get install nginx
安裝完成服務後可以關閉開機自啟動。
systemctl disable httpd
systemctl disable apache2
systemctl disable nginx
這裡我還將 apache2 的預設首頁給刪除了。
$ cd /var/www/html; mv index.html index.html.bak
順便創建了用於虛擬主機的網站根目錄
Web 伺服器的本地路徑分別為 /var/www/html/8081
和 /var/www/html/8082
。
mkdir /var/www/html/8081
mkdir /var/www/html/8082
echo "8081 HTTP Server" > /var/www/html/8081/index.html
echo "8082 HTTP Server" > /var/www/html/8082/index.html
配置伺服器#
如果僅需要將 Apache 作為 Web 伺服器,在配置監聽端口時,需要注意註釋掉原來服務所監聽的 80 端口。
Apache2 配置虛擬主機#
在 Apache2 中配置文件分散在多個目錄中,配置虛擬主機需要修改多個配置文件。
虛擬主機的配置文件通常位於 /etc/apache2/sites-available
目錄下。可以通過在這個目錄下創建一個新的配置文件,或者修改現有的配置文件來配置虛擬主機。
下面的步驟演示了創建兩個新的文件用於配置虛擬主機。
$ cat >> /etc/apache2/sites-available/8081.conf << EOF
<VirtualHost *:8081>
DocumentRoot "/var/www/html/8081"
</VirtualHost>
EOF
$ cat >> /etc/apache2/sites-available/8082.conf << EOF
<VirtualHost *:8082>
DocumentRoot "/var/www/html/8082"
</VirtualHost>
EOF
接下來需要通過命令啟動新的虛擬主機。
$ a2ensite 8081
$ a2ensite 8082
修改配置文件,使 Apache2 伺服器監聽 8081 和 8082 端口(同時取消監聽 80 端口)。
# Listen 80
Listen 8081
Listen 8082
修改完配置文件後重啟伺服器。在瀏覽器中訪問伺服器的 8081 和 8082 端口進行測試。
$ systemctl restart apache2
Httpd 配置虛擬主機#
Httpd 配置虛擬主機的方式比 Apache2 要簡單許多。
Httpd 的配置文件通常位於 /etc/httpd/httpd.conf
,打開配置文件並添加如下內容。
# 監聽端口配置
Listen 8081
Listen 8082
# 虛擬主機配置
<VirtualHost *:8081>
DocumentRoot "/var/www/html/8081"
</VirtualHost>
<VirtualHost *:8082>
DocumentRoot "/var/www/html/8082"
</VirtualHost>
修改完配置文件後重啟伺服器。在瀏覽器中訪問伺服器的 8081 和 8082 端口進行測試。
Nginx 配置反向代理#
Nginx 的配置文件通常位於 /etc/nginx/nginx.conf
。
在 Nginx 配置文件的合適位置添加如下內容。
server {
listen 80;
server_name 8081.yuukiz.com;
location / {
proxy_pass http://localhost:8081;
}
}
server {
listen 80;
server_name 8082.yuukiz.com;
location / {
proxy_pass http://localhost:8082;
}
}
在這個配置中,host 為 8081.yuukiz.com
的請求將會被轉發到 http://localhost:8081
。
host 為 8002.yuukiz.com
的請求將會被轉發到 http://localhost:8082
。
修改完配置文件後重啟伺服器。
測試反向代理#
手動修改 host 標頭測試#
在瀏覽器中直接訪問伺服器測試。
首先是直接訪問,頁面將呈現 Nginx 默認頁面。
使用 modHeader 擴展將請求標頭中的 host 設置為 8081.yuukiz.com
和 8082.yuukiz.com
測試,反向代理將會生效。
配置域名解析測試#
通過修改 host 標頭測試成功後,前往域名提供商平台,為域名配置 A 記錄,將 8081.application 和 8082.yuukiz.com 都指向反向代理伺服器的 IP 地址。
刪除 modHeader 插件的 host 配置。等待域名可以成功解析後,直接訪問 8081.yuukiz.com 和 8082.yuukiz.com 即可訪問通過 Nginx 反向代理的本地伺服器。