我在 Amazon ec2 上有两个 Ubuntu 16.04 (LTS) 实例。它们位于同一个虚拟私有云上。我在两个实例上都安装了 LAMP,并希望能够从其中一个实例上的网页调用另一个实例上的网页。使用 CentOS,我只需编辑 /etc/httpd/conf/httpd.conf 并附加以下行
ProxyPass /app1/ http://10.0.1.27/
然后,我重新启动 apache
sudo service httpd restart
我可以在当前服务器的网页上输入以下代码
<li><a href="/app1/Whatever.php">Whatever</a></li>
当我点击 Whatever 按钮时,我的浏览器上就会显示私有 IP 为 10.0.1.27 的服务器上的网页 Whatever.php。
但是,Ubuntu 没有 /etc/httpd/conf/httpd.conf 文件。
我尝试按照概述设置反向代理这里并在 /etc/apache2/sites-available/proxy-host 文件中输入以下内容。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPreserveHost On
# Servers to proxy the connection, or
# List of application servers Usage
ProxyPass /app/ http://10.0.1.27:8080/
ProxyPass / http://10.0.1.110:8080/
# ProxyPassReverse / http://server-ip-address:8080/
ServerName localhost
</VirtualHost>
然后我输入
sudo a2ensite proxy-ssl-host.conf
并得到
ERROR: Site proxy-ssl-host does not exist!
然后我输入
sudo a2ensite /etc/apache2/sites-available/proxy-host
并得到
ERROR: Site /etc/apache2/sites-available/proxy-host does not exist!
然后我输入
sudo /etc/init.d/apache2 restart
但是,当我点击“Whatever”按钮时,出现了 404 错误
Not Found
The requested URL /app/Dracula.php was not found on this server.
Apache/2.4.18 (Ubuntu) Server at 52.207.143.84 Port 80
答案1
您可能需要仔细检查配置文件的名称和命令中使用的文件名a2ensite
是否相同。例如,如果您的配置在 中/etc/apache2/sites-available/my_vhost.conf
,则类似这样的命令a2ensite my-vhost.conf
将不起作用。
长期以来,为 vhost 配置添加扩展名一直是一种很好的做法.conf
。在 Apache 2.2 及更早版本中,这是可选的,但从 Apache 2.4(随 Ubuntu 16.04 一起提供)开始,.conf
扩展名是必需的。
启用(或禁用)vhost 后,需要重新加载 Apache。