Apakah yang perlu saya lakukan jika PHP tidak dapat membuka rangkaian dalaman semasa membuka rangkaian luaran?

PHPz
Lepaskan: 2023-04-05 14:56:02
asal
1162 orang telah melayarinya

Terdapat masalah yang menyusahkan ramai pembangun PHP baru-baru ini, iaitu intranet boleh diakses dari rangkaian luaran, tetapi tidak boleh diakses dari rangkaian dalaman. Masalah ini boleh menjadi rumit, tetapi ia tidak begitu sukar untuk diselesaikan.

Pertama sekali, kita perlu memahami punca masalah ini. Apabila kami mengakses rangkaian luaran daripada rangkaian dalaman, kami biasanya mengaksesnya melalui penukaran NAT. Penukaran NAT bukan sahaja akan memetakan IP rangkaian luaran ke rangkaian dalaman, tetapi juga memetakan port yang diminta. Walau bagaimanapun, apabila mengakses rangkaian dalaman dari rangkaian luaran, kerana IP rangkaian dalaman adalah IP peribadi, ia tidak boleh diakses secara langsung oleh rangkaian luaran. Oleh itu, kita perlu melakukan proksi terbalik untuk membenarkan rangkaian luaran mengakses rangkaian dalaman.

Mari kita lihat cara untuk menyelesaikan masalah ini. Katakan nama domain rangkaian luaran kami ialah "www.example.com" dan IP rangkaian dalaman ialah "192.168.1.100", maka kami boleh menyelesaikan masalah ini dengan menggunakan perkhidmatan proksi terbalik pada rangkaian luaran. Ini boleh dicapai dengan menggunakan pelayan proksi terbalik biasa seperti Nginx atau Apache.

Pada Nginx, kami boleh melaksanakan proksi terbalik dengan mengedit fail konfigurasi Nginx. Mula-mula, tambahkan kod berikut pada fail konfigurasi 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;
    }
}
Salin selepas log masuk

Fungsi kod ini adalah untuk memproksi semua permintaan akses kepada "www.example.com" kepada IP dalam intranet. Antaranya, parameter proxy_pass menentukan alamat IP dan nombor port dalam intranet. proxy_set_header Parameter digunakan untuk menetapkan beberapa maklumat pengepala untuk menjadikan kod lebih tepat semasa membuat proksi. Untuk maklumat khusus, sila rujuk dokumentasi rasmi Nginx.

Pada Apache, kami boleh menggunakan modul mod_proxy untuk melaksanakan proksi terbalik. Mula-mula, anda perlu mendayakan modul mod_proxy dalam httpd.conf:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
Salin selepas log masuk

Kemudian, tambah kod berikut dalam fail konfigurasi:

<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>
Salin selepas log masuk

Fungsi kod ini adalah untuk menukar semua pasangan permintaan akses " www.example.com" diproksikan kepada IP dalam intranet. Antaranya, ProxyPass menentukan alamat IP dan nombor port dalam intranet, dan ErrorLog dan CustomLog digunakan untuk menetapkan laluan log ralat dan log akses masing-masing. Untuk maklumat khusus, sila rujuk dokumentasi rasmi Apache.

Untuk meringkaskan, untuk menyelesaikan masalah bahawa PHP tidak boleh dibuka pada rangkaian luaran dan tidak boleh dibuka pada rangkaian dalaman, anda perlu menggunakan perkhidmatan proksi terbalik pada rangkaian luaran. Dengan mengkonfigurasi proksi terbalik, kami boleh memproksi semua permintaan rangkaian luaran ke rangkaian dalaman, dengan itu merealisasikan komunikasi antara rangkaian dalaman dan rangkaian luaran.

Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika PHP tidak dapat membuka rangkaian dalaman semasa membuka rangkaian luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!