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>
例2
2番目の例では、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サイトから少し分離するのに理想的であり(自動化されたエクスプロイトスクリプトwillyoursite.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>