2017-10-04 11 views
2

私はNginxエイリアスリダイレクトが機能しないのはなぜですか(404へ)

# MAIN LOCATION 
location/{ 
    # First attempt to serve request as file, then 
    # as directory, then fall back to displaying a 404. 
    try_files $uri $uri/ =404; 
    #autoindex on; 
    proxy_set_header X-Real-IP $remote_addr; 
} 

/var/www/x.com/index.html @)私は@(/V2は別のローカルディレクトリにリダイレクトしたいx.comで私のメインのサイトを持っています/var/www/x.com/v2/public/index.html

# Redirect beta site 
location /v2 { 
     alias /var/www/x.com/v2/public; 
} 

それが動作するはずのようにこれはそうですが、代わりに、それは私の404サイトになるだろう。わからないこれは私のルートそれらの両方の上にあるここで問題が、場合:

# path 
root /var/www/throneoflies.com/html; 

私は「/」以下は「/ v2の」の両方を注文してみました - 違いを確認していないようでした。私は別のスキーマ(/ v2/public /だけではなく、/ v2 /)であるため、 '別名'の代わりに 'root'を使用しないでください。

編集:これはうまくいくはずです。この記事以降はたくさん読んでいます。ここに私の完全なファイルは次のとおりです。

server { 
     # MAIN >> 
     # SSL configuration 
     listen     443 default_server ssl; 
     server_name    www.x.com; 
     error_page 404   /error/404.html; 
     server_tokens   off; 

     # SSL 
     ssl_certificate   /etc/ssl/x.com/cert.pem; 
     ssl_certificate_key  /etc/ssl/x.com/key.pem; 
     ssl_protocols   TLSv1 TLSv1.1 TLSv1.2; 
     #ssl_session_tickets off; 
     ssl_ciphers    EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; 
     ssl_prefer_server_ciphers on; 

     # path 
     root     /var/www/x.com/html; 
     #root     /var/www/x.com/v2/public; #works! 

     # Add index.php to the list if you are using PHP 
     #index index.php index.html index.htm index.nginx-debian.html; 
     index     index.html; 

     # 404 handling - no cache 
     location = /404.html { 
       add_header  Cache-Control "no-cache" always; 
     } 

     # Redirect beta site : Why doesn't it work if the outer block root changed to the same path works? I can REPLACE my "/" with this v2 path np. However, alias at /v2 does not work. 
     location = /v2 { 
       alias   /var/www/x.com/v2/public; 
       #root   /var/www/x.com/v2/public; 
       #try_files  $uri $uri/ =404; 
     } 

     # MAIN LOCATION 
     location/{ 
       # First attempt to serve request as file, then 
       # as directory, then fall back to displaying a 404. 
       try_files  $uri $uri/ =404; 
       #autoindex  on; 
       proxy_set_header X-Real-IP $remote_addr; 

     # DENY .HTACCESS ACCESS 
     location ~/\.ht { 
       deny all; 
     } 
} 
+1

'location/v2'ブロックが問題なく表示されます。 '/ v2'は404応答の前に'/v2/'にリダイレクトされますか?外側のブロックに 'index'命令がありますか? –

+0

リダイレクトは表示されません。インデックスディレクティブ?ちょうど 'index index.html;' –

+0

(これはCAUGHT 404であり、外側の 'error_page 404 /error/404.html;からの醜いnginx 404ではありません)です。また、私がしようとしているエイリアスとメインルートを入れ替えた場合、/ v2/public/siteはFINEを読み込みます!それはパスの問題ではありません –

答えて

1

これは明らかに$uriが正確に/v2ある場合のみ要求にマッチしますあなたのlocation = /v2=、によって引き起こされるべきです。正しい方法は、おそらく=を削除することです。

さらに、location /v2 {alias /var/www/x.com/v2/public;}を使用すると、/var/www/x.com/v2/public.bakから/v2.bakのようなものにもアクセスできます。それが意図的でない場合は、必要に応じて末尾にスラッシュを付ける方がよいでしょう。

+0

ええと、この最初の行は、Richard 10月4日に既に提案されています。提案から、私はそれを試して編集しました(Richardの下でコメントしました):1つの問題のようですが、問題は解決していません。 今すぐあなたの2番目の提案を探してください。興味深いことに、私は後続のスラッシュが重要だとは思わなかった!末尾にスラッシュがないルートは何かを意味しますか?私たちがエイリアスをしているので、根はまったく問題になりませんか? –

+0

アップデートとして、後ろにスラッシュを入れてみました。不思議なことに、私は動作するメインサイトと全く同じ場所にエイリアスを作成しました。別名で何かが重大に間違っているようです。おそらくこのブロックの外側の何か?もう一つの手がかりは、私が/ v2/public /に外部ブロックのルートを設定した場合、それが働くことです。ルートを内部に置くと動作しません。エイリアスは機能していないようですが、内部ブロックに再度置くとルートが更新されないようです。 –

+1

@DylanHuntこれをテストする方法を表示できますか? curl -vも本当に役に立ちます。もしerror.log行を貼り付けてください – David

関連する問題