我在局域网上运行的不同服务器上有大约 5 个 Web 应用程序,它们都在监听端口 80
我想通过在运行在 Ubuntu 16.04 上的主网络服务器上设置 Apache 反向代理来让它们从 Internet 访问
更改它们的端口,然后再进行端口转发并不是一个很好的选择,因为有很多设备需要重新配置。另外我想让它保持用户友好,手动编写端口不是
所以基本上,我想通过以下方式重定向请求:
www.mydomain.com/server3
应该重定向到192.168.1.3:80
www.mydomain.com/server4
应该重定向到192.168.1.4:80
等等
现在,我按照以下说明操作: https ://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension
安装并启用所需的模块后,我在 `/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>
我错过了什么吗?
该指令
ProxyPass "/server3" "http://192.168.1.3:80"
不需要 HTTP 的默认端口号 80,我会添加一个尾部斜杠:ProxyPass "/server3/" "http://192.168.1.3/
。从 2.4 版本开始,手册建议使用与包含在指令中的 ProxyPass 指令功能相同的语法
<Location>
:重新启动请求后,
http://pacs/server3/
现在应该转发到 192.168.1.3,检查那里的访问日志以查看它们是否进入。注意:例如,如果 192.168.1.3 上的内容引用 /css/style.css,您的浏览器将解释该内容并发出
http://pacs/css/style.css
最有可能失败的请求,因为该资源未被反向代理覆盖。