[解決済み] 既存のすべての静的ファイルをNGINXで直接提供し、残りをバックエンドサーバーにプロキシする方法。
2023-02-20 18:53:05
質問
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if (-f $request_filename) {
access_log off;
expires 30d;
break;
}
if (!-f $request_filename) {
proxy_pass http://127.0.0.1:8080; # backend server listening
break;
}
}
上記は、Nginxを使用して既存のすべてのファイルを直接提供し(例えば、NginxはPHPのソースコードを表示するだけ)、それ以外の場合はApacheにリクエストを転送します。.phpへのリクエストもApacheに渡されて処理されるように、*.phpファイルをルールから除外する必要があります。
Nginxにすべての静的ファイルを処理させ、Apacheにすべての動的なものを処理させたいのです。
EDIT: ホワイトリストアプローチもありますが、あまりエレガントではありませんし、すべての拡張機能を見ることはできません。
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
access_log off;
expires 30d;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
EDIT 2: 新しいバージョンの Nginx では
try_files
の代わりに
http://wiki.nginx.org/HttpCoreModule#try_files
どのように解決するのですか?
使用方法 トライファイル と名前付きロケーションブロック('@apachesite')を使用します。これにより、不要な正規表現マッチとifブロックが削除されます。より効率的です。
location / {
root /path/to/root/of/static/files;
try_files $uri $uri/ @apachesite;
expires max;
access_log off;
}
location @apachesite {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
更新しました。
この設定の前提は、以下のようなPHPスクリプトが存在しないことです。
/path/to/root/of/static/files
. これは、最近のほとんどの php フレームワークで共通です。レガシーなPHPプロジェクトで、PHPスクリプトと静的ファイルが同じフォルダに混在している場合、nginxに提供させたいファイルタイプをすべてホワイトリストに登録する必要があるかもしれません。
関連
-
[解決済み】Raspberry Piサーバーに対して小規模なDDoS攻撃を実行する【終了しました
-
linux システムでの Nginx のインストール: make: *** `install' をターゲットとするルールがありません。停止します。
-
NginxのRequest Entity Too Largeの解決法
-
nginx が "414 request-uri too large" と表示される。
-
チャンクベンダーが大きすぎるため、最初の画面の読み込みが遅すぎるフロントエンド・プロジェクトの最適化
-
[解決済み] Flaskで静的ファイルを提供する方法
-
[解決済み] nginxです。[emerg] "server" ディレクティブはここでは許可されません。
-
[解決済み] nginx.confを編集してファイルサイズのアップロードを増やす方法
-
[解決済み] nginxでproxy_passを使用しているときに応答ヘッダを追加するには?
-
[解決済み] ファイルブラウザモードを有効にするためのnginxの設定方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] どのヘッダテストツールでもnginxが400 bad request headersを投げるのを修正する方法は?
-
[解決済み] NGINXを設定して、サブルートで場所(同じサーバー名の下)に応じて異なるシングルページアプリケーション(SPA...すなわち静的ファイル)をデプロイする方法
-
NginxのRequest Entity Too Largeの解決法
-
[解決済み] Nginx -- rootとaliasによる静的ファイル提供の混乱
-
[解決済み] nginx が空白の PHP ページを表示する
-
[解決済み] nginxが任意のドメイン名で応答するのはなぜですか?
-
[解決済み] nginx が返すサーバーヘッダを変更するには?
-
[解決済み] MIMEタイプ "text/html "が重複している?
-
[解決済み] Nginx 同一IPで異なるドメイン
-
[解決済み] nginx- デフォルトサーバーの重複エラー