apache httpd.conf 中的别名

apache httpd.conf 中的别名

我正在尝试在通过 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/"

相关内容