web-dev-qa-db-fra.com

Erreur 404 sur la page d'accueil lors de l'utilisation de Nginx comme serveur proxy pour Apache

J'utilise généralement Nginx pour diffuser du contenu statique sur mon serveur. Apache gère le contenu PHP à l'aide de PHP-FPM. Cependant, je ne parviens pas à afficher une page d'accueil de blog Wordpress et j'ai essayé tous les exemples de configuration que je peux trouver sur le Web sans trop de chance.

Voici ma config Nginx:

server {

        listen   XXX.XXX.XXX.XXX:80;
        server_name wptest.mydomain.com;

    access_log  /var/log/nginx/testblog_access.log combined;
    error_log /var/log/nginx/testblog-error.log;

    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header Host $Host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    location / {
                    proxy_pass http://127.0.0.1:80;
    }

    location = /50x.html {
            root   /var/www/nginx-default;
    }

    # No access to .htaccess files.
    location ~ /\.ht {
            deny  all;
    }

}

Ma configuration Apache est la suivante:

<VirtualHost 127.0.0.1>
    ServerName wptest.mydomain.com
    ServerAdmin [email protected]
    LogLevel warn
    ErrorLog /var/log/Apache2/testblog-error.log
    CustomLog /var/log/Apache2/testblog-access.log combined

    Options +FollowSymLinks +ExecCGI -Indexes -MultiViews
    AddHandler php-fastcgi .php
    Action php-fastcgi /wordpress
    Alias /wordpress /var/www/wordpress
    FastCgiExternalServer /var/www/wordpress -Host 127.0.0.1:9000
    RewriteEngine on

    DocumentRoot /var/www/wordpress
    DirectoryIndex index.php

                    <Directory />
                            DirectoryIndex index.php
                            AllowOverride All
                            Options +FollowSymLinks +ExecCGI +SymLinksIfOwnerMatch
                    </Directory>

                    <Directory /var/www/wordpress>
                            AllowOverride All
                            Options +FollowSymLinks +ExecCGI +SymLinksIfOwnerMatch
                    </Directory>
</VirtualHost>

Je ne suis pas en mesure d'afficher "http://wptest.mydomain.com/" ou "http://wptest.mydomain.com/wp-admin" mais "http://wptest.mydomain.com/wp-login. php "fonctionne. Qu'est-ce que je fais mal?

Informations sur la version: + OS: Debian 5/Lenny + Apache: 2.2.9 + Nginx: 0.7.65 + Wordpress: 3.1.2

3
avggeek

Les deux serveurs écoutent le même port. Nginx est configuré pour écouter la musique à 80 et rien n'est défini pour Apache à moins que ce ne soit dans votre fichier ports.conf.

Votre proxy passe également au port 80 d’Apache dans votre config Nginx.

Dans le changement de conf Nginx

proxy_pass http://127.0.0.1:80;

à

proxy_pass http://127.0.0.1:9000;

remplacez listen XXX.XXX.XXX.XXX:80; par listen 80;

Dans vos Vhosts

ajouter

NameVirtualHost *:9000
Listen 9000

Au-dessus de la balise <VirtualHost> ou dans le fichier ports.conf (si vous avez un autre vhost qui n'utilise pas Nginx, ajoutez-le en haut de votre vhost. Modifiez l'hôte virtuel pour qu'il ressemble à ceci:

<VirtualHost *9000>

2
Chris_O

Je ne sais pas si je devrais être fier ou gêné de revenir pour répondre à ma propre question plus d'un an plus tard. J'ai donc finalement trouvé le temps de travailler sur cette question aujourd'hui et j'ai réussi à faire fonctionner cette configuration. Il se trouve qu'il y avait quelques instructions manquantes dans ma configuration d'origine, mais le changement critique était dans wp-config.php. Pour tout rassembler, en commençant par ma configuration nginx (qui est presque entièrement extraite du wiki nginx):

server {

        listen   XXX.XXX.XXX.XXX:80;
        server_name wptest.mydomain.com;
        error_log /var/log/nginx/wp-error.log;

        ## Your only path reference.
        root /var/www/wordpress;
        ## This should be in your http block and if it is, it's not needed here.
        index index.php;

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        location / {
                # This is cool because no php is touched for static content.
                # include the "?$args" part so non-default permalinks doesn't break when using query string
                try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
                proxy_set_header X-Real-IP  $remote_addr;
                proxy_set_header Host $Host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://127.0.0.1:80;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }

}

Ensuite, ma configuration Apache:

<VirtualHost 127.0.0.1>
        server_name wptest.mydomain.com
        ServerAdmin [email protected]
        LogLevel warn
        ErrorLog /var/log/Apache2/wp-error.log
        CustomLog /var/log/Apache2/wp-access.log combined

        AddType application/x-httpd-fastphp .php
        AddHandler php-fastcgi .php
        Action php-fastcgi /fastcgi
        Alias /fastcgi /var/www/wordpress
        FastCgiExternalServer /var/www/wordpress -Host 127.0.0.1:9000

                        DocumentRoot /var/www/wordpress

                        #Site Directives
                        RewriteEngine on
                        Options +FollowSymLinks +ExecCGI -Indexes -MultiViews

                        <Directory />
                          AllowOverride None
                        </Directory>

                        <Directory /var/www/wordpress/>
                                AllowOverride Limit FileInfo AuthConfig
                                order allow,deny
                                allow from all
                        </Directory>

</VirtualHost>

Enfin, la ligne supplémentaire dans le fichier wp-config.php qui fait que tout fonctionne (Tiré du Codex )

$_SERVER['HTTP_Host'] = $_SERVER['HTTP_X_FORWARDED_Host'];

Avec cette configuration, j’ai testé le fait que de jolis permaliens via .htaccess fonctionnent correctement.

0
avggeek

J'ai copié votre config et j'ai eu ces 404. Il semble que vous ayez confondu fastcgi et qu'Apache ne sache pas où trouver fastcgi et WordPress. Dès que j'ai séparé le binaire fastcgi de WordPress, j'ai pu le faire fonctionner. Dans ma configuration, WordPress était installé dans/var/www/wordpress, qui est hors de la racine du document. Ma racine du document provenait de/var. Mais je pouvais accéder à WordPress en tant que http://domain.com/wordpress/ parce que je suivais Alias.

Alias /wordpress /var/www/wordpress

Ensuite, j'ai créé un répertoire fastcgi en dehors de WordPress dans/var/www.

mkdir /var/www/fastcgi

Ensuite, j'ai lié le binaire php5-cgi à ce répertoire:

ln -s /usr/bin/php5-cgi /var/www/fastcgi/

J'ai séparé php5-cgi parce que je n'aime pas l'idée de disposer d'un fichier binaire dans le répertoire accessible via le serveur Web.

Ensuite, je configure mon Apache comme suit:

Alias /wordpress /var/www/wordpress
Alias /fastcgi   /var/www/fastcgi

FastCgiExternalServer /var/www/fastcgi -Host 127.0.0.1:9000
<Directory /var/www/wordpress>
    AllowOverride All
    AddHandler php-fastcgi .php
    Action php-fastcgi /fastcgi/php5-cgi
    AddType application/x-httpd-php .php
    DirectoryIndex index.php

   Options +FollowSymLinks +ExecCGI +SymLinksIfOwnerMatch
</Directory>

<Location /fastcgi>
    SetHandler fcgid-script
    Options +ExecCGI
</Location>

Et ça a commencé à fonctionner. J'espère que cela vous aidera à réparer votre configuration Apache, laissez-moi savoir s'il y a un problème.

0
Hameedullah Khan