Nginx + Apacheの束、ApacheのみをPHPにリクエストする方法は?

タスクが設定されました:フォールトトレラントで生産的なWebサーバーを作成します。 インターネットでは、Nginx + Apacheバンドルのセットアップに関する大量のドキュメントを見つけることができますが、テクノロジー全体を説明するのは意味がありません。 アイデアは、軽量のNginxがすべての静的コンテンツ(画像、アーカイブなど)を提供し、動的コンテンツの生成要求が重いApache Indianに提供されるというものです。 このようなバンドルはサーバーの負荷を軽減し、現在ではほぼ普遍的に使用されています。

ApacheのみをPHPにリクエストし、他のすべてをNGINXで処理する方法は?

公式ドキュメントでは、他のすべてのものと同様に、彼らはこれを行います:

server {
listen one.example.com;
server_name one.example.com

location / {
proxy_pass http://127.0.0.1/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}

location ~* \.(jpg|jpeg|gif|html)$ {
root /spool/www;
access_log off;
expires 30d;
}
}


つまり NGINXが処理するすべてのファイル形式がリストされ、他のすべてはproxy_pass http://127.0.0.1/を経由します 。 すべての可能な拡張オプションをリストすることは不可能です。 正規表現で少し考えてみると、次のようになります。

server {
listen one.example.com;
server_name one.example.com

location / {
proxy_pass http://127.0.0.1/;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr

}

location ~* \.(?!(php|php5|phps)$)[^.]*[^\/]$ {
root /usr/local/www/one.example.com/;
}


つまり .php、.php5、phpsで終わらない、またはアドレスが「/」で終わらないすべてのファイルの処理がNGINX、phpに与えられ、インド人がルートを処理します。

upd: lomikはより合理的な解決策を提案しました。
server {
listen one.example.com;
server_name one.example.com

location / {
root /usr/local/www/one.example.com/;
index index.php index.html index.htm;
}

location ~ \.php {
proxy_pass http://127.0.0.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

Source: https://habr.com/ru/post/J83897/


All Articles