Apache2 反向代理从 WAN 访问多个 LAN 服务器

Apache2 反向代理从 WAN 访问多个 LAN 服务器

我的局域网中大约有 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

等等

目前,我遵循以下说明: 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>

我是否遗漏了什么?

答案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 该请求很可能会失败,因为该资源未被反向代理覆盖。

相关内容