2009-10-29 6 views
2

J'ai deux serveurs Apache configurés. L'un est public, l'autre est derrière un pare-feu. Celui derrière le pare-feu est utilisé pour servir du contenu (vids, photos, etc). J'ai mis en place un proxy inverse de sorte que toutes les demandes à http://mysite.com/content/ vont réellement au serveur à l'intérieur de mon pare-feu. Voir mon serverfault question.Authentification proxy inverse Apache via PHP

Mon site utilise PHP et MySQL pour authentifier les utilisateurs. L'authentification ne fonctionne sur rien dans le répertoire/content car Apache envoie immédiatement la requête au serveur interne. Idéalement, j'aimerais authentifier les utilisateurs sur mon serveur public et leur donner du contenu provenant du serveur de contenu à l'intérieur du pare-feu.

Existe-t-il un moyen d'autoriser uniquement les utilisateurs authentifiés à accéder au répertoire/content?

Répondre

2

Bien que cette réponse ne peut pas représenter une « meilleure pratique », il ne fonctionne bien

Nous utilisons un serveur back-end avec apache comme un « serveur de fichiers » de toutes sortes - pour servir les fichiers privés et images que les utilisateurs téléchargent sur leur compte. Voici comment cela fonctionne:

Configurer mod_rewrite pour gérer les URL comme vous le souhaitez. Par exemple:

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

Le script ServeContent.php va effectuer les opérations suivantes:

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)  

Cette approche exige que fopen-wrappers sont activés en PHP. readfile ne stockera pas le contenu en mémoire, donc cela n'utilise pas beaucoup de mémoire. L'un des principaux inconvénients est que vous allez tenir un processus apache/php pour la durée de la demande (ce qui pourrait être long). Mais, de façon réaliste, vous n'aurez probablement pas de problème à moins que vous n'ayez un site très fréquenté.

Si vous y êtes, il existe probablement de meilleures solutions. Mais cela a fonctionné très efficacement pour nous pour les gros fichiers sur une variété d'applications.

+0

soupir, je souhaite que cela fonctionnerait. Une partie du "contenu" sur mon serveur de contenu est des dossiers de pages HTML avec des liens relatifs à d'autres pages et images. – KevMo

+0

Êtes-vous sûr qu'il y a un problème? Ne pouvez-vous pas simplement détecter ou déterminer le bon type de contenu lors de l'envoi du fichier? – gahooa

+0

En regardant votre réponse à nouveau, il semble que cela fonctionnerait. Y at-il un avantage que cette approche a sur l'utilisation de .htaccess et un cookie? http://www.willmaster.com/blog/contentprotection/htaccess-cookie.php – KevMo