RewriteRule이 ProxyPass를 재정의함

RewriteRule이 ProxyPass를 재정의함

Centos 7 시스템에서 Apache 서버 옆에 Python 서버를 실행하고 싶습니다. 가장 쉬운 방법은 Apache를 역방향 프록시로 구성하는 것입니다. 이것은 내 가상 호스트 구성입니다.

<VirtualHost *:443>
        DocumentRoot /home/username/mydomain/src
        ServerName mydomain.com
        ErrorLog logs/mydomain-error_log
        CustomLog logs/mydomain-access_log common
        DirectoryIndex index.php

    <Directory /home/username/mydomain/src>
        Options -Indexes +FollowSymLinks
        AllowOverride None
        Require all granted
        AddOutputFilterByType DEFLATE text/html text/plain text/xml
    </Directory>


    ProxyPreserveHost On
    ProxyPass /mediaproxy http://127.0.0.1:9001/mediaproxy
    ProxyPassReverse /mediaproxy http://127.0.0.1:9001/mediaproxy

    LogLevel alert rewrite:trace6
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^/api/media/(.*) /data/$1 [L]
    RewriteRule ^/api/v1/* /api/v1/index.php [L]
    RewriteRule ^/assets/(.*) /site/v1/content/assets/$1 [L]
    RewriteRule ^/css/(.*) /site/v1/content/css/$1 [L]
    RewriteRule ^/js/(.*) /site/v1/content/js/$1 [L]
    RewriteRule ^/fonts/(.*) /site/v1/content/fonts/$1 [L]
    RewriteRule ^/* /index.php [L] # problematic rule

    // lets encrypt entries

이제 내 문제는 다시 쓰기 규칙이 ProxyPass보다 우선한다는 것입니다. mydomain.com/mediaproxy/somepage를 방문하면 /index.php에서 콘텐츠를 제공합니다 RewriteRule ^/* /index.php [L]. 문제가 되는 규칙을 제거하면 역방향 프록시가 제대로 작동합니다. 아쉽게도 보관해야 합니다.

ProxyPass규칙을 먼저 사용 RewriteRule하고 일치 항목이 없는 경우에만 Apache에 지시하려면 어떻게 해야 합니까 ?

답변1

알아냈어요. 다시 쓰기 규칙에 [P]를 추가하면 역방향 프록시 역할을 시작합니다.

ProxyPass /mediaproxy http://127.0.0.1:9001/mediaproxy
ProxyPassReverse /mediaproxy http://127.0.0.1:9001/mediaproxy

기능적으로 다음과 동일합니다.

RewriteRule /mediaproxy http://127.0.0.1:9001/mediaproxy [P]

그러나 모두 다시 쓰기 규칙 잡기는 실행되지 않습니다.

답변2

RewriteCondRewriteRule다음에서 사용되는 경로에 대한 액세스를 제외하려면 질문에 하나를 추가하십시오 ProxyPass.

RewriteCond "%{REQUEST_URI}" !^/mediaproxy.*
RewriteRule ^/.* /index.php [L]

따라서 "문제"는 RewriteRule"/mediaproxy"로 시작하는 URL과 일치하지 않습니다.

관련 정보