6

私のCMSには、次のようなサブドメインベースのサイトがいくつかあります。

a.site.com
b.site.com

アップロードされたすべてのファイルは、次の/uploadようなディレクトリの下にあります。

site.com/upload/2012/a.jpg

しかし、URL は " /upload/2012/a.jpg" のように生成されます。この場合、a.site.com/upload/2012/a.jpgURLとb.site.com/upload/2012/a.jpgURLで同じ画像にアクセスできます。

を指すすべてのリクエストをリダイレクトするようにnginxを構成するにはどうすればよいです/uploadsite.com/upload。例:

a.site.com/upload/2012/a.jpg => site.com/upload/2012/a.jpg
4

2 に答える 2

2

* .site.comのサーバーブロックが分離している場合は、サブドメインの構成に以下を追加するとうまくいくはずです。

location /upload/ {
  rewrite ^ http://site.com$request_uri permanent;
}

同じサーバーブロックでsite.comと*.site.comの両方をキャッチしている場合は、それにifステートメントを追加する必要があります。

location /upload/ {
  if( $host != site.com ) {
    rewrite ^ http://site.com$request_uri permanent;
  }
  # if we get here it's the main site
  # directives for serving http://site.com/upload/ go here
}
于 2012-08-31T16:49:54.270 に答える
1

Nginx は URL を生成しません。ウェブサーバーです。などのご要望にお応えしますhttp://site.com/upload/2012/a.jpg

/upload/2012/a.jpgしたがって、html コードの相対リンクを絶対リンクに変更しhttp://site.com/upload/2012/a.jpg、nginx の設定を変更する必要はありません。または、サブドメインの nginx 構成を変更すると、nginx はhttp://site.com/upload/2012/a.jpgおよびhttp://a.site.com/upload/2012/a.jpgおよびhttp://b.site.com/upload/2012/a.jpgリクエストに対して同じイメージを送信します。

構成を変更したい場合は、すべてのサブドメインに対して統一された構成を作成する必要があります。なぜなら

仮想サーバーを名前で検索する場合、名前が指定されたバリアントの複数に一致する場合 (たとえば、ワイルドカード名と正規表現の両方が一致する場合)、次の優先順位で最初に一致するバリアントが選択されます。

server {
    listen       80;
    server_name  *.site.com;

    location ^~ /upload {
         root   /real/path/to/upload/; 
         ...
    }

}

場所指令マニュアル

于 2012-09-04T00:42:36.480 に答える