欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Apache:二级目录反向代理 – 实现不同端口服务在同一网站的访问

程序员文章站 2022-06-11 16:18:50
...

应用背景:在同一服务器网页上,通过不同目录访问内网的不同服务器。

开启相应模块:虚拟主机和代理模块

为了方便操作,最好启用虚拟主机来配置:

# 在httpd.conf中取消注释以下代码

LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so

配置虚拟主机和反向代理

在httpd_vhosts.conf中编辑:

<VirtualHost *:80>
    ProxyPass / http://127.0.0.1:8888/
    ProxyPassReverse / http://127.0.0.1:8888/
</VirtualHost>

上面是最简单的虚拟主机反向代理:访问这个服务器的80端口时,会自动跳转到该服务器上8888端口的服务页面。但是当需要在这个端口的网页上,既能访问网页,又能访问其他端口的服务,就需要通过二级目录的反向代理,在这个网页的地址中访问服务。

配置二级目录反向代理

二级目录/service反向代理至http://127.0.0.1:8888/配置如下:

<VirtualHost *:80>
    ProxyPass /service/ http://127.0.0.1:8888/
    ProxyPassReverse /service/ http://127.0.0.1:8888/
</VirtualHost>

但是这样配置会出现一个问题:代理的服务下若需要加载css或js等文件,即使用了相对路径的文件,会重定向至该网页的根目录下,而不是/service。对于这样的服务,如果服务的主要内容不是在该服务的根目录下(http://127.0.0.1:8888/),而是其子目录(http://127.0.0.1:8888/service/),就可以通过以下配置解决css文件加载错误的问题:

<VirtualHost *:80>
    ProxyPass /service http://127.0.0.1:8888/service/
    ProxyPassReverse /service http://127.0.0.1:8888/service/
</VirtualHost>

但是这样配置的条件是两个二级目录的名称必须是一致的,这是因为这里利用了一个代理路径的错误:将服务的service路径映射到/service会导致服务的 service路径 丢失,例如 service/index.html映射到网页中的相对路径会变成 /index.html ,但是由于映射到/service这个二级目录,会让这个index.html的显示路径为*/service/index.html。具体的原因未知,但是这样的配置是实际可行的,可以解决css文件路径错误的问题。

相关标签: 网站