2017-04-06 3 views
0

다른 국가/지역에서 사용 가능한 웹 사이트에서 작업 중입니다. SEO 이유로 우리는 URL에 대해 국가별로 하위 디렉토리를 사용하고 싶습니다. 따라서 우리는 example.com을 메인 도메인으로 사용합니다. example.com/jp/으로 이동하면 일본어 버전이 표시됩니다.NGINX 프록시 다른 하위 도메인에 대한 URL

이제 기술적 이유 (정확하게 Drupal을위한 도메인 모듈의 사용)에 대해 웹 사이트를 배치하기 위해 하위 도메인을 사용하고 싶습니다. jp.example.com이라고 말하면됩니다. 바깥 세상 사람들은/jp /로 이동하지만 NGINX는 jp.example.com을 반환합니다.

jp.example.com과 example.com은 모두 동일한 웹 사이트이지만 도메인 모듈 때문에 다른 콘텐츠를 표시합니다. 이는 코드베이스를 이론적으로 공유한다는 것을 의미합니다. 나는이와 함께 많은 일을 시도하고 있지만, 결국 한 : 나는 위치 항목의 일부를 떠난

server { 
listen  80; 
server_name www.example.com jp.example.com; 
root /var/www/example.com; 
index index.php index.html index.htm;  

location /jp(.+)$ { 
    proxy_pass http://jp.example.com$1; 
} 

location @rewrite { 
    rewrite ^/(.*)$ /index.php?q=$1; 
} 

location ~ '\.php$|^/update.php' { 
    fastcgi_split_path_info ^(.+?\.php)(|/.*)$; 
    include fastcgi_params; 
    fastcgi_param HTTP_PROXY ""; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param PATH_INFO $fastcgi_path_info; 
    fastcgi_param QUERY_STRING $query_string; 
    fastcgi_intercept_errors on; 
    fastcgi_pass unix:/run/php/php7.0-fpm.sock; 
} 
} 

, 위가 유일한 관련 사람들, 특히 첫 번째 생각합니다. 그러나이 결과는/jp url이 페이지가 아니기 때문에 example.com 웹 사이트의 404에서 나타납니다.

jp.example.com을 직접 방문하면 작동합니다. 할 수 있습니까? 그렇다면 어떻게 할 수 있습니까?

답변

0

가 나는 해결책을 찾을 생각 : 페이지 내에서

location ~* ^/jp/ { 
    rewrite ^/jp/(.*)$ /$1 break; 
    proxy_pass http://jp.example.com:81/$1; 
} 

이 페이지에 대한 제대로 작동 않지만 나는 포트 81을 듣고 별도의 conf 파일에 또 다른 가상 호스트를 추가, 모든 파일 (CSS, 이미지 등)은 여전히 ​​example.com에서 직접로드됩니다. 그래서 도메인 모듈은 여전히 ​​주요 웹 사이트로보고 있다고 생각합니다. nginx가 원래 호스트 이름을 어떻게 든 전달합니까?

업데이트 : sub_filter 모듈을 사용하여 출력 HTML에 URL을 다시 작성하여 일부 불쾌한 nginx 트릭을 작성했습니다.

$ 호스트가 jp.example.com을 가리키고 있기 때문에 URL을 하드 코딩해야했습니다. 여러 sub_filter 선언을 사용하면 서로 작동하지 않습니다. 따라서 src = "/ test"를 src = "http://jp.example.com/test"로 바꾸고 "jp.example.com"을 "www.example.com/jp"로 바꾸면 대체되다. 이것은 모든 언어에 대해 하드 코딩 된 도메인으로이 트릭을 수행해야한다는 것을 의미하지만 최소한 작동합니다. 비록 이것이 nginx 성능에 어떤 영향을 미치는지 확실하지 않습니다.