Проверка подлинности обратного прокси-сервера Apache через PHP - PullRequest
2 голосов
/ 29 октября 2009

У меня установлено два сервера Apache. Один общедоступный, другой за брандмауэром. Тот, что за брандмауэром, используется для обслуживания контента (видео, фото и т. Д.). Я настроил обратный прокси, чтобы любые запросы к http://mysite.com/content/ фактически отправлялись на сервер внутри моего брандмауэра. Смотрите мой serverfault вопрос .

Мой сайт использует PHP и MySQL для аутентификации пользователей. Аутентификация не работает ни с чем в каталоге / content, потому что apache немедленно отправляет запрос на внутренний сервер. В идеале я хотел бы аутентифицировать пользователей на моем общедоступном сервере и предоставлять им контент с контент-сервера внутри брандмауэра.

Есть ли способ разрешить только аутентифицированным пользователям доступ к каталогу / content?

1 Ответ

2 голосов
/ 30 октября 2009

Хотя этот ответ может и не представлять собой «наилучшую практику», он работает хорошо

Мы используем внутренний сервер с apache в качестве своего рода «файлового сервера» - для обслуживания личных файлов и изображений, которые пользователи загружают в свою учетную запись. Вот как это работает:

Настройте mod_rewrite для обработки URL-адресов по вашему усмотрению. Например:

RewriteRule /content/(.*)   /ServeContent.php?FileName=$1

Скрипт ServeContent.php сделает следующее:

1. Validate input

2. Authenticate user based on cookie or session data

3. Make a URL with $_GET['FileName'] and the IP of the backend server
   http://192.168.1.30/content/somefile.jpg

4. Set appropriate headers for the file type
   header('Content-type: image/jpeg')

5. readfile($URL)    

Этот подход требует, чтобы fopen-wrappers были включены в PHP. readfile не будет хранить содержимое в памяти, так что это действительно не использует много памяти. Одним из основных недостатков является то, что вы задержите процесс apache / php на время запроса (который может занять много времени). Но в действительности у вас, вероятно, не будет проблем, если вы не используете сайт с большим трафиком.

Если да, то, скорее всего, есть лучшие решения. Но это сработало для нас очень эффективно для больших файлов в различных приложениях.

...