web-dev-qa-db-ja.com

Ubuntu 20.04でApache2を使用して、ip_adress / phpmyadminにアクセスできるサイトをホストする方法

Ubuntu20.04とLAMPがインストールされたVPSセットアップがあります。 <ip_address>/phpmyadmin経由でphpmyadminにアクセスできます。

後で、/etc/Apache2/sites-available/ファイルを追加して.confvirtualhostを有効にしました。有効にしたサイトには、<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>
2
Refiner

誰かが私が間違って試したことを教えてもらえますか?

例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>
2
Anaksunaman