質問: ubuntu 20.04でapache2を使用して、ip_adress / phpmyadminにアクセスできるサイトをホストする方法 ubuntu20.04とlampがインストールされたvpsセットアップがあります。 <ip_address>/phpmyadmin経由でphpmyadminにアクセスできます。後で、/etc/apache2/sites-available/ファイルを追加して.confでvirtualhostを有効にしました。有効にしたサイトには、<ip_address>からアクセスできます。しかし、<ip_address>/phpmyadminは404を返します。私が理解しているように、これはすべてのリクエストが有効なサイトに送信されるためです。 phpmyadminとmysiteの両方にもアクセスしたいので、googleから取得した検索結果から示唆されるように、.confファイルへの変更のいくつかの組み合わせを試しました。しかし、それらのどれも機能しませんでした。試行された構成のうちの3つは次のとおりです。エイリアスの追加<virtualhost *:80> serveradmin john@ubuntu errorlog ${apache_log_dir}/cpapp-error.log customlog ${apache_log_dir}/cpapp-access.log combined alias /phpmyadmin /usr/share/phpmyadmin <directory /usr/share/phpmyadmin> options followsymlinks directoryindex index.php </directory> <location /> proxypass unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1/ proxypassreverse unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1/ </location> </virtualhost> 2つの仮想ホストの作成<virtualhost *:80> serveradmin john@ubuntu errorlog ${apache_log_dir}/cpapp-error.log customlog ${apache_log_dir}/cpapp-access.log combined <location /> proxypass unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1/ proxypassreverse unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1/ </location> </virtualhost> <virtualhost *:80> serveradmin webmaster@localhost documentroot /var/www/html errorlog ${apache_log_dir}/error.log customlog ${apache_log_dir}/access.log combined </virtualhost> サイトを特定のurlパスに制限する-これにより、apache2をリロードするときに.confの構文エラーが発生しました<virtualhost *:80> serveradmin john@ubuntu errorlog ${apache_log_dir}/cpapp-error.log customlog ${apache_log_dir}/cpapp-access.log combined <location /> proxypass /mysite/ unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1/ proxypassreverse /mysite/ unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1/ </location> documentroot /var/www/html </virtualhost> 誰かが私が間違って試したことを教えてもらえますか?/etc/apache2/conf-available/phpmyadmin.confの構成# phpmyadmin default apache configuration alias /phpmyadmin /usr/share/phpmyadmin <directory /usr/share/phpmyadmin> options symlinksifownermatch directoryindex index.php # limit libapache2-mod-php to files and directories necessary by pma <ifmodule mod_php7.c> php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/:/usr/share/php> </ifmodule> </directory> # disallow web access to directories that don't need it <directory /usr/share/phpmyadmin/templates> require all denied </directory> <directory /usr/share/phpmyadmin/libraries> require all denied </directory>
回答: 誰かが私が間違って試したことを教えてもらえますか? 例1最初の例では、aliasを割り当てる前に、指定されたurl(例:/phpmyadmin)をプロキシから除外してみてください。# exclude ex. "/phpmyadmin" from proxying proxypass /phpmyadmin ! proxypass / unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1/ proxypassreverse / unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1/ alias /phpmyadmin /usr/share/phpmyadmin <directory /usr/share/phpmyadmin> options followsymlinks directoryindex index.php </directory> 例22番目の例では、2つの解決策が考えられます。最初に考えられる解決策は、「phpmyadmin」仮想ホストを他の仮想ホストの前に置くことです。<virtualhost *:80> #servername example.com serveradmin webmaster@localhost documentroot /var/www/html errorlog ${apache_log_dir}/error.log customlog ${apache_log_dir}/access.log combined </virtualhost> <virtualhost *:80> servername example.net serveradmin john@ubuntu errorlog ${apache_log_dir}/cpapp-error.log customlog ${apache_log_dir}/cpapp-access.log combined <location /> proxypass unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1/ proxypassreverse unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1/ </location> </virtualhost> apacheが仮想ホストを読み取るとき、それらは順番に読み取られ、servernameが一致しない場合(つまり、通常はipが要求された場合)に最初の仮想ホストが返されます。2番目に考えられる解決策は、外部ipを2番目の仮想ホストのservernameとして配置し、そのipが要求されたときに仮想ホストが使用されるようにすることです。<virtualhost *:80> #servername example.net serveradmin john@ubuntu errorlog ${apache_log_dir}/cpapp-error.log customlog ${apache_log_dir}/cpapp-access.log combined <location /> proxypass unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1/ proxypassreverse unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1/ </location> </virtualhost> <virtualhost *:80> servername 111.222.111.222 serveradmin webmaster@localhost documentroot /var/www/html errorlog ${apache_log_dir}/error.log customlog ${apache_log_dir}/access.log combined </virtualhost> 上記の両方のソリューションは、「phpmyadmin」仮想ホストが実際にex経由でphpmyadminにアクセスできることを前提としていることに注意してください。 /phpmyadmin。また、2番目の仮想ホストを効果的に使用するには、他の仮想ホストと区別するためにservernameを指定する必要があります。これにより、2番目の仮想ホストにアクセスできるようになります。例3番目の例のエラーに関しては、proxypassブロックで定義されている場合はlocationにパスを設定できないため、locationブロックを省略する必要があります。<virtualhost *:80> serveradmin john@ubuntu documentroot /var/www/html errorlog ${apache_log_dir}/cpapp-error.log customlog ${apache_log_dir}/cpapp-access.log combined proxypass /mysite unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1 proxypassreverse /mysite unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1 </virtualhost> 推奨構成構成を推奨する場合、vps ipが本質的に静的であると仮定すると、(可能であれば)servername/ipソリューションを使用する可能性があります。これは、phpmyadminをwebサイトから少し分離するのに理想的であり(自動化されたエクスプロイトスクリプトwill yoursite.com/phpmyadminを攻撃しようとするため)、ip自体が要求された場合にのみ適用される構成が可能になります。 。したがって、たとえば、元のalias構成をその仮想ホスト内に貼り付けることができます。例:<virtualhost *:80> #servername example.net serveradmin john@ubuntu errorlog ${apache_log_dir}/cpapp-error.log customlog ${apache_log_dir}/cpapp-access.log combined <location /> proxypass unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1/ proxypassreverse unix:/home/john/cpapp/cpapp.sock|http://127.0.0.1/ </location> </virtualhost> <virtualhost *:80> servername 111.222.111.222 serveradmin webmaster@localhost documentroot /var/www/html alias /phpmyadmin /usr/share/phpmyadmin <directory /usr/share/phpmyadmin> options followsymlinks directoryindex index.php </directory> errorlog ${apache_log_dir}/error.log customlog ${apache_log_dir}/access.log combined </virtualhost>