國外主流還是使用apache;國內現在主流是nginx(并發能力強,相對穩定)
nginx:高性能、輕量級的web服務軟件
特點:
1.穩定性高(沒apache穩);
2.系統資源消耗比較低;處理http請求的并發能力非常高,單臺物理服務器可以處理3-5萬個并發請求
一般在企業中,為了保持服務器的穩定,并發量會設置在2萬個左右;占用內存2M左右,keep-alive在3M左右
nginx的主要功能:
1.靜態文件服務,nginx可以直接提供靜態文件的服務,HTML,CSS,JavaScript,圖片等,能夠高效的處理并且響應靜態文件的請求
2.反向代理:可以作為反向代理的服務器,將客戶端的請求轉發給后端多個服務器,可以實現負載均衡,高可用。提高整個集群的性能,以及可靠性
3.處理動態內容,nginx不能直接處理動態請求,需要依靠后端能夠處理的應用php node.js java python nginx可以代理請求,發送到后端的動態服務處理,動態服務器處理完之后,nginx來吧動態請求,響應給客戶端
4.SSL/TLS加密,HTTPS的加密方式,數字證書驗證機制
5.虛擬主機,nginx可以在一臺服務器上設置多個虛擬主機,同一個服務器上可以有多個域名和站點
6.URL重定向,可以實現靈活的url重寫和重定向
7.緩存功能,nginx自帶緩存功能;get可以獲取緩存,post不能獲取緩存
8.日志功能,可以詳細的記錄請求的信息,包括訪問時間、請求路徑IP地址、響應狀態、有助于故障排查
系統控制的日志,記錄在/var/log/messages 業務日志:access.log、error.logaccess.log 記錄了訪問成功的記錄error.log 記錄了訪問失敗的記錄
正向代理:
***反向代理:
核心:客戶端在請求時通過代理服務器,會把請求流量按照輪詢算法,轉發到后臺不同的服務器,實現負載均衡和高可用
緩存
nginx的主要應用場景:
1.靜態服務2.反向代理、負載均衡3.緩存服務4.動態服務
?***nginx是如何實現高并發的?
1. nginx自身代碼的問題:大量的底層代理進行了優化,同時自帶了一個功能模塊——epoll模塊,可以支持高并發
2. nginx也是一個master進程控制多個work進程,master負責收集和分發請求,work是實際執行者;每一個請求進來時,master就會拉起一個work進程來處理請求同時,master進程也負責監控work的狀態;worker的數量和cpu要一致或者是cpu的2倍worker處理請求的過程中,只收內存大小的限制,所以可以處理多個請求;再加上nginx本身就是輕量級的服務,處理請求時占用的內存本身很少,所以可以起到大并發處理的能力兩者之間相互依賴,相互補充
conf 保存的是所有nginx的配置文件,其中最核心的就是nginx.conf
html 保存nginx的web文件,這個木里是默認的目錄,可以改
50x.html 是nginx默認的錯誤頁面的提示logs 保存日志文件的位置
sbin nginx二進制的啟動腳本,可以結合不同的參數來進行使用nginx -t 檢查配置文件是否配置正確
nginx -v 查看nginx的版本號
nginx -s 向主進程傳輸信號,停止、開啟、重啟、重新加載
nginx -c 設置配置文件的默認路徑nginx -s stop
nginx -s start
nginx -s reload
信號符:
信號符結合kill命令:
kill -USR1 pid號 #日志分割
kill -s HUP pid號 #kill后只能跟pid號,重新加載
killall -s HUP nginx #killall后可以跟服務名,也可以用pid號
kill -s QUIT pid號 #優雅退出,有人訪問時不會結束進程,訪問完后再結束進程
kill -s WINCH pid號 #優雅地結束worker,直到請求完成才會結束worker進程
必須要epel源(工作中一般不用yum安裝)
yum install -y epel-release
yum install nginx -yworker_processes 1; #工作進程,也就是worker進程的數量,一般是配置成cpu數一致,或者2倍; 一般來說小網站設置成1就足夠了worker_connections 1024 #每個進程可以處理的最大連接數,默認為1024
***如何修改linux服務器文件的最大打開數量
ulimit -n 65535 #臨時修改;65535為linux最大可打開數量
vim /etc/security/limits.conf# 65535 為Linux系統最大打開文件數* soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535
#永久修改,需要重啟linux才能生效ulimit -a
usr/local/nginx/conf/nginx.conf ????????#配置文件
event塊
?http塊
?server塊可以配置虛擬主機的相關參數,一個http模塊中可以有多個server塊
?location塊匹配的是URI(域名后面的地址)
?***#location / 表示 /usr/local/nginx/html
root 拼接;root指定的目錄和location匹配的url之間做一個拼接,/opt/ky30/這兩個路徑都要真實存在,而且都是目錄,并且在url目錄里要有web文件alias 匹配指定路徑下的web文件/root后面有沒有 / 無所謂;alias加了 / ,后面也必須有 / ,否則匹配不到root標簽可以使用重定向
alias標簽不可以設置重定向
全局塊 全局生效,所有模塊,所有用戶都生效
events 影響服務器和用戶的網絡連接問題
http 主要模塊,配置代理、緩存、虛擬主機、方向代理、只能是http的請求才能寫入 http模塊中;upstream #反向代理指定服務器的命令
server塊 包含在http模塊當中,不能單獨設置
location塊 匹配uri,包含在server當中,也不能單獨設置porxy_pass #反向代理upstream 七層,基于IP和端口,走http協議,所以只能在http模塊中
stream 四層,走的是tcp或者udp流量,不能寫在http當中,寫在全局配置
實驗:
一、訪問狀態統計
1:
1:經過三次握手的
1:處理的請求數
二、基于用戶名和密碼的訪問控制
三、基于IP地址的訪問規則
四、虛擬主機,創建多個虛擬主機
基于一個服務器,創建多個主頁
?nginx -t