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; } }
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
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>
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!