2017-04-06 16 views
0

私は異なる国/地域のWebサイトで作業しています。 SEOの理由から、URLには国ごとにサブディレクトリを使用したいと考えています。したがって、メインドメインとしてexample.comがあります。 example.com/jp/に移動すると、日本語版が表示されます。NGINXプロキシ別のサブドメインへのURL

技術的な理由から、ドゥルーパルのドメインモジュールを正確に使用するために、サブドメインを使用してウェブサイトを配置したいと考えています。 jp.example.comと言うことができます。外部には/ jp /に移動しますが、NGINXはjp.example.comを返します。

jp.example.comとexample.comの両方が同じWebサイトですが、ドメインモジュールのために異なるコンテンツが表示されます。つまり、コードベースを共有し、理論上は仮想ホストの設定を共有します。私は多くのことをしようとしますが、これで終わってきた:

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; 
} 
} 

私は場所エントリの一部を残してきた、私は上記のみ関連するもの、特に最初の1だと思います。ただし、/ jp urlはページではないため、example.comのWebサイトの404でこれが行われます。

jp.example.comに直接アクセスすると動作しますが、それはできますか?あれば、どうですか?

私は解決策見つけたと思う

答えて

0

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

を、これは、ページのページ内のすべてのファイルを動作するようには思えんが、私は、CSS(ポート81を聞いて別のconfファイル内の別のバーチャルホストを追加し、画像など)はまだexample.comから直接ロードされています。だから私は、ドメインのモジュールはまだメインのウェブサイトとしてそれを見ていると思います。 nginxは何とか元のホスト名を転送しますか?

更新:私は、出力HTMLのURLをsub_filterモジュールを使って書き直すことで、いくつかの厄介なnginxのトリックを完成させました。

location ~ '\.php$|^/update.php' { 
     sub_filter 'href="/' 'href="http://www.example.com/jp/$1'; 
     sub_filter 'src="/' 'src="http://www.example.com/jp/$1'; 
     sub_filter 'jp.example.com' 'www.example.com/jp'; 
     sub_filter_once off; 
     sub_filter_types *; 

     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.example.comになってからハードコードする必要がありました。複数のsub_filter宣言を使用する場合、それらは互いに作用しません。 src = "/ test"をsrc = "http://jp.example.com/test"に置き換えて "jp.example.com"を "www.example.com/jp"に置き換えると、交換される。これはハードコーディングされたドメインでこのトリックを行う必要があるすべての言語に対して、少なくともそれが機能することを意味します。これがnginxのパフォーマンスに影響を与えるかどうかはわかりません。

関連する問題