Web Server · 1 min read · Dec 27, 2025

Nginx Catch-All Host As Front End To Apache For ISPConfig 3 On Debian Lenny

Nginx Catch-All Host As Front End To Apache For ISPConfig 3 On Debian Lenny

By Nedim Hadzimahmutovic < [email protected] >
Version: v1.1
Last Change: May 19, 2010

Introduction

Apacheは私にとって常に選ばれるウェブサーバーでした。リソースが限られた環境、特にVPSのような環境では、リソース使用に関して本当に強力です。私は軽量で高性能なウェブサーバーであるNginxを使い始めました。私の関心のある分野は、Nginxをリバースプロキシとして実行し、Apache/ISPConfig 3環境で機能させることでした。

The Problem

私はOpenVZ、apache2-mpm-itk、mod_phpのユーザーです。Apache mpm-itkはFastCGIをサポートしていません。この問題は、64ビットOSを使用すると劇的に増加します。なぜなら、Apacheははるかに多くのメモリを使用するからです(32ビットシステムは4バイトポインタを持ち、64ビットシステムは8バイトポインタを持ちます)。私はKMEMSIZE制限エラーを受け始め、Apacheがその理由でした。Apacheは私のVPSを使えなくしたので、代替手段を探さなければなりませんでした。

The Solution

Nginxが答えでしたが、私はApacheのみをサポートするISPConfigユーザーであり、これを回避する方法を見つけても、各仮想ホストを手動で管理することはありませんでした。解決策は、Nginxのキャッチオールホストをフロントエンドとして設定し、バックエンドで異なるポートで実行されるApacheにプロキシすることでした。この方法で、Nginxは静的ファイルを提供し、PHPはApacheに任せることになります。また、希望すれば、Nginxに全ドメインを任せることもできます。その場合は、そのドメインの仮想ホストをデフォルトのvhostの前に置くだけです。さらに一歩進めて、64ビットOSの上に32ビットのchroot環境を実行し、32ビットのApacheをインストールすることもできますが、これはこのチュートリアルではカバーしません。

Configure Apache

Apacheをポート82で実行するように設定します。/etc/apache2/ports.confおよびすべての仮想ホストで設定します。簡単にするためにsedコマンドを使用します:

 # sed -ie 's/YOUR-IP:80/YOUR-IP:82/g' /etc/apache2/sites-available/*.vhost 

仮想ホストはIPベースであると仮定します - あなたのvhostはIP:80の代わりに*:80を持つことがあります。

sedコマンドは、.vhostファイルのバックアップファイルを作成します。これらのファイルには.vhoste拡張子が付いています。バックアップvhostファイルを移動できます:

mkdir /root/apache2_vhost_backup/
mv /etc/apache2/sites-available/*.vhoste /root/apache2_vhost_backup/

Apacheを再起動し、netstatを使用してポート82で実行されているか確認します:

  tcp        0      0 0.0.0.0:82              0.0.0.0:*               LISTEN      7630/apache2 

次に、ISPConfigのApacheテンプレートを変更する必要があります。これらをconf-customディレクトリにコピーします:

 # cd /usr/local/ispconfig/server/ 
 # cp conf/apache_ispconfig.conf.master conf-custom/ 
 # cp conf/vhost.conf.master conf-custom/ 

2つのファイルを開いて、:80を:82に変更します。念のため、grepコマンドを実行して出力が一致するか確認します:

 # grep :82 -i /usr/local/ispconfig/server/conf-custom/* 

/usr/local/ispconfig/server/conf-custom/apache_ispconfig.conf.master:NameVirtualHost {tmpl_var name=”ip_address”}:82
/usr/local/ispconfig/server/conf-custom/vhost.conf.master: :82>

すべてのリクエストがlocalhost(127.0.0.1)から発信されていることがわかります。ユーザーの実際のIPアドレスを見るには、libapache2-mod-rpafをインストールする必要があります:

 # apt-get install libapache2-mod-rpaf 

次の内容を/etc/apache2/apache2.confに追加します:

# nano /etc/apache2/apache2.conf
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 YOU_IP_ADDRESS

Installing And Configure Nginx

lenny-backportsリポジトリを有効にします。指示はhttp://backports.org/で見つけることができます。

 apt-get install nginx 

デフォルトのvhostを削除します:

 # rm /etc/nginx/sites-available/default 

ファイルを開きます:

 # nano /etc/nginx/sites-available/default 

ファイルに次の内容を追加します:

server {
    listen   80 default; 
        server_name  _;
        server_name_in_redirect  off;
    resolver  127.0.0.1;
#### www. redirect  - all domains starting with www will be redirected to http://domain. ####
    if ($host ~* ^(www\.)(.+)) {
        set $rawdomain $2;
        rewrite ^/(.*)$  http://$rawdomain/$1 permanent;
    }
    access_log  /var/log/ispconfig/httpd/$host/access.log;
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|swf|flv|html|htm|mp3)$ {
    root   /var/www/$host/web; 
    access_log off;
    expires 30d;
    }
location / {
    root   /var/www/$host/web;
    index  index.html index.htm index.php;
        access_log      off;
        proxy_pass http://$host:82;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

これで完了です。Nginxはすべての静的ファイル(画像やHTMLファイルなど)を提供し、PHP関連のリクエストはApacheに転送されます。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。