1. 程式人生 > >運維面試篇-----3.nginx基礎面試

運維面試篇-----3.nginx基礎面試

1.什麼是nginx?
Nginx (engine x) 是一個高效能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP伺服器
Nginx作為負載均衡伺服器:Nginx 既可以在內部直接支援 Rails 和 PHP 程式對外進行服務,也可以支援作為 HTTP代理伺服器對外進行服務。Nginx採用C進行編寫,不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多。
FastCGI,簡單的負載均衡和容錯
2.常見的模組化結構
模組化的結構。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。

3.五種負載均衡模式:
1.roudrobin 輪詢
2.weight 權重
3.ip——hash 解決session問題 i固定伺服器
4.url——hash請求分配不同機器
5.fair 根據後因愛響應時間來分發請求,響應時間短的分發請求多

4.中國大陸使用nginx網站使用者有:百度、京東、新浪、網易、騰訊、淘寶等

5.模組依賴性
gzip模組需要 zlib 庫
rewrite模組需要 pcre 庫
ssl 功能需要openssl庫

5.nginx特點:
    Ø 跨平臺:可以在大多數Unix like 系統編譯執行。而且也有Windows的移植版本。 
  Ø 配置異常簡單:非常的簡單,易上手。 
  Ø 非阻塞、高併發連線:資料複製時,磁碟I/O的第一階段是非阻塞的。官方測試能支援5萬併發連線,實際生產中能跑2~3萬併發連線數(得益於Nginx採用了最新的epoll事件處理模型(訊息佇列)。 
  Ø Nginx代理和後端Web伺服器間無需長連線; 
  Ø Nginx接收使用者請求是非同步的,即先將使用者請求全部接收下來,再一次性發送到後端Web伺服器,極大減輕後端Web伺服器的壓力。 
  Ø 傳送響應報文時,是邊接收來自後端Web伺服器的資料,邊傳送給客戶端。 
  Ø 網路依賴性低,理論上只要能夠ping通就可以實施負載均衡,而且可以有效區分內網、外網流量。 
  Ø 支援內建伺服器檢測。Nginx能夠根據應用伺服器處理頁面返回的狀態碼、超時資訊等檢測伺服器是否出現故障,並及時返回錯誤的請求重新提交到其它節點上。 
  Ø 採用Master/worker多程序工作模式 
  Ø 此外還有記憶體消耗小、成本低廉(比F5硬體負載均衡器廉價太多)、節省頻寬、穩定性高等特點

6.nginx優化:
1.nginx配置的優化:
唯一可調的時nginx.conf ,因為fastcgi是為nginx管理程序的工具,當客戶端請求到達nginx時,fastcgi選擇並連線一個程序,並將web server的返回資訊推送
從程序數優化 
》設定為web server開啟的最大worker程序數,設為auto
》設定每個worker程序的最大連線數,設定大點
從連結設定
》設定客戶端連結超時時間,伺服器在這個時間之後關閉連結,設定小點
》設定客戶端響應超時時間,倆次客戶端讀取操作的時間,設定小點
gzip壓縮形式的資料傳輸
》對於比較大的資料可以開啟gzip壓縮傳輸的形式傳輸
從快取設定
》指定快取的最大數目,快取的時間
2.從叢集架構優化
做nginx的lvs叢集,實現負載
**************************************88
1.  隱藏nginx header裡面的版本資訊


執行:curl –I 127.0.0.1會顯示nginx的版本資訊


隱藏操作:在http標籤內加入“server_tokenoff”引數


2.  更改原始碼隱藏軟體名稱及版本號


在nginx編譯安裝之前,先更改,之後再編譯安裝


cd /nginx-1.6.3/src/core


sed –n ’13,17p’ nginx.h裡面修改NGINX_VERSION


修改ngx_http_header_filter_module.c


sed –I ‘s#Server:nginx#Server:Apache#g’ ngx_http_header_filter_module.c


修改ngx_http_special_response.c


3 更改nginx預設使用者及使用者組(worker程序優化)


建立nginx使用者 useradd nginx–s/sbin/nologin –M


id nginx確認


在nginx.conf最外層上面配置usernginx;即可


也可以編譯的時候指定使用者


3.  讓worker程序使用普通使用者執行


為master服務降權:使用非root跑nginx master


注意不能用80特權埠,前端nginx反向代理轉埠在啟動的時候指定配置檔案


4.  配置nginx worker程序個數


nginx由master和worker程序組成,master程序相當於管理員,worker程序為使用者提供服務一般設定為cpu核數×2,用top按1檢視cpu數量


修改nginx.conf配置檔案第一行


worker_processes 4;


5.  根據cpu核數進行nginx程序優化


work_processes 4;


worker_cpu_affinity 0001 0010 0100 1000;


6nginx事件處理模型優化


nginx的連線處理機制在不同的作業系統上採用不同的IO模型,在linux下,nginx使用epoll的IO多路複用模型,windows下使用icop模型


具體配置:


events{


use epoll;


worker_connections 1024;


}


6.  調整nginx worker單個程序允許的客戶端最大連線數


這個值根據伺服器效能和程式的記憶體來指定(一個程序啟動使用的記憶體根據程式確定)


events{


use epoll;


worker_connections 201480;


}


這個引數是單個程序的最大連線數,實際最大連線數公式為:


Max_client=worker_processes*worker_connections


8配置nginx worker程序最大開啟檔案數


worker_rlimit_nofile 65535;


相當於系統ulimit –HSn,應該是總的


9開啟高效的檔案傳輸模式


引數在http標籤設定為:sendfileon;tcp_nopush on;(只有在sendfile開啟模式下有效


10設定連線超時時間


建立連線也是消耗資源的,我們一般斷掉那些連上的連結,但是不做事的


php網站建議短連結,java網站建議長連線


http標籤設定:


keepalive_timeout 60;


設定客戶端連線保持會話的超時時間,超過這個時間,伺服器會關閉該連結


tcp_nodelay on;


開啟tcp_nodelay,在包含keepalive引數才有效


client_header_timeout 15;


請求頭超時


client_body_timeout 15


請求主體超時


send_timeout 15;


指定響應客戶端超時時間,這個超時時間僅僅限於兩個連線活動之間的時間,如果超過這個時間,客戶端沒有任何活動,nginx將會關閉連線


11.上傳檔案大小限制


http{


client_max_body_size 10m;


}


12.fastcgi調優(配合php引擎動態服務)


cache讀取快取區


buffer寫入快取區


fastcgi是靜態服務和動態服務之間的一個介面


http {


#向fastcgi傳送請求的超時時間,這個值是指已經完成兩次握手後向fastcgi傳送請求的超時時間


fastcgi_send_timeout 240;


#指定連結到後端fastcgi的超時時間


fastcgi_connect_timeout 240;


#指定收fastcgi答應的超時時間,這個值是指已經完成兩次握手後接收fastcgi應答的超時時間、


fastcgi_read_timeout 240;


#指定讀取fastcgi應答第一部分需要用多大的緩衝區,這個值表示將使用1個64kb的


fastcgi_buffer_size 64kb的緩衝區讀取應答的第一部分(應答頭),可以設定為fastcgi_buffers選定的的緩衝區大小


fastcgi_buffers 64k;


#指定本地需要用多少和多大的緩衝區來緩衝fastcgi,如果一個php指令碼所產生的頁面大小為256kb,那麼會分配4個64kb的快取區來快取,如果頁面大於256kb,那麼大於256kb的部分會快取到fastcgi_temp指定的路徑中,但是這並不是好方法,因為記憶體中的資料處理速度大於硬碟,一般這個值應該為站點中php所產生的頁面大小的中間值,如果站點大部分指令碼產生的頁面大小為256kb,那麼可以把這個值設定為“816k ”464k“等


fastcgi_buffers 4 64k;


#建議設定為fastcgi_buffer的兩倍,繁忙時段的buffer


fastcgi_busy_buffers_size 128k;


##在寫入fastcgi_temp_path時將用多大的資料庫,預設值是fastcgi_buffers的兩倍,設定上述數值小時負載上來時可能報 502 badgateway


fastcgi_temp_file_write_size 128k;


##表示開啟fastcgi快取為其指定一個名稱,開啟快取非常有用,可以有效降低cpu的負載,並防止502錯誤


fastcgi_cache oldboy_nginx;


#用來指定應答程式碼的快取時間,例項中的值表示將2000和302應答快取一個小時,要和fastcgi_cache配合使用


fastcgi_cache_valid 200 302 1h;


#將301應答快取一天


fastcgi_cache_valic 301 1d;


#將其他應答快取為1分鐘


fastcgi_cache_valid any 1m;


##請求的數量


fastcgi_cache_min_uses 1;


#定義快取的路徑


fastcgi_cache_path


13.配置nginx gzip壓縮功能(重要)


使用的模組ngx_http_gzip_module(nginx)


mod_deflate模組(apaceh)


常用的壓縮物件:純文字(js,css,html),對於圖片,視訊,FLASH什麼的不壓縮,gzip——types引數控制,因為壓縮佔用cpu


對應引數的含義如下:


gzip on;


#開啟壓縮功能


gzip_min_length 1k;


#設定允許壓縮的頁面最小位元組數,頁面位元組數從header頭頂content-length中獲取,預設值0,不管頁面多大都進行壓縮,建議設定成大於1k,如果小於1k可能會越壓越大。


gzip_buffers 4 32k;


#壓縮緩衝區大小,表示申請4個單位為32k的記憶體作為壓縮結果流快取,預設值是申請與原始資料大小相同的記憶體空間來儲存gzip壓縮結果。


gzip_http_version 1.1;


##壓縮版本擁有設定http協議版本


gzip_comp_level 9;


###壓縮比例,用來指定gzip壓縮比 1最小9最大 建議設定為2.設定過大消耗cpu資源就多


gzip_types text/css test/xmlapplication/javascript;


##指定壓縮的型別,test/html型別總是會被壓縮


gzip_vary on;


##vary header支援,改選項可以讓前端的快取伺服器經過gzip壓縮的頁面,例如用squid快取經過nginx壓縮的資料。


14.配置nginx expires快取功能


對於圖片,css,js等元素更改的機會較少,特別是圖片,這時可以將圖片設定在瀏覽器本地快取365天或更長


location ~.*\.(gif|jpg|png|bmp|swf)$


{


expires 3650d;


location ~.*\.(js|css)$


{


expires 30d;


}


expire功能優點


1expires可以降低網站購買的頻寬,節約成本


2同事提升使用者訪問體驗


3減輕服務端壓力


缺點:


被快取的頁面或資料更新了,使用者看到的可能還是舊的內容,反而影響使用者體驗


解決辦法:


第一個縮短快取時間,例如1天,不徹底,除非更新頻率大於1天


第二個對快取的物件改名


a圖片,附件一般不會被使用者修改,如果使用者修改了,實際上也是更改檔名重新傳來而已


b網升級對於js,css元素,一般可以改名,把css,js,推送到cdn


15.nginx日誌相關優化與安全


1)配置日誌切割指令碼並寫入計劃任務


cd /app/logs


mv www_access.log www_acess_$(date +%F –d-1day).log


/application/nginx/sbin/nginx –s reload


cat >>/var/spool/cron/root<<eof


00 00 * * * /bin/sh cut_nginx_log.sh>/dev/null2>&1


eof


2)不記錄不需要的訪問日誌


對於健康檢查或某些(圖片,js,css)日誌,一般不記錄日誌,因為在統計pv時是按照頁面計算,而且日誌寫入頻繁會消耗磁碟IO降低伺服器效能。


引數:access_log off;


1.  訪問日誌的許可權設定


假設日誌目錄為/app/logs,則授權


chown –R root.root /app/logs


chmod –R 700 /app/logs


16 nginx站點目錄及檔案URL訪問控制(重要:防止惡意解析)


1)根據副檔名限制程式和檔案訪問


作用:禁止目錄下指定檔案被訪問,或者禁止指定目錄下所有內容被訪問


最佳應用場景:叢集的共享儲存,本來就應該只是資原始檔,禁止指定副檔名程式被執行,php,sh,pl


nginx下禁止訪問資源目錄下的php程式檔案,配置方法如下:


location ~^/images/.*\.(php|php5|.sh|.pl|.py)$


{


deny all;


if ($request_method !~^(GET|HEAD|POST)${


return 404;


2)nginx下配置禁止訪問.txt檔案


location ~*\.(txt|doc)${


if (-f $request_filename){
###rewrite^^^^^


break;


}


location ~*\.(txt|doc)${


root /data/www;


deny all;


}


3)使用ngx_http_access_module限制ip訪問


17.配置nginx圖片及目錄防盜鏈


原理:是利用http referer日誌資訊


當瀏覽器向web伺服器傳送請求的時候,一般會帶上referer,告訴伺服器我從那個頁面連結過來的,伺服器可以藉此獲得一下資訊用於處理


location~*\.(jpg|gif|png|swf|flv|wma|asf|mp3|mmf|zip|rar)${


valid_referers none blocked *.etiantian.orgetiantian.org;


if ($invalid_referer){


rewrite ^/ http://www.xiaofeng886.org/img/nolink.jpg;


}


}


18.nginx錯誤頁面優雅顯示


引數:error_page 403 /403.html;


19 nginx 方爬蟲優化


20 使用tmpfs檔案系統給/tmp


提高效率,部分程式切圖片操作臨時放到/tmp下,可以把tmp設定成記憶體檔案系統,佔用記憶體空間的,就是從記憶體裡拿出一塊來當磁碟用


mount –t tmpfs –o size=16m tmpfs /tmp


21放DDos攻擊


1)控制單個ip的併發請求防止DOS攻擊


使用limit_conn_zone進行控制,控制單個IP或域名的訪問次數,限制連續訪問


者http標籤新增控制,可以新增多個


limit_conn_zone $binary_remote_addr zone=perip:10m;


limit_conn_zone $binary_name zone=perserver:10m;


server {


limit_conn perip 10;


limit_conn perserver 100;


2)限制單個的請求速率防止DOS的訪問速率


使用limit_req_zone進行控制,控制單個ip訪問速率


 


22為web服務增加使用者身份驗證(適合內部機密網址)


nginx配置


location /phpmyadmin/{


auth_basic “oldboy training”;


auth_basic_user_file/application/nginx/conf/htpasswd;


}


建立密碼檔案


htpasswd –cb /application/nginx/conf/htpasswdoldboy 123456


cat /application/nginx/conf/htpasswd


chmod 400 /application/nginx/conf/htpasswd


chown nginx /application/nginx/conf/htpasswd


23 讓nginx運行於監牢模式


建立普通使用者,將站點目錄以及nginx.conf放到普通使用者目錄,之後用/application/nginx/sbin/nginx –c


配置檔案來啟服務


注意相關日誌所在路徑,指定pid,埠不能用80


useradd inca


cd /home/inca


mkdir conf www log


echo inca >www/index.html


error_log /home/inca/log/error.log


pid /home/inca/log/nginx.pid


指定站點目錄


日誌


埠不能用80


用普通使用者啟動


解決埠問題

相關推薦

面試-----3.nginx基礎面試

1.什麼是nginx? Nginx (engine x) 是一個高效能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP伺服器 Nginx作為負載均衡伺服器:Nginx 既可以在內部直接支援 Rails 和 PHP 程式對外進行服務,也可以支援作為 HTTP代

面試------1.elk基礎面試

1.ELK是什麼? ELK 其實並不是一款軟體,而是一整套解決方案,是三個軟體產品的首字母縮寫 Elasticsearch:負責日誌檢索和儲存 Logstash:負責日誌的收集和分析、處理 Kibana:負責日誌的視覺化 這三款軟體都是開源軟體,通常是配合使用,而且又先後歸

2-2-必備核心技能-nginx基礎入門

tex 早期 版本支持 多少 自己 文件 保存 不支持 物理cpu Nginx的程序架構:master/worker一個master進程:---主進程負載加載和分析配置文件、管理worker進程、平滑升級一個或多個worker進程---子進程處理並響應用戶請求緩存相關的進程

Linux高階--自動化之系統安裝基礎知識

Linux高階篇–運維自動化之系統安裝基礎知識 一、 系統安裝過程 系統安裝程式 CentOS系統安裝 系統啟動流程: 1、post加電自檢 2、尋找啟動裝置:硬碟,尋找啟動程式grub 1階段:mbr 446位元組 1.5:mbr後續的27個扇區 2階段:

2-3-必備核心技能-nginx配置文件全面講解

××× 文件系統 多個 off 限制 .html 按順序 目錄 長度 aio這種邏輯一般只能在磁盤io上實現綁定8顆cpu中的後4顆,從0開始掩碼為4、0001 00005、0010 00006、0100 00007、1000 0000看哪個進程運行在哪個cpu上ps ax

小知識之nginx---nginx配置Jboss集群負載均衡

sdn -c err nginx error .com lee oot tle codyl 2016-01-26 00:53:00 瀏覽385 評論0 負載均衡 轉自 運維小知識之nginx---nginx配置Jboss集群負載均衡-博客-雲棲社區

工程師必須掌握的基礎技能有哪些?

運維工程師必須掌握的基礎技能有哪些?作者:Tanky Woo鏈接:https://www.zhihu.com/question/23665108/answer/25299881來源:知乎著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。1. Linux基礎包括對Linux整體的理解/使用和基

Mysql DBA 高級學習筆記-Mysql常用基礎命令實戰

linux命令行 redhat esp sys dem mys pre 解決 運維學習 7.1 單實例mysql啟動和關閉方法 (1)常規方法啟動數據庫 1.啟動mysql服務命令 [root@localhost ~]# /etc/init.d/mysqld start S

Linux第七課----Linux基礎優化

vpd ext ges 一行 ec2 文件 文件內容 roo 分享圖片 一、find找出文件,並替換文件內容[root@oldbou ~/data]# find /root/data/ -type f -name ‘.txt‘ ./oldboy.txt./acheng.tx

Linux第八課----Linux基礎優化補充

中文亂碼 自動 字符集 linux xshel found linux基礎優化 文件 lan 一、顯示中文亂碼排查與解決辦法1.系統字符集與xshell字符集不匹配2.排查xshell中字符集不是UTF-8,修改xshell中字符集是UTF-8,繼續排查 系

工程師必須掌握的基礎技能和職業前景

集中 kvm 防火墻策略 squid edi 整體 聖經 cnp 運維 運維工程師必須掌握的基礎技能有哪些 運維工程師(Operations),負責維護並確保整個服務的高可用性,同時不斷優化系統架構提升部署效率、優化資源利用率提高整體的ROI。這是百度百科對運維工程師的定義

自動化之ANSIBLE(基礎知識)

simple github remote inux 對象 場景 .tar.gz 使用場景 system Ansible發展史 Ansible ??創始人,Michael DeHaan( Cobbler 與 Func 的作者) ??2012-03-09,發布0.0.1版

找工作絕對沒有問題的linux面試題(3)

知識 連接服務器 定時重啟 pin 客戶端連接 原來 acc 運營 fdisk shell腳本編程部分: 1.從 a.log 文件中提取包含“WARNING”或”FATAL”,同時不包含“IGNOR”的行,然後,提取以“:”分割的第五個字段?grep -E ‘WARNING

Linux入門~3.檔案管理

本節會與大家分享一些檔案管理常用的命令 幫助大家理解在linux中管理檔案目錄   windows的老使用者應該知道,在windows中是資料夾中包含檔案與資料夾, 但是在Linux中,資料夾稱為目錄。 理解這一點就可以開始啦。 檔案管理: 1.建立檔案 指

2018年秋招崗常見計算機網路基礎知識點總結

靜態變數和非靜態變數的區別: 靜態變數被所有的物件所共享,在記憶體中只有一個副本,當且僅當類在初次載入會被初始化。 非靜態常量是物件所擁有的,在建立物件的時候被初始化存在多個副本,static在不同例項中地址一樣,存在全域性區。 殭屍程序和孤兒程序: 殭屍程序:一個子程序在其父

自動化:(3)寫一個簡單的Shell指令碼(案例)

一、需求 1、test.sh 指令碼執行時候需要新增引數才能執行 引數和功能詳情如下: 引數 執行效果 start 啟動中... stop 關閉中... restart 重啟中... * 指令碼幫

自動化:(3)寫一個簡單的Shell腳本(案例)

sage 數字 shel $1 test 多余 限制 div nbsp 一、需求 1、test.sh 腳本執行時候需要添加參數才能執行 參數和功能詳情如下: 參數 執行效果 start 啟動中... stop 關閉

自動化工具 Ansible ——YAML、基礎元素

user pass list 表達 bin people another eve yaml YAML 的介紹   YAML是一個可讀性高的用來表達資料序列的格式。YAML參考了其他多種語言,包括:XML、C語言、Python、Perl等。YAML不是XML,不過,在開發的這

陌生又神祕的無厘頭分析

     運維,一個看起來很陌生的詞語,這是什麼意思呢?運維,這裡指網際網路運維,通常屬於技術部門,與研發、測試、系統管理同為網際網路產品技術支撐的4大部門,這個劃分在國內和國外以及大小公司間都會多少有一些不同。那麼IT運維又是什麼意思呢?度娘是這麼解釋的。 &nbs

Linux日常管理技巧3

. 2.2.3.3 iptables規則備份和恢復 2.2.4 firewalld 2.2.4.1 firewalld的9個zone 每個zone就好比一個規則集,firewalld預設有9個zone,如下 檢視預設的zone, firewalld-c