私はa.b
ドメイン(たとえば)を持っており、username.github.io/project
でいくつかのgithubページ(a.b/c
)を提供したいと考えています。また、ブラウザのURLをa.b/c
に維持し、username.github.io/project
のコンテンツを表示することも希望しています。
Nginxモジュールに次の設定があります
location /c {
proxy_pass http://username.github.io/project;
proxy_redirect http://username.github.io http://a.b;
proxy_set_header Host $http_Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
}
proxy_set_header Host $http_Host
をproxy_set_header Host $proxy_Host
または$Host
に変更すると、意図しないhttp://username.github.io/project
にリダイレクトされます。どのようにできるのか?
proxy_set_header Host $http_Host
行を削除して、正しいHostヘッダーをプロキシターゲットに送信するだけです。
サーバーブロックでa.b
がサーバー名として構成されている場合、説明のように場所のプレフィックスとproxy_redirect
ターゲットで末尾のスラッシュを使用すれば、proxy_pass
ディレクティブも不要です。 ドキュメント内 :
Syntax: proxy_redirect default; proxy_redirect off; proxy_redirect redirect replacement; Default: proxy_redirect default; Context: http, server, location
[...]
Defaultパラメータで指定されたデフォルトの置換では、locationおよびproxy_passディレクティブのパラメータを使用します。したがって、以下の2つの構成は同等です。
location /one/ { proxy_pass http://upstream:port/two/; proxy_redirect default; } location /one/ { proxy_pass http://upstream:port/two/; proxy_redirect http://upstream:port/two/ /one/; }
[....]
だから、これはそれを行うべきです:
server {
server_name a.b;
location /c/ {
proxy_pass http://username.github.io/project/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
}
}
使用する
proxy_redirect off;
だからあなたの設定は
location /c {
proxy_pass http://username.github.io/project;
proxy_redirect http://username.github.io;
proxy_set_header Host username.github.io;
proxy_set_header X-Host username.github.io;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
}