我有一个在端口 8112 上运行的 Web 服务,我可以重定向子域,例如http://myapp.mydomain.com通过设置 ServerAlias、proxypass 和 proxypassreverse 参数使用虚拟主机更改为 127.0.0.1:8112。
我通过下面概述的虚拟主机实现了这一点:
<VirtualHost *:80>
ServerName mydomain.com
ServerAlias myapp.mydomain.com myapp
ProxyRequests off
ProxyPass / http://127.0.0.1:8112/
ProxyPassReverse / http://127.0.0.1:8112/
ProxyPassReverseCookieDomain 127.0.0.1 %{HTTP:Host}
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
但是,我想使用 https 并设置一个子文件夹以重定向到它。即我希望能够公开 https://secure.mydomain.com/myapp
我不想重定向 https 子域,因为我想对在同一 IP 上运行的几种不同的服务执行此操作,并且我只有一个安全子域的证书。
我猜是某种重写?但它与 proxypass 方法的起点太不一样了,我无法弄清楚。我看了在这些例子中但似乎没有一个适用。
我的 SSL 证书都很好,我的 SSL 虚拟主机很高兴地指向一个带有 hello world 的根目录,但我不知道该添加什么才能让我的子文件夹重定向到在不同端口上运行的服务,就像我可以通过 http 使用子域名一样
答案1
这样做了:
<VirtualHost *:443>
ServerName mydomain.com
ServerAlias secure.mydomain.com
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLEngine on
SSLProxyEngine On
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem
SSLCACertificateFile /etc/apache2/ssl/ca.pem
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /myapp/ http://127.0.0.1:8112/
<Location /myapp/>
ProxyPassReverse /
ProxyPassReverseCookiePath / /myapp/
#Some web services may or may not require an additional specific header variable
# or additional internal configuration settings when located at a subfolder
#In my case for example myapp specifically required a header variable to be set
# with the new subfolder base as follows
RequestHeader set X-myapp-Base "/myapp/"
Order allow,deny
Allow from all
</Location>
</VirtualHost>
在这个解决方案中,web 服务将会像在 http 上响应一样做出反应,而 apache 反向代理将会处理 ssl,这样服务就会以 https 的形式呈现给用户。
这可能会破坏一些支持 http/https 的服务或网站。例如,Wordpress 需要将 X-forwarded-for 变量添加到标头中,方式与上述示例类似。