概要#
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 反向代理的本地服务器。