web-dev-qa-db-ja.com

Nginx:国が異なる単一のルートディレクトリへの動的パスルーティングリクエストを実行する方法(geoipモジュール)

単一のルートディレクトリへの動的パスルーティングリクエストと/<country_zone>/<actual_url>/*へのURLの実行方法。

Geoipモジュールを使用して$country_zoneのいずれかになり得る(in|uk|us|other)値を取得できます。

Request => Response 
/ => /
/ (with geoip country as US) => /us/
/path/ => /path
/path/ (with geoip country as US) => /us/path/
/us/path/ => /us/path/
/us/path/ (with geoip country as US) => /us/path/
/in/* => /*

私のコードベースは次の場所にあります:/ var/www/html(すべてのルートはこれを/の後のルートディレクトリと見なす必要があります

私の現在のnginx設定:

server {
    listen 80 default_server;
    listen [::]:80 default_server;


    root /var/www/html;

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

    location  ~  ^/$country_zone {
        alias /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        break;
    }

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.

        if ($country_zone != in) {
                return 307 /$country_zone;
        }

        add_header X_COUNTRY_ZONE_ID $country_zone;
        try_files $uri $uri/ =404;
    }


}

PS:いつか別のサーバーにリクエストをプロキシする予定です

1
sushil kanojia

IFISEVIL( https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

あなたの解決策は私にはかなり大丈夫に見えます。正直なところ、私には何が悪いのか見当がつかない。

むしろ、ユーザーのブラウザーのデフォルト言語を認識してWebサイトを表示するか、それに応じてルーティングするようにアプリケーションをコーディングしたいと思います。少なくともそれは私たちがしたことです。 URLは常に同じですが、メインドメイン名の直後で、予想どおりに国コードを見つけることができます。

1
Bert