Nginx複数ルート


13

特定のサブディレクトリへのリクエストを別のルートロケーションに転送したいのですが。どうやって?私の既存のブロックは:

server {
    listen       80;
    server_name  www.domain.com;

    location / {
        root   /home/me/Documents/site1;
        index  index.html;
    }

    location /petproject {
        root   /home/me/pet-Project/website;
        index  index.html;
        rewrite ^/petproject(.*)$ /$1;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    } }

つまり、http://www.domain.comは/home/me/Documents/site1/index.htmlを提供し、http://www.domain.com/petprojectは/ home / me / pet-Project / websiteを提供する必要があります。 /index.html-nginxは置き換え後にすべてのルールを再実行するようで、http://www.domain.com/petprojectは/home/me/Documents/site1/index.htmlを提供するだけです。

回答:


27

構成には、通常nginxで発生する通常の問題があります。つまり、ブロックroot内でディレクティブを使用しlocationます。

現在のlocationブロックの代わりにこの構成を使用してみてください:

root /home/me/Documents/site1;
index index.html;

location /petproject {
    alias /home/me/pet-Project/website;
}

つまり、ウェブサイトのデフォルトディレクトリは/home/me/Documents/site1であり、/petprojectURIの場合、コンテンツは/home/me/pet-Project/websiteディレクトリから提供されます。


4

break処理が停止するように書き換えルールにフラグを追加する必要があります。これはロケーションブロック内にあるため、処理はそのブロック内で続行されます。

rewrite ^/petproject/?(.*)$ /$1 break;

注:/?URLの先頭に二重スラッシュが含まれないように、マッチングパターンにも追加しました。


aliasディレクティブをここで使用する必要があるように使用する場合、ここでの書き換えはまったく必要ありません。
Tero Kilkanen、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.