1

従来のサードパーティ ホストから提供される予定だった AMP Web アプリケーションを作成しました。

私たちが終了したとき、クライアントは、オフィスネットワーク内のサーバーで内部的にホストすることを決定しました. アプリケーションはスタッフ メンバーのみが使用できるようになっていますが、スタッフ メンバーはオフサイトにいることがよくあります。私は、Windows Server 2003 を実行するサーバーを少なくとも 1 台使用するネットワークのセットアップには関与していませんでした。私が見たクライアント マシンは XP でした。

サーバー 2003 マシンに Apache、MySQL、および PHP をセットアップし、アプリケーションをインストールしました。アプリケーションは CodeIgniter フレームワーク上に構築されているため、base_url を内部 IP (192.168...) に設定し、ネットワーク内からテストしました。すべてがうまくいきました。

次に、ネットワーク担当者に、Apache 用にポート 80 を開くように依頼しました。base_url を外部 IP に設定し、自宅で (外部 IP を Web アドレスとして使用して) テストしたところ、正常に動作しました。

ただし、ネットワーク内から外部 IP を使用してアプリケーションにアクセスしようとすると、接続できません。base_url をネットワーク IP にリセットでき、ネットワーク IP を使用してアクセスできますが、外部接続時にアプリケーションが失敗します (アプリケーション全体で使用される base_url が内部 IP を指しているため)。

CodeIgniter に base_url を決定させる (変数を空の文字列のままにする) ことができると仮定しますが、外部 IP がネットワーク内で失敗する理由を突き止め、それを修正しようとします。

私たちが使用しているサーバーは AMP スタック専用ではありません (実際には、IIS を使用していたはずのインターネットにブロードキャストする他のアプリケーションが少なくとも 1 つあり、オフィス スキャナーに使用される FTP サーバーもあります)。そこにいくつかの競合があるかもしれません。

私は Windows ネットワークについてほとんど知りません。簡単な検索で、これは NAT が原因である可能性があることが示唆されましたが、回避策はありませんでした。

彼らのネットワーク担当者は何の提案もせず、すべてうまくいくはずだと言いました。

ネットワーク内のユーザーが外部 IP を使用して Apache サーバーにアクセスできるようにすることは可能ですか。

ティア

4

2 に答える 2

2

クライアントの NAT ルーターは、パケット内の送信元および宛先 IP アドレスを書き換えた後80、ポート を持つ外部 IP の外部インターフェイスに到着したパケットを内部マシンport に転送するように構成されています。80

ネットワーク内から外部 IP アドレスに接続しようとすると、ルーターの内部インターフェイスであるマシンのデフォルト ルートにルーティングされます。このインターフェイスは、パケットをネットワークに転送するように構成されていません

すべての IP アドレスでリッスンするようにアプリケーションを構成します。クライアントがいくつかのホスト名 (内部 IP アドレスと外部 IP アドレス) でサーバーを認識していることをサーバーが認識していることを確認してください。

ルーターの NAT ファイアウォール ルールを書き直して、内部インターフェイスのポート フォワーディングも実行できる場合がありますが、家庭や中小企業で一般的なオフザシェルの機器では、この作業は簡単ではありません。より高価な機器 (または自作の *BSD/Linux ルーター マシン) を使用すると、それほど労力をかけずにこれを行うことができますが、ルーターに不必要にトラフィックを追加することになります。

于 2012-01-02T01:10:51.800 に答える
0

これは Apache 関連ではなく、CI 関連でもありません。多くの場合、ネットワーク内から外部 IP アドレスに到達することは不可能です。

率直に言って、それがなぜなのか正確にはわかりません。NAT (ネットワーク アドレス変換) の仕組み、または少なくともその実装方法に関連していることは知っています。

この理由の詳細な概要については、 serverfaultでこの質問をする必要があります。あなたがそれに対処しなければならない単なるプログラマーである場合、NAT は通常、内側から外側へ、および外側から内側へのみ機能し、内側から内側へは機能しないことを受け入れてください。

質問の解決策の1つについてはすでに言及しました-使用しないでくださいbase_url。サーバーを外部 IP アドレス (会社の IP ではなく、データセンターなど) で実行することもできます。

于 2012-01-02T01:07:01.597 に答える