2017-10-04 7 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 /)이기 때문에 '별칭'대신 '루트'를 사용해서는 안됩니다.

편집 : 편집해야 할 것 같습니다.이 게시물 이후로 많은 내용을 읽었습니다. 여기 내 전체 파일은 다음과 같습니다 $uri 정확히 /v2입니다 요청 만 일치합니다

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

'위치/v2'블록이 정상적으로 보입니다. '/ v2'는 404 응답 전에'/ v2 /'로 재전송됩니까? 외부 블록에'index' 지시자가 있나요? –

+0

가시적 인 리디렉션이 표시되지 않습니다. 색인 지시문? Yea 그냥'index index.html;' –

+0

(그것은'404 에러 코드 404 /error/404.html;에서 추한 nginx 404가 아닌 404 에러입니다.). 또한 주 루트를 내가하려고하는 별칭으로 바꾼다면/v2/public/site가 FINE을로드합니다! 경로 문제가 아닙니다. –

답변

1

이것은 분명히 당신의 location = /v2=에 의해 발생한다; 올바른 방법은 =을 제거하는 것입니다.

또한 location /v2 {alias /var/www/x.com/v2/public;}을 사용하면 /var/www/x.com/v2/public.bak에서 /v2.bak과 같은 항목에 액세스 할 수 있습니다. 이것이 의도적이지 않다면 적절한 경우 후행 슬래시를 사용하는 것이 좋습니다.

+0

흠,이 첫 번째 라인은 이미 Richard Oct 4 일에 제안되었습니다. 제안 이후, 나는 그것을 시도하고 편집하여 (Richard의 아래에 댓글을 달았습니다.) 1 개의 이슈로 보였지만 여전히 해결되지 않았습니다. 이제 2 번째 제안을 살펴보십시오. 재미있게, 나는 후행 슬래시가 중요하다고 생각하지 않았다! 후행 슬래시가없는 루트는 의미가 있습니까? 우리가 별칭을 쓰고 있기 때문에 뿌리가 전혀 중요하지 않습니까? –

+0

업데이트로, 나는 슬래시와 같은 것을 시도했다. 호기심, 나는 작동하는 나의 메인 사이트와 정확히 같은 위치에 별명을 만들었다 - 그리고 그것은, 어느 쪽이든 작동하지 않는다! 별칭에 문제가있는 것 같습니다. 아마도이 블록의 바깥에있는 뭔가? 또 다른 단서는 외부 블록 루트를/v2/public/work /에 설정하면 루트를 내부에두면 작동하지 않는다는 것입니다. 별칭이 작동하지 않는 것 같고 루트를 다시 내부 블록에 넣으면 루트가 업데이트되지 않는 것처럼 보입니다. –

+1

@DylanHunt 테스트 방법을 보여줄 수 있습니까? curl -v도 도움이 될 것입니다. 몇 줄의 error.log 행을 붙여 넣으십시오. – David