Nginx 與 Apache 的比較
Apache 穩(wěn)定稚叹、開(kāi)源动雹、跨平臺(tái)槽卫,但它太重。在 Apache 服務(wù)器上胰蝠,如果有數(shù)萬(wàn)并發(fā) HTTP 請(qǐng)求同時(shí)訪問(wèn)歼培,就會(huì)導(dǎo)致服務(wù)器消耗大量?jī)?nèi)存震蒋,操作系統(tǒng)對(duì)成百上千的 Apache 進(jìn)程做進(jìn)程間切換也會(huì)消耗大量 CPU 資源,并導(dǎo)致 HTTP 請(qǐng)求的平均響應(yīng)速度降低丐怯,這些都決定了 Apache 不可能成為高性能 Web 服務(wù)器喷好,這也促使了 Lighttpd 和 Nginx 的出現(xiàn)。
Nginx 是輕量級(jí)读跷、高性能的 Web 服務(wù)器梗搅,使用基于事件驅(qū)動(dòng)的架構(gòu)能夠并發(fā)處理百萬(wàn)級(jí)別的 TCP 連接,高度模塊化的設(shè)計(jì)使得 Nginx 功能的第三方模塊開(kāi)發(fā)很方便效览。
Nginx 特點(diǎn):
- 更快
- 高擴(kuò)展性
- 高可靠性
- 低內(nèi)存消耗
- 單機(jī)支持 10W+ 的并發(fā)連接
- 熱部署
Nginx 使用
命令行操作
nginx -s reload # 使運(yùn)行中的 Nginx 重加載配置并生效
nginx -s stop # 停止服務(wù)
nginx -s quit # 處理完當(dāng)前所有請(qǐng)求再停止服務(wù)
nginx -t # 檢查配置信息是否有錯(cuò)誤
nginx -c new_nginx.conf # 使用自定義配置文件
stop
和quit
是有區(qū)別的:stop
會(huì)立即退出進(jìn)程无切,quit
會(huì)先關(guān)閉監(jiān)聽(tīng)端口,停止接受新連接丐枉,然后把當(dāng)前正在處理的連接全部處理完哆键,再退出進(jìn)程。
配置
塊配置項(xiàng)
塊配置項(xiàng)由一個(gè)塊配置項(xiàng)名和一對(duì)大括號(hào)組成:
events {
}
http {
server {
location /images {
}
}
}
events
瘦锹、http
籍嘹、server
、location
都是塊配置項(xiàng)名弯院,后面用大括號(hào)把一系列配置項(xiàng)包含進(jìn)來(lái)辱士。
像location
后面的/images
是配置項(xiàng)的參數(shù)
配置項(xiàng)的構(gòu)成
配置項(xiàng)名 配置項(xiàng)值1 配置項(xiàng)值2;
配置項(xiàng)名輸入結(jié)束后,將以空格作為分隔符
配置項(xiàng)值之間也是空格分隔
注釋
#
為行注釋
#pid logs/nginx.pid
Nginx 用途
Nginx 高并發(fā)高負(fù)載的能力听绳,因此一般作為前端服務(wù)器直接向客戶(hù)端提供靜態(tài)文件服務(wù)颂碘。
但,也有一些復(fù)雜的業(yè)務(wù)不適合放在 Nginx 上椅挣,這時(shí)會(huì)用 Apache 等服務(wù)器處理头岔,這時(shí),Nginx 就作為代理服務(wù)器鼠证。
靜態(tài) web 服務(wù)器
URI 匹配
location[=|~|~*|^~|@]/uri/{...}
location 會(huì)嘗試根據(jù)用戶(hù)請(qǐng)求中的 URI 來(lái)匹配上面的 /uri 表達(dá)式峡竣,如果可以匹配,就選擇 location{} 塊中的配置來(lái)處理用戶(hù)請(qǐng)求量九。
符號(hào) | 含義 |
---|---|
= | 把 URI 作為字符串澎胡,以便于參數(shù)中 uri 做完全匹配 |
~ | 匹配 URI 時(shí)大小寫(xiě)敏感 |
~* | 匹配 URI 時(shí)忽略字母大小寫(xiě) |
^~ | 匹配 URI 時(shí)只需要其前半部分與 URI 參數(shù)匹配 |
@ | 僅用于 Nginx 服務(wù)內(nèi)部請(qǐng)求之間的重定向 |
uri 可以用正則:
location ~* \.(gif|jpg|jpeg)$ {
# 匹配以 .gif .jpg .jpeg 結(jié)尾的請(qǐng)求
}
如果有請(qǐng)求可以匹配多個(gè) location ,只會(huì)被第一個(gè) location 處理娩鹉。
如果要表達(dá)「如果不匹配……則……」攻谁,要這樣表示:
location / {
# / 符號(hào)可以匹配所有請(qǐng)求
}
文件路徑
- 以
root
設(shè)置資源路徑:root path
# 如果有請(qǐng)求是 /abc/index/test.html 則 web 服務(wù)器會(huì)返回 /data/html/abc/index/test.html
location /abc {
root /data/html
}
# 請(qǐng)求 .js 文件都會(huì)返回 /data/js 下的文件
location \.js$ {
root /data/js
}
- 以
alias
設(shè)置資源路徑:alias path
# 訪問(wèn) /abc 會(huì)映射到 /data/abc 文件夾
location /abc {
alias /data/abc
}
# 等同于
location /abc {
root /data
}
- 首頁(yè):
index file
# 收到請(qǐng)求后,先嘗試訪問(wèn) path/index.html 文件弯予,如果可以訪問(wèn)戚宦,直接返回文件內(nèi)容結(jié)束請(qǐng)求;
# 否則锈嫩,再?lài)L試返回 path/index.php
location / {
root path;
index /index.html /index.php
}
- 根據(jù) HTTP 返回碼重定向
error_page 404 /404.html
error_page 502 503 504 /50x.html
error_page 403 http://example.com/forbidden.html
還可以通過(guò) =
更改返回的錯(cuò)誤碼:
error_page 404=200 /empty.gif
反向代理服務(wù)器
proxy_pass
proxy_pass 配置項(xiàng)將當(dāng)前請(qǐng)求反向代理到 URL 參數(shù)指定的服務(wù)器上受楼,URL 可以是主機(jī)名或 IP 地址垦搬。
# 訪問(wèn) /abc 會(huì)轉(zhuǎn)發(fā)到 http://127.0.0.1:8080/index.html
location /abc {
proxy_pass http://127.0.0.1:8080/index.html;
}
反向代理和正向代理的區(qū)別就是代理服務(wù)器對(duì)客戶(hù)端可見(jiàn)還是對(duì)服務(wù)端可見(jiàn)
總結(jié)
這是我讀《深入理解Nginx(第2版)》前兩章的所總結(jié)的筆記。讓我知道了 nginx 的配置艳汽,后面沒(méi)有再看了(關(guān)于寫(xiě)Nginx擴(kuò)展的)猴贰,因?yàn)楝F(xiàn)在還不需要,可能以后也不需要 -_-!河狐。
說(shuō)來(lái)慚愧米绕,這是我去年7月買(mǎi)的書(shū),現(xiàn)在才看馋艺。真是越來(lái)越懶了栅干。