it-swarm.com.de

Wie konfiguriere ich nginx, um Anfragen in das Upload-Verzeichnis auf den Produktionsserver umzuleiten?

Ich bekomme nur meine Füße mit Nginx nass. In der Vergangenheit habe ich eine .htaccess-Datei in/wp-content/uploads verwendet. Wenn auf meinem Entwickler- oder Staging-Server die Datei nicht vorhanden ist, wird sie auf den Produktionsserver umgeleitet:

<IfModule mod_rewrite.c>
  RewriteEngine On

  RewriteBase /wp-content/uploads/
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*) http://production.server.com/m/wp-content/uploads/$1 [L,P]

</IfModule>

Ich habe kein Glück damit, dies in Nginx zu tun. Dies kann zum Teil daran liegen, dass sich meine Site zu diesem bestimmten Zeitpunkt in einem Unterverzeichnis (/ m /) befindet.

# Tells nginx which directory the files for this domain are located
root         /srv/www/example/htdocs;
index               index.php;

    # Subdirectory location settings

    location /m {
            index index.php;
            try_files $uri $uri/ /m/index.php?$args;
            location /m/wp-content/uploads {
                    try_files $uri $uri/ @prod_svr;
            }
    }
    location @prod_svr {
            proxy_pass http://production.server.com/m/wp-content/uploads$uri;
    }

Irgendwelche Ideen würden sehr geschätzt.

6
Colin

Sie könnten so etwas versuchen:

server {
    root /srv/www/example/htdocs;
    index index.php;

    # Matches any URL containing /wp-content/uploads/    
    location ~ "^(.*)/wp-content/uploads/(.*)$" {
        try_files $uri @prod_serv;
    }

    # Will redirect requests to your production server
    location @prod_serv {
        rewrite "^(.*)/wp-content/uploads/(.*)$" "http://yourdomain.com/m/wp-content/uploads/$2" redirect;
    }

    # The rest of your location blocks...
    location /m {
        index index.php;
        try_files $uri $uri/ /m/index.php?$args;
    }
}
4
Ben Cole

Wenn es für jemanden nützlich ist, habe ich ein ähnliches Setup, das ich in meinen lokalen WordPress-Hostumgebungen verwende, um damit umzugehen, mit einigen nützlichen Unterschieden:

  1. Ich setze meine Produktionsumgebung gerne mithilfe einer Variablen, sodass ich diese schnell in mehreren Serverblöcken wiederverwenden kann.
  2. Ich unterbreche das Umschreiben und nicht die Weiterleitung, um Probleme mit anderen Anforderungen zu vermeiden, die möglicherweise mit derselben URL übereinstimmen

Hier ist ein einfaches Beispiel:

server {
    server_name mywebsite.dev;
    set $production mywebsite.wpengine.com;

    # Redirect requests to /wp-content/uploads/* to production server
    location @prod_uploads {
        rewrite "^(.*)/wp-content/uploads/(.*)$" "https://$production/wp-content/uploads/$2" break;
    }

    # Rule for handling requests to https://mywebsite.dev/wp-content/uploads/
    location ~ "^/wp-content/uploads/(.*)$" {
        try_files $uri @prod_uploads;
    }
}

In der Praxis füge ich die location ~ "^/wp-content/uploads/(.*)$"-Regel in eine enthaltene Datei mit dem Namen wp-common.conf ein. Auf diese Weise kann ich den $ production-Schalter in vielen verschiedenen Umgebungen mit denselben allgemeinen WordPress-Nginx-Konfigurationsregeln ausführen.

0
Kevin Leary