我正在尝试在通过 apache windows 服务器上的反向代理提供服务的现有 https 网站上提供 robots.txt 服务。
这是我添加到 httpd.conf 文件中的内容,但是这不起作用。我做错了什么。
# global robots.txt file
<Location "/robots.txt">
ProxyPass !
</Location>
Alias /robots.txt "C:\Ampps\www\robots.txt"
以下是我的 httpd.ssl 文件中的内容:
AddType application/x-pkcs7-crl .crlss phrase on stdout.
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:C:/Ampps/apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
Mutex default
Timeout 2400
ProxyTimeout 2400
ProxyBadHeader Ignore
<VirtualHost *:443>
ServerName abc.org
ProxyPreserveHost On
ProxyPass "/" "http://127.0.0.1:8043/" nocanon retry=1 acquire=3000 timeout=600 Keepalive=On
RequestHeader set "X-Forwarded-Proto" "https"
## SSL
SSLEngine on
SSLProxyEngine on
SSLCertificateFile "C:\ssl\abc_org.crt"
SSLCertificateKeyFile "C:\ssl\abc_org.key"
SSLCertificateChainFile "C:\ssl\DigiCertCA.crt"
</VirtualHost>
答案1
手册https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypass附带以下警告:
在不同的上下文中混合使用 ProxyPass 设置不起作用:
ProxyPass "/mirror/foo/i" "!" <Location "/mirror/foo/"> ProxyPass "http://backend.example.com/" </Location>
反之亦然。您不能将反向代理配置的一部分放在位置块中,而将配置的另一部分直接使用。
ProxyPass 和排除都需要包含在 Location 块中,或者直接调用两者。
我稍微更喜欢直接使用 ProxyPass 指令,而不是使用 Location 容器,然后据我所知,排除指令也是 Apache httpd 指令的顺序很重要的一个例子。
排除需要放置在应排除的 ProxyPass 指令之前。
例如:
<VirtualHost *:443>
ServerName example.org
Alias /robots.txt "C:\Ampps\www\robots.txt"
ProxyPass "/robots.txt" "!"
ProxyPass "/" "http://127.0.0.1:8043/" ...
ProxyPassReverse "/" "http://127.0.0.1:8043/"