请帮助我解决以下问题,我已经困惑数周了。
由于我无法使用子域名,也无法访问 80 和 443 以外的其他端口,因此我必须将多个服务代理到我的域名的子目录中。这些服务要么在 Web 服务器本身上运行(显然在不同的端口下),要么在同一局域网中的其他机器上运行(可能还有其他端口)。
目标是:
example.com/app1 => localhost:8080
example.com/app2 => localhost:4711
example.com/app3 => 第二台机器
example.com/app4 => 第三台机器:8000
(所有不会被代理的内容最后都应该重写为 HTTPS,但我明白了。但如果它是必要的信息 - 现在你已经拥有它了。)
在过去的几周里,我已经尝试了几种不同的方法,包括 ProxyPass(Reverse)和 RewriteRules 的不同组合。
问题是,主页显示(不正确),但所有图片、CSS 等都缺失,并且链接不起作用。我希望在域的子目录下有完全代理的网站可用。
我无法为您提供我已经尝试过的所有方法的代码,但以下是我已经尝试过的一些组合:
<VirtualHost 192.168.x.y:80>
ServerName example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^/solar-log(.*) http://192.168.x.z$1 [P,L]
ProxyPassReverse /solar-log/ http://192.168.x.z
# RewriteCond %{SERVER_NAME} =example.com
# RewriteRule ^/solar-log/(.*) http://192.168.x.z/$1 [P,QSA]
# ProxyPassReverse /solar-log http://192.168.x.z
RewriteRule ^/rhasspy/(.*) http://localhost:4711/$1 [P,L]
# RewriteRule ^/rhasspy/(js|img|css)(.*) http://localhost:4711/$1$1 [P]
# ProxyPass /rhasspy http://localhost:4711/
ProxyPassReverse /rhasspy/ http://localhost:4711
# ProxyPassReverseCookiePath / /rhasspy
# ProxyPassReverseCookieDomain localhost localhost
# ProxyPass / http://localhost:4711/
# ProxyPassReverse / http://localhost:4711/
# RewriteRule ^/$ /rhasspy/ [P,L]
# Redirect to HTTPS, except the URIs, that point to other servers/services, that don't have HTTPS
# RewriteCond %{SERVER_NAME} =example.com
# RewriteCond %{REQUEST_URI} !^/solar-log [NC]
# RewriteCond %{REQUEST_URI} !^/rhasspy [NC]
# RewriteCond %{REQUEST_URI} !^/home-assistant [NC]
# RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [NE,R=permanent]
#RewriteBase "/solar-log/"
# RewriteRule ^/solar-log(.*) http://192.168.x.z$1 [P,QSA]
# ProxyPassReverse /solar-log http://192.168.x.z
RewriteRule ^/(.*) http://127.0.0.1/$1 [P,L]
ProxyPassReverse / http://127.0.0.1
<Location /solar-log>
ProxyPass http://192.168.x.z
ProxyPassReverse http://192.168.x.z
</Location>
# ProxyPreserveHost On
ProxyPass /airsonic http://localhost:8080
ProxyPassReverse /airsonic http://localhost:8080
# ProxyPass /rhasspy/ http://localhost:4711/
# ProxyPassReverse /rhasspy/ http://localhost:4711/
ProxyPass /home-assistant http://localhost:8000
ProxyPassReverse /home-assistant http://localhost:8000
</VirtualHost>
在本教程之后,最接近的是这种配置: http://www.apachetutor.org/admin/reverseproxies
<VirtualHost 192.168.x.y:80>
ServerName example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyRequests off
ProxyPass /rhasspy/ http://127.0.0.1:4711/
ProxyHTMLURLMap http://127.0.0.1:4711/ /rhasspy
ProxyPass /solar-log/ http://solar-log/
ProxyHTMLURLMap http://solar-log/ /solar-log/
<Location /rhasspy/>
ProxyPassReverse /
ProxyHTMLEnable On
# ProxyHTMLExtended On
ProxyHTMLURLMap / /rhasspy/
RequestHeader unset Accept-Encoding
</Location>
<Location /solar-log/>
ProxyPassReverse /
ProxyHTMLEnable On
# ProxyHTMLExtended On
ProxyHTMLURLMap / /solar-log/
RequestHeader unset Accept-Encoding
</Location>
</VirtualHost>
通过这种配置,网站可以加载更多内容,但最终无法真正工作(组合框为空或没有数据,一些内部内容无法工作并产生错误消息,等等......)
我已经阅读了几十个其他问题和教程,但没有一个能让我成功。例如: Apache 作为多个目标和一个默认目标的反向代理
所以我被困住了。
任何帮助都值得感激。
谢谢。