我的局域网中大约有 5 个 Web 应用程序运行在不同的服务器上,它们都在监听 80 端口
我想通过在我的主 Web 服务器上设置 Apache 反向代理,使它们可以从互联网访问,该服务器运行在 Ubuntu 16.04 上
更改端口然后进行端口转发并不是一个好选择,因为有很多设备需要重新配置。另外,我想保持用户友好性,手动写入端口并不好
所以基本上,我想按以下方式重定向请求:
www.mydomain.com/server3
应该重定向到192.168.1.3:80
www.mydomain.com/server4
应该重定向到192.168.1.4:80
等等
安装并启用所需模块后,我在“/etc/apache2/sites-enabled/000-default.conf”文件中添加了以下几行:
<VirtualHost *:80>
ProxyPreserveHost On
# Servers to proxy the connection, or;
# List of application servers:
# Usage:
# ProxyPass / http://[IP Addr.]:[port]/
# ProxyPassReverse / http://[IP Addr.]:[port]/
# Example:
ProxyPass "/server3" "http://192.168.1.3:80"
ProxyPassReverse "/server3" "http://192.168.1.3:80"
ServerName pacs
</VirtualHost>
但它没有任何效果,这也一样:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://192.168.1.3:80
ProxyPassReverse / http://192.168.1.3:80
ServerName pacs
</VirtualHost>
我是否遗漏了什么?
答案1
该指令ProxyPass "/server3" "http://192.168.1.3:80"
不需要 HTTP 的默认端口号 80,我会添加一个尾随斜杠:
ProxyPass "/server3/" "http://192.168.1.3/
。
从 2.4 版本开始手册建议与包含在指令中的 ProxyPass 指令功能相同的语法<Location>
:
<VirtualHost *:80>
ServerName pacs
<Location /server3/>
ProxyPass "http://192.168.1.3/"
ProxyPassReverse "http://192.168.1.3/"
</Location>
</VirtualHost>
重新启动后,请求http://pacs/server3/
应该转发到 192.168.1.3,检查那里的访问日志以查看它们的进入。
注意:如果 192.168.1.3 上的内容引用 /css/style.css,您的浏览器将解释该内容并发出请求,但http://pacs/css/style.css
该请求很可能会失败,因为该资源未被反向代理覆盖。