今天在一個服務器上部署一個webserver的時候,
提示我bind端口失敗,
我習慣性的用netstat看了下,沒有被占用啊!
把問題分享出來后,給力的同事們搜索到了ip_local_port_range這個東西
這個東西對應的是/proc/sys/net/ipv4/ip_local_port_range文件
我打開后發現它的內容是:
1024 65000
然后我查了一下,這兩個數字就是規定了一個端口范圍
而這個文件規定了所謂的“臨時端口”的可用端口范圍
比如一個程序通過socket請求了本機外的一個服務,
以為內socket的要求是通信的雙發都是一個ip加一個端口的,
我們在請求時,只會指定要請求的ip和端口,并沒有指定本機的,
那這時按照Linux的策略,是自動分配一個臨時端口的
而這個臨時端口可取的范圍就是這個ip_local_port_range
ip_local_port_range還有一個隱藏的屬性,就是這個臨時端口范圍內的端口,不能被bind
這也就是我一開始遇到的問題的原因了
當我想編輯這個文件來修改范圍時,發現修改后時無法保存的
然后搜索了一下,說要永久修改,可以:
vim /etc/sysctl.conf
修改其中的net.ipv4.ip_local_port_range
保存后執行sysctl -p讓其生效