前言
Nginx是一款輕量級(jí)的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器甚垦,并在一個(gè)BSD-like 協(xié)議下發(fā)行艰亮。由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開發(fā)迄埃,供俄國大型的入口網(wǎng)站及搜索引擎Rambler(俄文:Рамблер)使用调俘。
其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng)先蒋,事實(shí)上nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較
好竞漾。
什么是反向代理业岁?
通常的代理服務(wù)器笔时,只用于代理內(nèi)部網(wǎng)絡(luò)對Internet的連接請求允耿,客戶機(jī)必須指定代理服務(wù)器,并將本來要直接發(fā)送到Web服務(wù)器上的http請求發(fā)送到代理服務(wù)器中由代理服務(wù)器向Internet上的web服務(wù)器發(fā)起請求较锡,最終達(dá)到客戶機(jī)上網(wǎng)的目的蚂蕴。這就是所謂的正向代理骡楼,一般就直接叫代理君编。
反向代理(Reverse Proxy)則是指以代理服務(wù)器來接受internet上的連接請求吃嘿,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器兑燥,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端降瞳,此時(shí)代理服務(wù)器對外就表現(xiàn)為一個(gè)反向代理服務(wù)器挣饥。
Nginx 只做請求的轉(zhuǎn)發(fā),后臺(tái)有多個(gè)http服務(wù)器提供服務(wù)汛聚,nginx的作用就是把請求轉(zhuǎn)發(fā)給后面的服務(wù)器叹哭,決定把請求轉(zhuǎn)發(fā)給誰處理痕貌。
一超升、安裝步驟
1.下載Nginx安裝包
可以到nginx官網(wǎng)下載廓俭,也可以直接使用命令下載:wget http://nginx.org/download/nginx-1.20.1.tar.gz
2.解壓及目錄
執(zhí)行命令:tar -zxvf nginx-1.20.1.tar.gz
對tar.gz安裝包進(jìn)行解壓研乒,解壓后進(jìn)到目錄:
? auto目錄:存放大量的腳本文件,或configure腳本程序相關(guān)
? conf目錄:存放nginx服務(wù)器的配置文件
? contrib目錄:存放其他機(jī)構(gòu)或組織貢獻(xiàn)的文檔資料
? html目錄:存放默認(rèn)網(wǎng)站文件
? man目錄:存放nginx的幫助文檔
? src目錄:存放nginx的源代碼
? CHANGES竿报、CHANGES.ru烈菌、LICENSE芽世、和README都是nginx服務(wù)器的相關(guān)文檔資料
? configure目錄:nginx自動(dòng)安裝腳本济瓢,用于檢查環(huán)境妹卿,生成編譯代碼需要的makefile文件
3.安裝依賴包
安裝nginx模塊依賴的軟件包:
? openssl-devel包:為nginx模塊提供密碼算法夺克、證書以及SSL協(xié)議等功能
? pcre-devel包:為nginx模塊提供正則表達(dá)式庫
? zlib-devel包:為nginx模塊提供數(shù)據(jù)壓縮用的函數(shù)庫
執(zhí)行命令yum -y install pcre-devel openssl-devel
扒吁,而pcre-devel和zlib-devel會(huì)作為依賴自動(dòng)被安裝。
4.安裝nginx
1、切換到/home/soft/nginx/nginx-1.20.1路徑下盼铁,執(zhí)行./configure
饶火,/configure用于對即將安裝的軟件進(jìn)行配置肤寝,檢查當(dāng)前的環(huán)境是否滿足安裝軟件的依賴關(guān)系鲤看,如圖:
執(zhí)行命令若出現(xiàn)
./configure c compiler cc is not found
,執(zhí)行命令yum -y install gcc gcc-c++ autoconf automake make
即可
2慷吊、執(zhí)行make && make install
命令
安裝成功溉瓶,切換到目錄/usr/local/nginx(默認(rèn)安裝路徑)
二、配置
1.服務(wù)啟動(dòng)
進(jìn)入sbin目錄胞锰,./nginx
命令執(zhí)行nginx腳本兢榨,成功啟動(dòng)nginx
開放80端口凌那,瀏覽器打開
虛擬機(jī)ip:80
2.nginx配置
conf目錄下帽蝶,除了nginx.conf励稳,其余配置文件驹尼,一般只需要使用默認(rèn)提供即可新翎。
nginx.conf文件結(jié)構(gòu)
? 全局塊:配置影響nginx全局的指令愁拭。一般有運(yùn)行nginx服務(wù)器的用戶組岭埠,nginx進(jìn)程pid存放路徑顺呕,日志存放路徑株茶,配置文件引入启盛,允許生成worker process數(shù)等僵闯。
? events塊:配置影響nginx服務(wù)器或與用戶的網(wǎng)絡(luò)連接鳖粟。有每個(gè)進(jìn)程的最大連接數(shù)向图,選取哪種事件驅(qū)動(dòng)模型處理連接請求榄攀,是否允許同時(shí)接受多個(gè)網(wǎng)路連接檩赢,開啟多個(gè)網(wǎng)絡(luò)連接序列化等。
? http塊:可以嵌套多個(gè)server趁曼,配置代理彰阴,緩存,日志定義等絕大多數(shù)功能和第三方模塊的配置簇抵。如文件引入碟摆,mime-type定義典蜕,日志自定義愉舔,是否使用sendfile傳輸文件轩缤,連接超時(shí)時(shí)間火的,單連接請求數(shù)等馏鹤。
? server塊:配置虛擬主機(jī)的相關(guān)參數(shù)湃累,一個(gè)http中可以有多個(gè)server脱茉。
? location塊:配置請求的路由琴许,以及各種頁面的處理情況。
具體配置
├── worker_process表示工作進(jìn)程的數(shù)量锻梳,一般設(shè)置為cpu的核數(shù)
├── worker_connections表示每個(gè)工作進(jìn)程的最大連接數(shù)
├── server{}塊定義了虛擬主機(jī)
├── listener監(jiān)聽端口
├── server_name監(jiān)聽域名
├── location{}是用來為匹配的 URI 進(jìn)行配置疑枯,URI 即語法中的“/uri/”荆永。location / { }匹配任何查詢具钥,因?yàn)樗姓埱蠖家?/ 開頭骂删。
├── root指定對應(yīng)uri的資源查找路徑宁玫,這里html為相對路徑欧瘪,完整路徑為/usr/local/nginx/html/
├── index指定首頁index文件的名稱恋追,可以配置多個(gè)苦囱,以空格分開撕彤。如有多個(gè)羹铅,按配置順序查找职员。
示例:
########### 每個(gè)指令必須有分號(hào)結(jié)束焊切。#################
#user administrator administrators; #配置用戶或者組专肪,默認(rèn)為nobody nobody痰憎。
#worker_processes 2; #允許生成的進(jìn)程數(shù),默認(rèn)為1
#pid /nginx/pid/nginx.pid; #指定nginx進(jìn)程運(yùn)行文件存放地址
error_log log/error.log debug; #制定日志路徑芽死,級(jí)別。這個(gè)設(shè)置可以放入全局塊掌呜,http塊坪哄,server塊势篡,級(jí)別以此為:debug|info|notice|warn|error|crit|alert|emerg
events {
accept_mutex on; #設(shè)置網(wǎng)路連接序列化禁悠,防止驚群現(xiàn)象發(fā)生,默認(rèn)為on
multi_accept on; #設(shè)置一個(gè)進(jìn)程是否同時(shí)接受多個(gè)網(wǎng)絡(luò)連接碍侦,默認(rèn)為off
#use epoll; #事件驅(qū)動(dòng)模型瓷产,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大連接數(shù),默認(rèn)為512
}
http {
include mime.types; #文件擴(kuò)展名與文件類型映射表
default_type application/octet-stream; #默認(rèn)文件類型濒旦,默認(rèn)為text/plain
#access_log off; #取消服務(wù)日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式
access_log log/access.log myFormat; #combined為日志格式的默認(rèn)值
sendfile on; #允許sendfile方式傳輸文件尔邓,默認(rèn)為off,可以在http塊齿尽,server塊灯节,location塊绵估。
sendfile_max_chunk 100k; #每個(gè)進(jìn)程每次調(diào)用傳輸數(shù)量不能大于設(shè)定的值贷岸,默認(rèn)為0,即不設(shè)上限躏救。
keepalive_timeout 65; #連接超時(shí)時(shí)間螟蒸,默認(rèn)為75s,可以在http少办,server诵原,location塊。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #熱備
}
error_page 404 https://www.baidu.com; #錯(cuò)誤頁
server {
keepalive_requests 120; #單連接請求上限次數(shù)蔓纠。
listen 4545; #監(jiān)聽端口
server_name 127.0.0.1; #監(jiān)聽地址
location ~*^.+$ { #請求的url過濾吗蚌,正則匹配,~為區(qū)分大小寫敷燎,~*為不區(qū)分大小寫箩言。
#root path; #根目錄
#index vv.txt; #設(shè)置默認(rèn)頁
proxy_pass http://mysvr; #請求轉(zhuǎn)向mysvr 定義的服務(wù)器列表
deny 127.0.0.1; #拒絕的ip
allow 172.18.5.54; #允許的ip
}
}
}
上面是nginx的基本配置,需要注意的有以下幾點(diǎn):
1澄成、log_format myFormat相關(guān)
remote_addr 與http_x_forwarded_for 用以記錄客戶端的ip地址畏吓;
remote_user :用來記錄客戶端用戶名稱;
time_local : 用來記錄訪問時(shí)間與時(shí)區(qū)肾砂;
request : 用來記錄請求的url與http協(xié)議宏悦;
status : 用來記錄請求狀態(tài)包吝;成功是200源葫;
body_bytes_s ent :記錄發(fā)送給客戶端文件主體內(nèi)容大邢⑻谩;
http_referer :用來記錄從那個(gè)頁面鏈接訪問過來的荣堰;
http_user_agent :記錄客戶端瀏覽器的相關(guān)信息;
2振坚、驚群現(xiàn)象:一個(gè)網(wǎng)路連接到來薇搁,多個(gè)睡眠的進(jìn)程被同事叫醒,但只有一個(gè)進(jìn)程能獲得鏈接渡八,這樣會(huì)影響系統(tǒng)性能啃洋。
3、每個(gè)指令必須有分號(hào)結(jié)束屎鳍。
3.nginx命令
配置完成后重新啟動(dòng)nginx
nginx -t # 查看nginx狀態(tài)
nginx -s reload # 重新載入配置文件
nginx -s reopen # 重啟 Nginx
nginx -s stop # 停止 Nginx
創(chuàng)作不易裂允,關(guān)注、點(diǎn)贊就是對作者最大的鼓勵(lì)哥艇,歡迎在下方評論留言
求關(guān)注,定期分享Java知識(shí)僻澎,一起學(xué)習(xí),共同成長窟勃。