2017-10-04 12 views
2

J'ai mon site principal à x.com (@/var/www/x.com/index.html)Pourquoi mon alias Nginx ne fonctionne-t-il pas (Aller à 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; 
} 

Je veux /v2 redirigée vers une autre dir locale (@/var/www/x.com/v2/public/index.html)

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

Cela semble que cela devrait fonctionner, mais au contraire, il va sur mon site 404. Je ne sais pas si cette question est importante, mais voici mes racines au-dessus de tous les deux:

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

J'ai essayé de commander «/v2 » fois au-dessus «/» et au-dessous - ne semble pas faire une différence . J'ai lu que je ne devrais pas utiliser 'root' au lieu de 'alias' parce que c'est un schéma différent (/ v2/public/et pas seulement/v2 /).

EDIT: On dirait que cela devrait fonctionner - j'ai beaucoup lu depuis ce post. Voici mon dossier complet:

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

Le bloc 'location/v2' semble correct. Est-ce que '/ v2' redirige vers/v2 /' avant la réponse 404? Y a-t-il une directive 'index' dans le bloc externe? –

+0

Je ne vois pas de redirection visible, si c'est ce que vous voulez dire. Directive d'index? Yea juste 'index index.html;' –

+0

(C'est un 404 CAUGHT, pas le nginx 404 laide de l'extérieur 'error_page 404 /error/404.html;'). De plus, si j'échange la racine principale avec l'alias que j'essaie de faire, le/v2/public/site charge FINE! Donc ce n'est pas un problème de chemin –

Répondre

1

Cela devrait évidemment être causé par le = dans votre location = /v2, qui ne correspondra à des demandes où le $uri est exactement /v2; la bonne façon serait probablement d'enlever =.

En outre, notez que si vous utilisez location /v2 {alias /var/www/x.com/v2/public;}, alors les gens pourraient également accéder à des choses comme /var/www/x.com/v2/public.bak à /v2.bak; Si ce n'est pas intentionnel, alors vous feriez mieux d'avoir des slash traînants, le cas échéant.

+0

Hmm, cette première ligne a déjà été suggérée par Richard 4 oct - depuis la suggestion, je l'ai essayée et éditée (+ commentée ci-dessous Richard): Cela semblait être l'un des problèmes, mais le problème n'est toujours pas résolu. En regardant votre deuxième suggestion maintenant. Intéressant, je ne pensais pas que les slashes étaient importants! Est-ce que la racine n'ayant pas de barre oblique arrière signifie quelque chose? Ou la racine n'a pas d'importance du tout puisque nous faisons un alias? –

+0

Comme une mise à jour, j'ai essayé slash et même. Curieux, j'ai fait un alias exactement au même endroit que mon site principal qui fonctionne - et ça ne marche pas non plus! Quelque chose semble vraiment mal avec un alias. Peut-être quelque chose en dehors de ce bloc? Un autre indice est que si je place la racine du bloc extérieur dans/v2/public/it WORKS - si je mets la racine à l'intérieur, cela ne fonctionne pas. Aucun alias ne semble fonctionner, et root ne semble pas mettre à jour si je le mets de nouveau sur un bloc interne. –

+1

@DylanHunt pouvez-vous montrer comment vous testez cela? curl -v sera vraiment utile aussi, si vous pouviez coller des lignes error.log – David