web-dev-qa-db-ja.com

異なるポートApache2を実行しているセカンダリサーバーのリソースにアクセスする

現在、Raspberry Piのメインサーバー(32 GB)と、ファイルストレージサーバーとして実行されているセカンダリサーバー(4 TB)を実行しています。両方のサーバーは、Apache2がインストールされたDebian Linuxを実行しています。次のコードを使用して、セカンダリサーバーからメインサーバーにPHP出力を取り込むことに成功しました。

メインサーバー:

<?php
    $results = file_get_contents('http://example.org:700/handle.php');
    echo $results;
?>

セカンダリサーバー

<?php
    header('Access-Control-Allow-Origin: http://example.org');

    //Rest of code
?>

だから私は、メインサーバーが写真を表示し、セカンダリサーバーからmp3/wavを再生できるという問題に来ましたが、私の場合、FLACでは機能しません(javascriptコードが少しあります)。 Apache2.confの有用な情報を次に示します。

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin: "http://example.org"
    Header set Access-Control-Allow-Credentials: true
    Header set Access-Control-Expose-Headers: "Content-Length"
    Header set Access-Control-Allow-Methods: "POST, GET, PUT, OPTIONS, DELETE, HEAD"
    Header set Access-Control-Allow-Headers: "Content-Length"
</IfModule>

今、私はGoogle Chromeからこのエラーを受け取ります:

XMLHttpRequest cannot load http://example.org:700/song.flac. Request header field Range is not allowed by Access-Control-Allow-Headers in preflight response.

2つのサーバー間のすべてのトラフィックをセキュリティで保護し、XMLHttpRequestエラーを発生させないようにするだけです。この機能を実現するために設定ファイルで変更できるものはありますか?

1
Typewar

これはこれを修正する方法です:

  1. Sudo nano /etc/Apache2/Apache2.conf

  2. このコードを下部に配置します。

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin: "http://example.org"
    Header set Access-Control-Allow-Credentials: true
    Header set Access-Control-Expose-Headers: "Content-Length"
    Header set Access-Control-Allow-Methods: "POST, GET, PUT, OPTIONS, DELETE, HEAD"
    Header set Access-Control-Allow-Headers: "Range"
</IfModule>
  1. 設定ファイルでヘッダーを有効にします:Sudo a2enmod headers

  2. エラーを確認してください:Sudo apachectl -k graceful

  3. SudoサービスApache2リロード

  4. SudoサービスのApache2の再起動

完了

1
Typewar