前言
#要理解瀏覽器與apache之間的連線逾時問題,需要先明白http的keep -alive屬性。先簡單介紹keep-alive,可以從網路上找到更詳細的介紹。
瀏覽器和apache都是基於http協定的。而http協定中的keep-alive屬性通俗的解釋就是瀏覽器和apache第一次建立TCP連接,傳輸完數據不會立刻斷開這個TCP連接,而是繼續等待下一個請求。維持一段時間(keep-alive-time)後才會斷開連線。
下面要做個測試,查看apache在開啟keep-alive支援和關閉keep-alive支援時候的TCP連線狀態。
服務端 | 虛擬機上的Centos |
用戶端 | 本機上IE6瀏覽器 |
服務端位址 | 192.168.212.128 |
客戶端位址 | 192.168 .212.1 |
存取的檔案test.html | <meta> <link> <script></script> 您知道吗?A处和B处的色值是一样的。<br> <img src="/static/imghwm/default1.png" data-src="./main.jpg" class="lazy" alt="php如何與apache連接逾時" > |
首先關閉apache的keep-alive參數,開啟httpd.conf。
開啟瀏覽器存取apache。使用netstat指令查看連線狀態。
#netstat –nt|grep –i ’80′
可以看到四個連接,因為本地存取速度很快,只能抓取到TIME_WAIT得狀態。那一個test.html網頁為什麼會有四個連線呢?
看test.html的內容可以知道有:
1,main.css 檔案
2,mian.js 檔案
3,main. jpg 圖片
4,本身的test.html檔
所以有四個連接。
再看看關閉apache的keep-alive支援後的連線狀態。
重啟伺服器,瀏覽器存取test.html,在查看連線。
#service httpd restart
#netstat –nt|grep –i ’80′
可以看到只有一個連接。而且這個連線狀態是ESTABLISHED。我們在httpd.conf中設定了keepAlliveTimeout=15,所以連線建立後15秒後才關閉連線。
測試得到的結論
如果關閉apache的keep-alive屬性,訪問的頁面中的(上例中test.html)所有文件,包括js, css,圖片等等都要建立新的TCP連線。有多少引用檔案就建立多少個連線。具體多少個文件可以使用火狐的BUG工具查看。
上圖中最下面的11個請求就是該網頁中需要引用的檔案數。
如果開啟apache的keep-alive屬性,訪問的頁面中的(上例中的test.html)所有文件,包括js,css,圖片等等只建立一個TCP連接,按照順序傳輸所有數據。所有資料傳輸完等待KeepAliveTimeout =15秒後再關閉該連線。
網路上看到的參考:
假如當前Apache每秒回應100個用戶訪問,KeepAliveTimeOut=5,此時httpd進程數就是100* 5=500個(prefork模式),一個httpd進程消耗5M記憶體的話,就是500*5M=2500M=2.5G,誇張吧?當然,Apache與Client只進行了100次TCP 連線。如果你的記憶體夠大,系統負載不會太高,如果你的記憶體小於2.5G,就會用到Swap,頻繁的Swap切換會加重CPU的Load。
現在我們關掉KeepAlive,Apache仍然每秒響應100個用戶訪問,因為我們將圖片、js、css等分離出去了,每次訪問只有1個request,此時httpd的進程數是100*1=100個,使用記憶體100*5M=500M,此時Apache與Client也是進行了100次TCP連線。性能卻提升了太多。
瀏覽器的連線逾時
每個瀏覽器都有預設的連線逾時時間。 IE6的預設時間為60分鐘。
這個值可以透過註冊表修改。
1,開啟登錄:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings。
2,增加一個DWORD值的項,命名為ReceiveTimeout,設定1000。該值的預設單位是毫秒,這裡設定的1秒時間。
從瀏覽器開始造訪網站開始,1秒後關閉連線。 (設的值有點極端,但是方便展示)。
重啟瀏覽器訪問網站。
服務端 | 虛擬機上的Centos |
用戶端 | 本機上IE6瀏覽器 |
服務端位址 | 192.168.212.128 |
客戶端位址 | 192.168 .212.1 |
所存取的檔案index.php | #<?php echo date('H:i:s',time()); sleep(10); ?> |
可以看到浏览器显示找不到服务器,但是访问刚才的test.html是可以访问的。
访问index.php显示连接不成功。因为index.php中sleep(10)延迟10秒的函数。而IE6的连接超时时间为1秒。所以就连接失败了。
访问test.hml可以成功连接。因为是访问本地服务器,传输速度很快,在IE6的1秒超时时间之内就已经传完全部数据了。
测试得到的结论
IE6的默认连接超时时间为60分。可以通过注册表中ReceiveTimeout值修改该值。
实际作用:使用IE6往服务器上传一个大文件,如果上传时间超过60分钟就会断开连接。
这也是为什么有些网站要专门开发active插件来实现IE6的大文件上传了。用户是不会主动修改这个值的。
apache的连接超时
看apache的配置文件可以看到有个timeout值。
有人会以为这个是apache的连接超时参数。
我们把它设置为timeout =1访问index.php。
看到还是可以访问的,那么这个timeout不是apache的连接超时时间。timeout是apache收到上一个请求和后面一个请求到来之间的最大值。您可以查看浏览器与apache通讯中的TCP连接状态迁移更加准确的明白timeout的值。
那么apache的连接超时时间到底是多少?是什么参数控制呢?
答:apache没有最大连接超时时间,也没有控制连接超时的参数。因为apache是在TCP/IP模型的应用层。
那么服务端是什么控制了浏览器和apache之间的最大连接超时时间呢?
答:linux
测试得到的结论
apache没有最大连接超时时间,也没有控制连接超时的参数。因为apache是在TCP/IP模型的应用层。
linux的连接超时
在linux的系统配置中可以到关于连接时间的有这两个参数。
#sysctl -a|grep time
一个是限制FIN_WAIT状态的超时时间,
一个是限制keepalive连接的超时时间。
结论
linux的默认配置下也没控制浏览器和apache连接超时的参数,只有通过linux的防火墙才能控制apache和浏览器之间连接的最大连接时间。
PHP的操作超时
打开php.ini可以看到两个参数。
max_execution_time:一个php程序执行的最长时间。
max_input_time:一个表单提交的最长时间。
这两个值很重要。我们做个测试:
服务端 | 虚拟机上的Centos |
客户端 | 本机上IE6浏览器 |
服务端地址 | 192.168.212.128 |
客户端地址 | 192.168.212.1 |
访问的文件index.php | <?php for($i = 0;;$i++){ echo date('H:i:s',time()); echo '<br/>'; flush(); } ?> |
max_execution_time | 30 |
访问index.php。
<?php for($i = 0;;$i++){ echo date('H:i:s',time()); echo '<br/>'; flush(); } ?>
30秒后IE死掉了。为什么呢?答:index.php中有死循环。执行到max_execution_time=30秒后php停止了操作。浏览器这边死掉了。
总结
如果从头到尾看完上面的内容,会得出如下结论:
1,在客户端,浏览器控制着浏览器和apache的最大连接超时时间。
2,在服务端(不打开防火墙),linux和apache都不能控制最大连接超时时间,只有php或者mysql等运行程序通过控制自身的执行时间来控制浏览器和apache的最大连接超时时间。
3,在服务端(打开防火墙),linux上的防火墙和php,mysql等共同控制浏览器和apache的最大连接超时时间。
4,这里的浏览器和apache的最大连接超时时间包括TCP连接中的所有状态超时时间的综合。
更多Apache的相关技术文章,请访问Apache教程栏目进行学习!
以上是php如何與apache連接逾時的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Apache在Web開發中的作用包括靜態網站託管、動態內容服務、反向代理與負載均衡。 1.靜態網站託管:Apache配置簡單,適合託管靜態網站。 2.動態內容服務:通過與PHP等結合,提供動態內容。 3.反向代理與負載均衡:作為反向代理,分發請求到多個後端服務器,實現負載均衡。

Apache并未走向没落。1.Apache仍是稳定可靠的选择,持续更新如2.4版本的性能优化和安全增强。2.它支持广泛的模块化扩展,配置简单,但高并发时不如Nginx高效。3.在实际应用中,Apache通过mod_rewrite等模块提升SEO性能。4.Apache可与Docker等现代技术融合,提升部署和管理效率。5.通过调整配置和使用优化模块,Apache的性能可显著提升。

配置和管理ApacheHTTPServer的步驟包括:1.基本配置:設置服務器名稱、監聽端口和文檔根目錄。 2.高級配置:設置虛擬主機、啟用SSL加密和URL重寫。 3.性能優化:調整KeepAlive設置和使用緩存。 4.解決常見問題:檢查配置文件語法和優化服務器參數。通過這些步驟,你可以確保Apache服務器穩定運行並優化其性能。

ApacheHTTPServer的主要功能包括模塊化設計、虛擬主機配置和性能優化。 1.模塊化設計通過加載不同模塊實現功能,如SSL加密和URL重寫。 2.虛擬主機配置允許在一個服務器上運行多個網站。 3.性能優化通過調整參數如ServerLimit和KeepAlive提升性能。

Apache通過模塊化設計、與新技術兼容以及性能優化保持適應性和生命力。 1.模塊化設計允許定制功能,如mod_rewrite用於URL重寫。 2.兼容雲計算和容器化技術,如在Docker中運行。 3.引入新模塊如mod_http2支持HTTP/2協議。 4.通過配置文件調整和啟用緩存進行性能優化。

ApacheHTTPServer仍然受歡迎的原因是其模塊化架構、虛擬主機支持和高性能與可靠性。 1)模塊化架構允許通過模塊擴展功能,如mod_rewrite和mod_ssl。 2)虛擬主機功能支持在一個服務器上託管多個網站。 3)多進程模型確保在不同環境下的高性能和穩定性。

Apache是一種開源Web服務器軟件,廣泛用於網站託管。安裝步驟:1.在Ubuntu上使用命令行安裝;2.配置文件位於/etc/apache2/apache2.conf或/etc/httpd/conf/httpd.conf。通過模塊擴展,Apache支持靜態和動態內容託管,優化性能和安全性。

Apache仍在被廣泛使用,但市場份額已從2010年的50%以上降至2023年的不到30%。它的優勢在於穩定性和可靠性,適合需要這些特性的企業級應用;劣勢是多進程模型在高並發下資源消耗大,Nginx在高並發處理上表現更佳。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。