バックエンドのプライベートネットワークで稼動するドッカーによって管理されるいくつかのマイクロサービスがあり、nginxによって管理される動的ルーティングを設定して、URIに基づいてマイクロサービスを選択します。ここから来るべき声明fastcgi_pass app:9000;
から私はURIでパスの最初のセグメントからfastcgi_pass
ディレクティブのドメイン名を取るためにnginxの必要Nginxはルートの下のサブフォルダに書き直します
ので、「アプリ」:私は3つの質問を持っています:
https://example.com/app/foo/bar
。 URIのURIがhttps://example.com/another-app/foo/bar
の場合、この指示はfastcgi_pass another-app:9000;
のようになります。このように動的に可能なのでしょうか、すべてのFastCGIサーバーに対して別の場所を作成する必要がありますか?同じ最初のURIパスのセグメントに応じて、ルートの下のフォルダに書き直す必要もあります。私は設定を書きましたが、404エラーを受け取りました。私はnginxの初心者で、ちょうどnginxとphp-fpmのコンテナのパスが一致していないことに気付きました。 404エラーがこの事実に関連することはありますか?
この種のルーティングはまったく可能ですか(詳細については、下記の設定を参照してください)。別のオプションは、すべてのマイクロサービス用に別の場所を作成することですが、マイクロサービスを追加または削除するたびにこの設定を変更する必要はありません。ここで
は私の設定です:ここでは
server {
server_name _;
root /services;
#rewrite to the subfolder under root depending on the first section in the path
rewrite ^/(\w+)(/|$) /$1/app_dev.php$is_args$args last;
location/{
# try to serve file directly, fallback to app.php
try_files $uri /app_dev.php$is_args$args;
}
location ~ ^/(\w+)/(app_dev|config)\.php(/|$) {
#further rewrite to the /web subfolder with the front controller
rewrite ^/(\w+)/(app_dev|config)\.php(/|$) /$1/web/$2.php$is_args$args break;
fastcgi_pass media:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
}
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/error.log notice;
access_log /var/log/nginx/access.log;
rewrite_log on;
}
はログです:
backend_1 | 2017/09/17 20:03:54 [error] 8#8: *1 open() "/usr/share/nginx/html/media" failed (2: No such file or directory), client: 172.25.0.1, server: localhost, request: "GET /media HTTP/1.1", host: "localhost:8082"
backend_1 | 172.25.0.1 - - [17/Sep/2017:20:03:54 +0000] "GET /media HTTP/1.1" 404 571 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36" "-"
もう一つの問題は、私はそれがあったかもしれない推測、任意の書き換えのログが表示されないということですいずれの位置も一致しないという事実に関連している。
microserviceはJSONまたはhtmlの形式で返信していますか? htmlのためにサービスがベースURLを期待する必要があるので –
@ TarunLalwani JSONのみ – Sergey