web-dev-qa-db-de.com

404-Fehler auf der Homepage bei Verwendung von Nginx als Proxy für Apache

Im Allgemeinen verwende ich Nginx, um statische Inhalte auf meinem Server bereitzustellen. Apache verarbeitet PHP Inhalte mit PHP-FPM. Ich kann jedoch keine Wordpress-Blog-Homepage anzeigen und habe alle Konfigurationsbeispiele ausprobiert, die ich im Web finden kann, ohne viel Glück.

Hier ist meine Nginx-Konfiguration:

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;
    }

}

Meine Apache-Konfiguration sieht wie folgt aus:

<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>

Ich kann "http://wptest.mydomain.com/" oder "http://wptest.mydomain.com/wp-admin", aber "http://wptest.mydomain.com/wp-login" nicht anzeigen. PHP "funktioniert. Was mache ich falsch?

Versionsinformationen: + Betriebssystem: Debian 5/Lenny + Apache: 2.2.9 + Nginx: 0.7.65 + Wordpress: 3.1.2

3
avggeek

Beide Server lauschen auf denselben Port. Sie haben Nginx auf 80 eingestellt und nichts ist für Apache eingestellt, es sei denn, es befindet sich in Ihrer ports.conf.

Ihr Proxy wird auch an Apache Port 80 in Ihrer Nginx-Konfiguration übergeben.

In der Nginx-Konfig ändern

proxy_pass http://127.0.0.1:80;

zu

proxy_pass http://127.0.0.1:9000;

listen XXX.XXX.XXX.XXX:80; in listen 80; ändern

In deinen Vhosts

hinzufügen

NameVirtualHost *:9000
Listen 9000

Über dem Tag <VirtualHost> oder in der Datei ports.conf (Wenn Sie einen anderen vhost haben, der Nginx nicht verwendet, fügen Sie ihn oben in Ihren vhost ein. Ändern Sie den virtuellen Host so, dass er wie folgt aussieht:

<VirtualHost *9000>

2
Chris_O

Ich weiß nicht, ob ich stolz oder verlegen sein soll, dass ich mehr als ein Jahr später zurückkomme, um meine eigene Frage zu beantworten. Also fand ich heute endlich Zeit, um an diesem Problem zu arbeiten, und schaffte es, diese Konfiguration zum Laufen zu bringen. Es stellte sich heraus, dass einige Aussagen in meiner ursprünglichen Konfiguration fehlten, aber die kritische Änderung war in wp-config.php. Um alles zusammen zu bringen, beginne mit meiner Nginx-Konfiguration (die fast vollständig aus dem Nginx-Wiki stammt):

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;
        }

}

Als nächstes meine Apache-Konfiguration:

<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>

Zum Schluss die eine zusätzliche Zeile in der Datei wp-config.php, die alles zum Laufen bringt (Aus dem Codex )

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

Mit dieser Konfiguration habe ich getestet, dass hübsche Permalinks über .htaccess korrekt funktionieren.

0
avggeek

Ich habe deine Konfiguration kopiert und diese 404s bekommen. Es scheint, als hätten Sie fastcgi vertauscht und Apache ist verwirrt, wo es fastcgi und WordPress gibt. Sobald ich die fastcgi-Binärdatei von WordPress getrennt hatte, konnte ich sie zum Laufen bringen. In meinem Setup hatte ich WordPress in/var/www/wordpress installiert, was aus dem Dokumentenstamm ist, mein Dokumentenstamm war etwas aus/var. Aber ich konnte unter http://domain.com/wordpress/ auf WordPress zugreifen, weil ich Alias ​​folgte.

Alias /wordpress /var/www/wordpress

Dann habe ich ein FastCGI-Verzeichnis außerhalb von WordPress in/var/www erstellt, so wird es sein

mkdir /var/www/fastcgi

Dann habe ich die PHP5-CGI-Binärdatei mit diesem Verzeichnis verknüpft:

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

Ich habe das PHP5-CGI getrennt, weil mir die Idee nicht gefällt, eine Binärdatei unter dem Verzeichnis zu haben, auf das über den Webserver zugegriffen werden kann.

Dann konfiguriere ich meinen Apache wie folgt:

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>

Und es fing an zu funktionieren. Hoffe, das hilft dir, deine Apache-Konfiguration zu reparieren. Lass es mich wissen, wenn etwas nicht stimmt.

0