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
RewriteCond
RewriteRule
다음에서 사용되는 경로에 대한 액세스를 제외하려면 질문에 하나를 추가하십시오 ProxyPass
.
RewriteCond "%{REQUEST_URI}" !^/mediaproxy.*
RewriteRule ^/.* /index.php [L]
따라서 "문제"는 RewriteRule
"/mediaproxy"로 시작하는 URL과 일치하지 않습니다.