nginx のリバース プロキシ エイリアスの背後にあるネット
<p>Apache2/Debian 11 サーバー上で Nette アプリケーションを実行していますが、正常に動作します。ただし、エイリアスを使用して nginx プロキシの背後に隠す必要があります。 </p>
<p>http://127.0.0.1:89/ で実行されている完璧な Apache2 環境があり、https://example.com /applications/ でリバース プロキシとして設定された nginx 経由でそれにアクセスしたいとします。< ;/p>
<p>nginx の設定は次のとおりです。</p>
<pre class="brush:php;toolbar:false;">location /app/ {
プロキシパス http://127.0.0.1:89;
proxy_set_header ホスト $host;
proxy_set_header X 転送ホスト $host;
proxy_set_header X-Forwarded-Proto "https";
proxy_set_header X 転送ポート "443";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}</pre>
<p>プロキシが試行するまで、Apache2 構成は変更されません: </p>
<pre class="brush:php;toolbar:false;"><VirtualHost *:89>
ServerAdmin webmaster@localhost
ドキュメントルート /var/www/app/www/
<ディレクトリ /var/www/app/www/>
オプション インデックス FollowSymLinks
すべてのオーバーライドを許可
すべての付与を要求する
</ディレクトリ>
</VirtualHost></pre>
<p>問題は、Nette アプリケーションが「/app」URI 部分のないパスで実行されていると依然として認識しているため、リダイレクトとリンク呼び出しによって生成されたすべてのリンク ($basePath テンプレート変数を含む) が無効になることです。 < /p>
<p>プロキシ情報も Nette 構成に追加しました。nginx インスタンスは同じサーバー上で実行されているため、次のようになります。</p>
<pre class="brush:php;toolbar:false;">http:
プロキシ: 127.0.0.1</pre>
<p>転送される URI で /admin パスを転送するように nginx 構成を設定してみました: </p>
<pre class="brush:php;toolbar:false;">proxy_pass http://127.0.0.1:89/admin;</pre>
<p>また、Nette ルーターをいじって「admin/」部分をフィルタリングしてみました (明らかに欠落している AdminPresenter は検索しません)。 </p>
<pre class="brush:php;toolbar:false;">$router->addRoute('[admin/]<presenter>/<action>[/<id>]', 'ホームページ:デフォルト');
<p>Nette アプリケーションは、ページにアクセスしようとすると次のエラーを生成します: </p>
<pre class="brush:php;toolbar:false;">TypeError: unpack() はパラメータ 2 が文字列であることを予期しており、/var/www/app/vendor/nette/http/src/Http/Helpers で指定されたブール値になります。 .php:49 @ http://example.com/app/</pre>
<p>誰かが私に正しい方向を教えてくれませんか? </p>