ホームページ  >  記事  >  バックエンド開発  >  外部ネットワークを開くときに PHP が内部ネットワークを開けない場合はどうすればよいですか?

外部ネットワークを開くときに PHP が内部ネットワークを開けない場合はどうすればよいですか?

PHPz
PHPzオリジナル
2023-04-05 14:34:521193ブラウズ

最近、多くの PHP 開発者を悩ませている問題があります。それは、外部ネットワークからはイントラネットにアクセスできるが、内部ネットワークからはアクセスできないということです。この問題は難しいかもしれませんが、解決するのはそれほど難しいことではありません。

まず、この問題の原因を理解する必要があります。内部ネットワークから外部ネットワークにアクセスする場合、通常はNAT変換を介してアクセスします。 NAT 変換では、外部ネットワーク IP を内部ネットワークにマッピングするだけでなく、要求されたポートもマッピングします。ただし、外部ネットワークから内部ネットワークにアクセスする場合、内部ネットワークのIPはプライベートIPであるため、外部ネットワークから直接アクセスすることはできません。したがって、リバース プロキシを実行して、外部ネットワークが内部ネットワークにアクセスできるようにする必要があります。

この問題を解決する方法を見てみましょう。外部ネットワークのドメイン名が「www.example.com」、内部ネットワーク IP が「192.168.1.100」であると仮定すると、外部ネットワークにリバース プロキシ サービスを展開することでこの問題を解決できます。これは、Nginx や Apache などの一般的なリバース プロキシ サーバーを使用して実現できます。

Nginx では、Nginx 構成ファイルを編集することでリバース プロキシを実装できます。まず、次のコードを Nginx 構成ファイルに追加します。

server {
    listen 80;
    server_name www.example.com;

    location / {
        proxy_pass http://192.168.1.100:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

このコードの機能は、「www.example.com」へのすべてのアクセス要求をイントラネット内の IP にプロキシすることです。このうち、proxy_pass パラメーターは、イントラネットの IP アドレスとポート番号を指定します。 proxy_set_header パラメーターは、プロキシ時のコードをより正確にするためにヘッダー情報を設定するために使用されます。具体的な情報については、Nginx 公式ドキュメントを参照してください。

Apache では、mod_proxy モジュールを使用してリバース プロキシを実装できます。まず、httpd.conf で mod_proxy モジュールを有効にする必要があります。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

次に、構成ファイルに次のコードを追加します。

<VirtualHost *:80>
    ServerName www.example.com
    
    ProxyRequests Off
    ProxyPass / http://192.168.1.100:80/
    ProxyPassReverse / http://192.168.1.100:80/
    ErrorLog logs/reverse-proxy-error.log
    CustomLog logs/reverse-proxy-access.log common
</VirtualHost>

このコードの機能は、次のコードのすべてのペアを削除することです。 「www.example.com」アクセス要求は、イントラネット内の IP にプロキシされます。このうち、ProxyPassはイントラネット内のIPアドレスとポート番号を指定し、ErrorLogCustomLogはエラーログとアクセスログのパスを設定するために使用されます。それぞれ。具体的な情報については、Apache 公式ドキュメントを参照してください。

要約すると、PHP が外部ネットワークでも内部ネットワークでも開けないという問題を解決するには、外部ネットワークにリバース プロキシ サービスを展開する必要があります。リバースプロキシを設定することで、すべての外部ネットワークリクエストを内部ネットワークにプロキシすることができ、内部ネットワークと外部ネットワーク間の通信を実現します。

以上が外部ネットワークを開くときに PHP が内部ネットワークを開けない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。