web-dev-qa-db-ja.com

Ubuntu 14.04にアップグレードした後、Apacheが機能しないのはなぜですか?

[aman@aman-Inspiron-1440:~$ Apache2
[Mon Apr 21 17:36:38.019213 2014] [core:warn] [pid 4134] AH00111: Config variable ${Apache_LOCK_DIR} is not defined
[Mon Apr 21 17:36:38.019345 2014] [core:warn] [pid 4134] AH00111: Config variable ${Apache_PID_FILE} is not defined
[Mon Apr 21 17:36:38.019370 2014] [core:warn] [pid 4134] AH00111: Config variable ${Apache_RUN_USER} is not defined
[Mon Apr 21 17:36:38.019385 2014] [core:warn] [pid 4134] AH00111: Config variable ${Apache_RUN_GROUP} is not defined
[Mon Apr 21 17:36:38.019414 2014] [core:warn] [pid 4134] AH00111: Config variable ${Apache_LOG_DIR} is not defined
[Mon Apr 21 17:36:38.028756 2014] [core:warn] [pid 4134] AH00111: Config variable ${Apache_LOG_DIR} is not defined
[Mon Apr 21 17:36:38.029032 2014] [core:warn] [pid 4134] AH00111: Config variable ${Apache_LOG_DIR} is not defined
[Mon Apr 21 17:36:38.029056 2014] [core:warn] [pid 4134] AH00111: Config variable ${Apache_LOG_DIR} is not defined
AH00526: Syntax error on line 74 of /etc/Apache2/Apache2.conf:
Invalid Mutex directory in argument file:${Apache_LOCK_DIR}

これ/etc/Apache2/Apache2.confファイルの内容です。

36
Amandeep Singh

この問題が発生しました:原因はファイルにあります

/etc/Apache2/sites-available/000-default.conf 

ルートが変更された場所:

アップグレード前= /var/www
アップグレード後= /var/www/html

このファイルを編集して修正します

Sudo gedit /etc/Apache2/sites-available/000-default.conf

Apacheを再起動します

Sudo service Apache2 restart
31
TrackGmao

Apacheが私のために働いていたにもかかわらず、私はこの問題を抱えていました。簡単にしたかっただけです

$ /usr/sbin/Apache2 -V

SERVER_CONFIG_FILEの値を見つけます。これはApache2を起動する方法ではないため、OPがポストするエラーで失敗します。迅速で汚い回避策は、最初に不足しているenvvarを設定することです。

$ source /etc/Apache2/envvars
$ /usr/sbin/Apache2 -V

これにより、Apache_LOCK_DIR変数が設定され、すべて正常です(-D SERVER_CONFIG_FILE="Apache2.conf")。

50
lane

症状と解決策

多くのQ&A Webサイトまたはフォーラムでは、人々は症状と実際の原因を混同しています。 ubuntuサーバーを13.10から14.04.1にアップグレードしたところ、OPで説明されているまったく同じ症状が発生しました。
1- Apacheは動作していないようです。 2-未定義のApache構成変数。 3- OPが言及した構文エラー。

問題は、これらの症状のすべてが実際の問題と実際に密接な関係があるわけではなく、最善を尽くして助けようとする人々の注意をそらすだけであるということです。

さまざまなルートの問題により、管理者がほぼ同じ説明でこのようなサイトにアクセスする可能性があります。「OSをアップグレードしましたが、現在Apacheは動作していません...」

特定の原因

OPとまったく同じ見かけの症状があるので、この質問に惹かれました。残念ながら、私の問題の本当の根本原因に対する有効なヒントを含む唯一の答えは、1の担当者がuser1469291によって投稿された、ダウン投票(-1)でした。そのため、問題の明確な説明(およびそれによって解決策)が見つかるまで、他のWebサイトをさらに検索しました。

以下の解決策はOPの本当の問題を解決しないかもしれませんが、私と同じ理由でこの質問に惹かれるかもしれない他の人を助けると確信しています。

/etc/Apache2/Apache2.confには以下が含まれます。

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual Host configurations:
IncludeOptional sites-enabled/*.conf

つまり、.confで終わる/ etc/Apache2/sites-enabled /内のサイト構成ファイルのみがロードされます。そのディレクトリ内の古いシンボリックリンクは無視されます。

以前は単にサイト対応/ *でした。そのため、単にww1.example.com、ww2.example.comなどと名前を付けた仮想ホスト構成ファイルはすべて、以前は動作していましたが、アップグレード後に突然、最初は不可解に動作を停止しました。

したがって、上記のディレクティブを変更してApacheをリロードするか、または私がしたように、sites-enabled /の古いシンボリックリンクをすべて手動で削除し、sites-available /のすべてのファイルの名前を変更してサフィックス.confを追加してから、それぞれを再度有効にします個別にサイト。

さらに、Apache.confのデフォルトディレクティブはより厳密です。

<Directory />
  Options FollowSymLinks
  AllowOverride None
  Require all deny
</Directory>
<Directory /var/www/>
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>

したがって、仮想サイトを/ home/user/somewhereにホストする場合は、ディレクティブを適切にオーバーライドしてください。

14
augustin

あなたの問題をよく見ると、あなたはただApache2を実行しています。 UbuntuでApacheを起動するには、次のコマンドを実行します。

Sudo Apache2ctl start

Apacheの構成は複数のファイルに分割され、それらのファイルの1つは環境変数です。 Apache2だけを実行している場合、これらの変数は設定されません。

Apache2ctlスクリプトは、Apache2 -k startでApacheを起動する前に変数をロードします(必要に応じて他の処理も行います)。

6
Dan

設定を編集します:Sudo leafpad /etc/Apache2/Apache2.conf

# Include the virtual Host configurations:

#before upgrade = 
IncludeOptional sites-enabled/*
#after upgrade = 
/IncludeOptional sites-enabled/*.conf

またはファイルを削除します。

4
Mauro Leites

augustinの answer は、12.04 LTSから14.04 LTSへのサーバーアップグレード後にすべての仮想ホストが消えたときに機能しました。もしそうするという評判があれば、賛成します。

次のコマンドは、.conf接尾辞を/etc/Apache2/sites-enabled内のまだないすべてのシンボリックリンクに追加します。

Sudo find /etc/Apache2/sites-enabled -type l ! -name '*.conf' -exec rename 's/$/.conf/' {} \;

さらに、 mod_authz_HostAllow from/Deny from構文の使用からRequireへの変更がありました。 module( here は2.2ドキュメントのリンクです)。

次のコマンドは、Order allow, denyに続くAllow from allの一般的な使用法を編集して、代わりにRequire all grantedにします。

Perl -0777 -pi.bak -e 's/Order\s+allow\s*,\s*deny\s*\n\s*Allow\s+from\s+all/Require all granted/sg' /etc/Apache2/sites-available/* 
2
TobyLL

実際、docrootは/ var/wwwから/ var/www/htmlに正確で信頼できるものに変更されます。 do-release-upgradeスクリプトがdocrootを後退させないことは良くありません。

A)どちらも有効ですが、htmlはより一般的です。 CentOSはこの点で影響力があります。 「機能する」ページもより成熟しました。

B)/ var/www/htmlを使用する必要はありませんが、使用する場合は...

  • コンテンツを移行またはエイリアスする必要があります(推奨されません)。
  • 古い場所が参照されている場所を更新する必要があります。
  • 特にバックアップ/復元/カスタマイズスクリプト。

C)そして、ゼロから構築して移行する方が簡単かもしれません。

D)この症状は、envvarsがスコープ内にないため、Trusty、アップグレードの有無に関係なく、「Sudo Apache2 -k graceful」の場合に発生します。代わりに「Sudo Apache2ctl start/stop/restart」を使用してください。

1
mckenzm

私の場合:

  • /var/www/htmlサブフォルダーは既に存在しましたが、まだエラーが発生していました:AH00526: Syntax error on line 74 of /etc/Apache2/Apache2.conf
  • 私はすでにユーザールートでウェブサイトをホストすることを決めていました。 /home/{user}/sites/の代わりに/var/www/html
  • Apache 2.4.7を使用しています(Apache2 -vでバージョンを確認できます)

5つの簡単な手順で問題を解決した方法:

  1. /etc/Apache2/Apache2.confでは、169行目の後に次を追加しました。

    <Directory /home/{user}/sites/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    
  2. website.conf/etc/Apache2/sites-availableという仮想ホスト構成がデフォルトの000-default.confからコピーされ、次のようになっていることを確認しました。

    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName website.dev
        ServerAlias www.website.dev
        DocumentRoot /home/{user}/sites/website
    </VirtualHost>
    
  3. サイト(Sudo a2dissite website && Sudo a2ensite website)とサーバーをリロードし、最初のエラーはなくなりました。うわー!しかし、新しいものが出現しました:「AH00035:パスへのアクセスが拒否されました(ファイルシステムパス '/ home/{user}/sites')。パスのコンポーネントに検索権限がないためです」。これはステップ4で解決しました。

  4. 新しい問題は権限が原因であったため、websiteフォルダーに至る各ディレクトリをchmod 755に設定しました。ひとつひとつ! homeフォルダー、{user}フォルダー、sitesフォルダー、および私のWebサイトフォルダー

  5. website.devでブラウザを更新した後、すべてが正常にロードされました!

P.S。website.devファイルに/etc/hostsを既に設定していました。

ボーナスヒント:特定のフォルダーの権限を確認するには、stat -c %a /path/to/file/or/folderコマンドを使用できます。ディレクトリのすべての部分の権限を確認するには、namei -m /path/to/final/folderを使用します。

0
jhbsk