問題現象:zend studio xdebug 57% waiting for xdebug session
作者本人的開發環境通常是windows宿主機器+vmare Linux虛擬機器,通過linux的samba功能將虛擬機器下的目錄共用給windows做磁碟映射,這樣的開發環境可以快速的在windows下實現完整的Linux代碼調試環境。
今日在虛擬機器下給php裝xdebug來調試代碼時,按照網上的步驟對xdebug做了配置,因為我的虛擬機器環境的網路是走NAT的。
linux虛擬機器的網段是192.168.2.0/255.255.255.0 ,網關為192.168.2.2.
windows宿主機器的網段是192.168.1.0/255.255.255.0
在windows下瀏覽器訪問虛擬機器下的http服務時都是通過vmare 的nat虛擬網卡轉寄過去,此網卡綁定的p為192.168.2.1。那麼問題就來了,虛擬機器下擷取到的來路請求ip都是192.168.2.1,擷取到xdebug的調試請求後轉寄資訊給zend studio時網路卻受阻了。我在設定的xdebug連接埠號碼是19000.如下如所示:
可以從圖中看到我們的請求在發送給192.168.2.1 的19000連接埠時,但是這是卡住的原因是syn_sent的過程網路不通,導致php無法串連到windows宿主機下的zend studio。只要問題定位到就好辦了,最快的解決方案就是開啟iptables的連接埠轉寄,將發送到192.168.2.1 連接埠19000的資料全部轉寄給宿主機IP:192.168.1.105。
我們用root配置如下iptabless規則:
iptables -t nat -A OUTPUT -p tcp -d 192.168.2.1 --dport 19000 -j DNAT --to 192.168.1.105:19000
這樣我們的zend studio就可以輕鬆收到php發來的xdebug調試資料了。
用NAT網路模式的虛擬環境比較蛋疼,如果換成橋接模式讓宿主機和虛擬機器同一個網段,那麼問題迎刃而解。