Apache服务器:反向代理并覆盖提供静态文件的端点

时间:2018-04-28 23:49:29

标签: apache2

我正在尝试使用Apache2作为反向代理来设置一个简单的Python应用程序。 Python应用程序旨在提供其端点之一的目录列表。但是,我希望Apache能够处理该目录列表。 更详细地说,这是我想要的行为:

  1. http://example.com/pypi的所有请求都反向代理到在端口8080上运行的Python应用程序。例如,此应用程序的页面位于“/ simple”和“/ packages”位置,应该可以在{分别为{3}}和http://example.com/pypi/simple
  2. Python应用程序在假设应用程序以“/”为根的情况下呈现一些HTML。因为它实际上是“/ pypi”,所以我必须重写一些HTML链接。例如,当它写<a href="http://example.com/simple">时,必须将其重写为<a href="http://example.com/pypi/simple">
  3. Python应用程序的位置“/ packages”提供目录列表。但是,为了提高性能,我想覆盖http://example.com/pypi/packages的请求,以便Apache处理目录列表并改为提供文件内容。
  4. 我设法得到1和2工作,但3工作不起作用。对http://example.com/pypi/packages的请求仍在转发到Python应用程序。这是我的Apache站点配置:

    <VirtualHost *:80>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    
        ServerName example.com
    
        Alias /pypi/packages /home/somebody/pypi-server/pypi-packages
        <Directory /home/somebody/pypi-server/pypi-packages>
            Options +Indexes
            Require all granted
        </Directory>
    
        ProxyPass /pypi/ http://localhost:8080/
        Redirect /pypi /pypi/
        ProxyPassReverse /pypi/simple/ http://example.com/simple/
    
        ProxyPreserveHost On
    
        <Location "/pypi/">
            SetOutputFilter proxy-html
            ProxyHTMLURLMap "^/(simple|packages)/" "/pypi/$1/" [R]
        </Location>
    </VirtualHost>
    

    是的,我启用了自动索引模块。如果我将“Alias”指令的第一个参数更改为“/ xyz”之类的目录,则目录列表可以正常工作。然后,http://example.com/pypi/packages正是我想做的http://example.com/xyz。请帮助,提前谢谢!

0 个答案:

没有答案