2012-09-05 5 views
0

Notre administrateur système vient de quitter un projet sur lequel je travaille et j'ai brouillé en essayant de configurer notre serveur de production pour correspondre à TEST (où tout fonctionne). Je ne suis pas très au courant quand il s'agit de la configuration du serveur et j'ai eu beaucoup d'impasses, alors j'apprécierais beaucoup toute aide qui pourrait être offerte.Apache2 Configuration 404 Erreur

J'ai promu le code de TEST à PROD en copiant TEST/var/www sur PROD. Par conséquent, l'application dans PROD se trouve maintenant dans PROD/var/www/www. Je peux maintenant accéder à la page de destination de l'application sur Production (my.production.com/www), mais je ne peux accéder à aucun fichier dans les sous-répertoires de var/www/www /. Je continue d'obtenir une erreur 404 Not Found.

J'ai copié la configuration du site (le fichier appelé 'realto') de TEST vers PROD et j'ai lancé a2ensite pour créer les liens symboliques vers le dossier sites-enabled, mais je reçois toujours l'erreur 404 dans Production.

Quelqu'un peut-il me conseiller sur ce qui pourrait être le problème, ou me diriger dans la bonne direction?

EDIT: J'ai inclus le texte des fichiers httpd.conf, ports.conf et de configuration du site ci-dessous.

httpd.conf:

ServerName my.server.com 
ServerSignature Off 
ServerTokens Prod 
<Directory /> 
    Order Deny,Allow 
    Deny from all 
    Options None 
    AllowOverride None 
</Directory> 
<DirectoryMatch /var/www/*> 
    Order Allow,Deny 
    Allow from all 
    AllowOverride All 
    Options None 
</DirectoryMatch> 
<DirectoryMatch phpmyadmin> 
    Order Allow,Deny 
    Allow from all 
    Options None 
</DirectoryMatch> 

Configuration du site Fichier:

<VirtualHost *:80> 
    ServerAdmin [email protected] 

    DocumentRoot /var/www/www 
    <Directory /> 
     #Options FollowSymLinks 
     #AllowOverride None 
       Order Deny,Allow 
       Deny from All 
    </Directory> 
    <Directory /var/www/> 
       #RewriteEngine On 
       #RewriteBase/
       #RewriteCond %{REQUEST_FILENAME} -s [OR] 
       #RewriteCond %{REQUEST_FILENAME} -l [OR] 
       #RewriteCond %{REQUEST_FILENAME} -d 
       #RewriteRule ^.*$ - [NC,L] 
       #RewriteRule ^.*$ index.php [NC,L] 
       Order Allow,Deny 
       Allow from all 

     Options -Indexes FollowSymLinks MultiViews 
     AllowOverride All 
    </Directory> 
    <Directory /var/www/www/application/configs/> 
      <Files ~ "\.ini$"> 
       Deny from All 
      </Files> 
    </Directory> 

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
    <Directory "/usr/lib/cgi-bin"> 
     AllowOverride None 
     Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
     Order allow,deny 
     Allow from all 
    </Directory> 

    ErrorLog ${APACHE_LOG_DIR}/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog ${APACHE_LOG_DIR}/access.log combined 

    Alias /doc/ "/usr/share/doc/" 
    <Directory "/usr/share/doc/"> 
     Options Indexes MultiViews FollowSymLinks 
     AllowOverride None 
     Order deny,allow 
     Deny from all 
     Allow from 127.0.0.0/255.0.0.0 ::1/128 
    </Directory> 

</VirtualHost> 

ports.conf:

# If you just change the port or add more ports here, you will likely also 
# have to change the VirtualHost statement in 
# /etc/apache2/sites-enabled/000-default 
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from 
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and 
# README.Debian.gz 

NameVirtualHost *:80 
Listen 80 

<IfModule mod_ssl.c> 
    # If you add NameVirtualHost *:443 here, you will also have to change 
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl 
    # to <VirtualHost *:443> 
    # Server Name Indication for SSL named virtual hosts is currently not 
    # supported by MSIE on Windows XP. 
    Listen 443 
</IfModule> 

<IfModule mod_gnutls.c> 
    Listen 443 
</IfModule> 
+0

Etes-vous test et prod sur la même machine? De votre question, il semble que prod est dans un sous-répertoire de test? Cela ne semble pas correct .. Aussi, pourriez-vous poster vos vhosts sur un pastebin? Vous n'aurez probablement pas beaucoup de gens prêts à télécharger des fichiers à partir d'un site tiers sans savoir avec certitude ce qu'ils contiennent ... – bradym

+0

Merci @bradym, j'ai modifié la question pour inclure les vhosts. TEST et PROD sont des machines virtuelles indépendantes dans le cloud; prod n'est pas dans un sous-répertoire de test. – idubs11

Répondre

0

La première chose à faire est de faire le match DocumentRoot et les entrées.

DocumentRoot /var/www/www 
<Directory /var/www/www> 
    #RewriteEngine On 
    #RewriteBase/
    #RewriteCond %{REQUEST_FILENAME} -s [OR] 
    #RewriteCond %{REQUEST_FILENAME} -l [OR] 
    #RewriteCond %{REQUEST_FILENAME} -d 
    #RewriteRule ^.*$ - [NC,L] 
    #RewriteRule ^.*$ index.php [NC,L] 
    Order Allow,Deny 
    Allow from all 

    Options -Indexes FollowSymLinks MultiViews 
    AllowOverride All 
</Directory> 

Avec ce DocumentRoot, accéder à votre site servira ce qui est dans/var/www/www. Ce qui signifie que l'accès à http://example.com/www serait en fait dans/var/www/www/www pour les fichiers.

Maintenant que la directive DocumentRoot et Directory correspondent, voulez-vous vraiment que toutes les règles mod_rewrite soient mises en commentaire? Comme c'est le cas maintenant, vous obtiendrez un 404 en demandant n'importe quel fichier qui n'existe pas physiquement dans/var/www/www. Si votre application nécessite le routage des demandes vers index.php, vous devez décommenter ces lignes. (Je suppose qu'ils pourraient être mis en commentaire pour le test, mais juste au cas où ...)

En guise de note, à l'avenir, je suggère un chemin docroot moins confus. Parfois, il peut être difficile de voir des mots/caractères répétés, il serait donc plus facile d'identifier les fautes de frappe avec quelque chose de moins répétitif.

J'aime configurer mes applications comme ceci:

/var/www/example.com/test/htdocs 
/var/www/example.com/www/htdocs 

De cette façon, il est immédiatement clair quel environnement vous êtes, et ce n'est pas si confus.

+0

Merci @bradym.J'ai fait les changements suggérés, y compris annuler les conditions de réécriture et redémarré le serveur, mais maintenant je reçois une erreur en essayant d'accéder n'importe où sur le site (auparavant les visiteurs étaient redirigés vers notre site de blog contenu dans '/ var/www/blog', mais ils ne peuvent plus voir ce contenu). Des idées pour lesquelles cela pourrait être? – idubs11

+0

Je ne vois rien dans la question ci-dessus sur le dossier du blog, donc je ne suis pas sûr de savoir comment cette redirection était en cours d'exécution. Où se trouve le fichier index.php pour votre site? Est-ce dans/var/www ou/var/www/www? Partout où ce fichier index.php est situé est l'endroit où le DirectoryRoot doit pointer. Je supposais que vous voudriez que le site soit rendu sur example.com/not example.com/www quand j'ai suggéré les changements ci-dessus. Je ne sais pas si c'est le cas ou non. – bradym