web-dev-qa-db-ja.com

アップロードディレクトリへのリクエストを本番サーバーにリダイレクトするようにnginxを設定するにはどうすればいいですか?

私は足をnginxで濡らしています。以前は/ wp-content/uploadsで.htaccessファイルを使用していましたので、私の開発サーバーまたはステージングサーバーにそのファイルがない場合は、本番サーバーにリダイレクトします。

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

私はnginxでこれをやっても運がありません。私のサイトはサブディレクトリ(/ m /)にあるこの特定の時間のため、それは一部かもしれません。

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

どんなアイデアでも大いに評価されるでしょう。

6
Colin

あなたはこのようなことを試すことができます:

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

誰にとっても便利な場合、WordPress localhost環境で使用する同様のセットアップを使用して、これをいくつかの有用な違いで処理します。

  1. 変数を使用して実稼働環境を設定したいので、複数のサーバーブロックでこれをすばやく再利用できます。
  2. リダイレクトではなく書き換えで中断します。これにより、同じURLに一致する他のリクエストの問題を回避できます。

基本的な例を次に示します。

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

実際には、wp-common.confというインクルードファイル内にlocation ~ "^/wp-content/uploads/(.*)$"ルールを実際に含めます。これにより、同じWordPress nginx構成ルールのセットを使用して、さまざまな環境で$ productionスイッチを実行できます。

0
Kevin Leary