nginx常見面試題1


Nginx是網頁服務器運維人員不可能繞開的一個彎,剩下幾個比較高危的面試范圍是:linux基礎、網絡知識基礎、python,或許還會有zabbix等監控工具。這里先說nginx,后面幾個肯定也會寫。

 

試題

【試題1】缺省安裝的 nginx + php-fpm 環境,假設用戶瀏覽一個耗時的網頁,但是卻在服務端渲染頁面的中途關閉了瀏覽器,那么請問服務端的 php 腳本是繼續執行還是退出執行?

【解答】正常情況下,如果客戶端client異常退出了,服務端的程序還是會繼續執行,直到與IO進行了兩次交互操作。服務端發現客戶端已經斷開連接,這個時候會觸發一個user_abort,如果這個沒有設置ignore_user_abort,那么這個php-fpm的程序才會被中斷。

拓展閱讀:http://www.cnblogs.com/yjf512/p/5362025.html?foxhandler=RssReadRenderProcessHandler

 

【試題2】首先,Nginx 日志格式中的 $time_local 表示的是什么時間?請求開始的時間?請求結束的時間?其次,當我們從前到后觀察日志中的 $time_local 時間時,有時候會發現時間順序前后錯亂的現象,請說明原因。

【解答】$time_local:在服務器里請求開始寫入本地的時間,因為請求發生時間有前有后,所以會時間順序前后錯亂。

 

【試題3】在Nginx+PHP環境中,Web錯誤日志里偶爾會出現如下錯誤信息:「recv() failed (104: Connection reset by peer) while reading response header from upstream」,請分析可能的原因是什么。

【解答】遇到這種情況,第一解決方法是重啟php服務,service php5-fpm restart,但是這個治標不治本,相對治本的方法是把php的pm.max_requests值改大一點,比如500;第二個方法,修改php-fpm的request_terminate_timeout,把值改成=0。

 

這個情況要看后端的php,要么是鏈接不上,要么是php服務掛了,要么就是鏈接超時。

worker數不夠掛掉就會504,worker處理超時就會502。

拓展閱讀:http://serverfault.com/questions/543999/nginx-errors-recv-failed-104-connection-reset-by-peer-while-reading-respon

 

【試題4】已知Nginx和PHP-FPM安裝在同一台服務器上,Nginx連接PHP-FPM有兩種方式:一種是類似127.0.0.1:9000的TCP socket;另一種是類似/tmp/php-fpm.sock的Unix domain socket。請問如何選擇,需要注意什么。

【解答】Unix domain socket的流程不會走到TCP 那層,直接以文件形式,以stream socket通訊。如果是TCP socket,則需要走到IP層。說的通俗一點,追求可靠性就是tcp(需要占用一個端口,更穩),追求高性能就是Unix Socket(不需要占用端口,更快)。

拓展閱讀:https://blog.linuxeye.com/364.html

http://www.cnxct.com/default-configuration-and-performance-of-nginx-phpfpm-and-tcp-socket-or-unix-domain-socket/ (這篇文章強烈推薦,寫得特別好!)

 

【試題5】在Nginx中,請說明Rewrite模塊里break和last的區別。

【解答】官方文檔的定義如下:

last:停止執行當前這一輪的ngx_http_rewrite_module指令集,然后查找匹配改變后URI的新location;
break:停止執行當前這一輪的ngx_http_rewrite_module指令集;

千言萬語舉個例子:

location /test1.txt/ {

        rewrite /test1.txt/  /test2.txt break;

}

        location ~ test2.txt {
        return 508;
}


使用break會匹配兩次URL,如果沒有滿足項,就會停止匹配下面的location,直接發起請求www.xxx.com/test2.txt,由於不存在文件test2.txt,則會直接顯示404。
使用last的話,會繼續搜索下面是否有符合條件(符合重寫后的/test2.txt請求)的location,匹配十次,如果十次沒有得到的結果,那么就跟break一樣了。返回上面的例子,/test2.txt剛好與面location的條件對應上了,進入花括號{}里面的代碼執行,這里會返回508。(這里的508是我自己隨便設定的)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM