Nginx的搭建與核心配置方法
一.Nginx是什么?
1.Nginx概述
- 一款高新能、輕量級Web服務(wù)軟件
- 系統(tǒng)資源消耗低
- 對HTTP并發(fā)連接的處理能力高
- 單臺物理服務(wù)器可支持30 000~50 000個并發(fā)請求。
Nginx(發(fā)音同"engine x")是一個高性能的反向代理和 Web服務(wù)器軟件,最初是由俄羅斯人 Igor Sysoev開發(fā)的。Nginx 的第一個版本發(fā)布于2004年,其源代碼基于雙條款 BSD許可證發(fā)布,因其系統(tǒng)資源消耗低、運(yùn)行穩(wěn)定且具有高性能的并發(fā)處理能力等特性,Nginx 在互聯(lián)網(wǎng)企業(yè)中得到廣泛應(yīng)用。Nginx 是互聯(lián)網(wǎng)上最受歡迎的開源 Web 服務(wù)器之一,它不僅提供了用于開發(fā)和交付的一整套應(yīng)用技術(shù),還是應(yīng)用交付領(lǐng)域的開源領(lǐng)導(dǎo)者。
2019年 3月,著名硬件負(fù)載均衡廠商F5宣布收購 Nginx,Nginx成為F5的一部分。 F5表示,將加強(qiáng)對開源和 Nginx 應(yīng)用平臺的投資,致力于Nginx 開源技術(shù)、開發(fā)人員和社區(qū)的發(fā)展,更大的投資將為開放源碼計劃注人新的活力,會主辦更多的開放源碼活動,并產(chǎn)生更多的開放源碼內(nèi)容。
2.Nginx模塊與作用
main模塊:全局配置模塊,所有模塊都要執(zhí)行遵守
配置運(yùn)行nginx服務(wù)器的用戶(組)、worker_process數(shù)(進(jìn)程)、nginx進(jìn)程PID存放路徑、錯誤日志存放路徑、配置文件的引入等
stream服務(wù)模塊:實(shí)現(xiàn)反向代理功能,包括TCP協(xié)議代理
郵件服務(wù)模塊:主要用于支持 Nginx 的郵件服務(wù)
對 POP3 協(xié)議、 IMAP 協(xié)議和 SMTP協(xié)議的支持
第三方模塊:二次開發(fā),為了擴(kuò)展 Nginx 服務(wù)器應(yīng)用,完成開發(fā)者自定義功能
Json 支持、 Lua 支持等
events模塊:影響nginx服務(wù)器與用戶的網(wǎng)絡(luò)連接
events { #events模塊設(shè)置
woker_connections 65536; #設(shè)置單個工作進(jìn)程最大并發(fā)連接數(shù)
use epoll; #事件驅(qū)動類型選擇為epoll
accept_mutex on; #同一時刻一個請求輪流由work進(jìn)程除了,即輪詢
multi_accept on; #每個工作進(jìn)程同時接受多個網(wǎng)絡(luò)連接
}
http模塊:跟web服務(wù)相關(guān),主要用于擴(kuò)展標(biāo)準(zhǔn)的 HTTP 功能,讓 Nginx 能處理一些特殊的服務(wù),包含幾個子模塊
自定義服務(wù)日志、允許sendfile方式傳輸文件、連接超時時間、單連接請求數(shù)上限、Flash 多媒體傳輸 、解析 GeoIP 請求、 網(wǎng)絡(luò)傳輸壓縮 、 安全協(xié)議 SSL 支持等
location模塊:uri網(wǎng)址定位
server模塊:服務(wù)模塊
配置80端口監(jiān)聽、虛擬主機(jī)、DNS域名解析等
auth_basic模塊:對網(wǎng)頁設(shè)置用戶名密碼
gzip模塊:壓縮
proxy模塊:設(shè)置后端IP地址、端口號及http和加密的https
ssl模塊:https加密
3.Nginx三大作用:反向代理、負(fù)載均衡、動靜分離
反向代理:在服務(wù)端 配置,客戶端 訪問服務(wù)器A ,服務(wù)器A 為代理服務(wù)器 ,將客戶服務(wù)再轉(zhuǎn)發(fā)到服務(wù)器B
作用:緩存,將服務(wù)器的響應(yīng)緩存在自己的內(nèi)存中,減少服務(wù)器壓力;
負(fù)載均衡,將用戶請求分配給多個服務(wù)器;
訪問控制
正向代理:在客戶端 配置,配置完了再去訪問具體服務(wù),即代理服務(wù)器 代理了客戶端 ,再去和目標(biāo)服務(wù)器 進(jìn)行交互
作用:提高訪問速度
隱藏客戶端真實(shí)IP地址
負(fù)載均衡:分?jǐn)偟蕉鄠€操作單元上進(jìn)行執(zhí)行,例如Web服務(wù)器、FTP服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等,從而共同完成工作任務(wù)
nginx七層負(fù)載均衡調(diào)度算法(六種)
1、輪詢(默認(rèn)調(diào)度算法)
特點(diǎn):每個請求按時間順序逐一分配到不同的后端服務(wù)器處理。
適用業(yè)務(wù)場景:后端服務(wù)器硬件性能配置完全一致,業(yè)務(wù)無特殊要求時使用。upstream backendserver {
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}
2、加權(quán)輪詢特點(diǎn):指定輪詢幾率,weight值(權(quán)重)和訪問比例成正比,用戶請求按權(quán)重比例分配。
適用業(yè)務(wù)場景:用于后端服務(wù)器硬件性處理能力不平均的情形。upstream backendserver {
server 192.168.0.14:80 weight=5 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 weight=10 max_fails=2 fail_timeout=10s;
}
3、ip_hash(IP哈希)特點(diǎn):每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器,可以解決session會話保持問題。
適用業(yè)務(wù)場景:適用于需要賬號登錄的系統(tǒng),會話連接保持的業(yè)務(wù)。upstream backendserver {
ip_hash;
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}
4、最少連接數(shù) least_conn特點(diǎn):按nginx反向代理與后端服務(wù)器之間的連接數(shù),連接數(shù)最少的優(yōu)先分配。
適用業(yè)務(wù)場景:適用于客戶端與后端服務(wù)器需要保持長連接的業(yè)務(wù)。
upstream backendserver {
least_conn; server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}5、響應(yīng)時間 fair(需編譯安裝第三方模塊 ngx_http_upstream_fair_module)
特點(diǎn):按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配。
適用業(yè)務(wù)場景:對訪問響應(yīng)速度有一定要求的業(yè)務(wù)。upstream backendserver {
fair;
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}6、url_hash(URL分配 )(需編譯安裝第三方模塊 ngx_http_upstream_hash_module)
特點(diǎn):按訪問url的hash結(jié)果來分配請求,使同一個url訪問到同一個后端服務(wù)器。
適用業(yè)務(wù)場景:適用于后端服務(wù)器為緩存服務(wù)器時比較有效。
upstream backendserver {
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
hash $request_uri;
}
動靜分離:采用代理的方式,在server{}段中加入帶正則匹配的location來指定匹配項針對PHP的動靜分離:靜態(tài)頁面交給Nginx處理,動態(tài)頁面交給PHP-FPM模塊或Apache處理。
在Nginx的配置中,是通過location配置段配合正則匹配實(shí)現(xiàn)靜態(tài)與動態(tài)頁面的不同處理方式,通過使用Nginx提高網(wǎng)站的響應(yīng)速度,優(yōu)化用戶體驗(yàn)
二.Nginx和Apache的差異
Apache:同步多進(jìn)程模型:一個連接對應(yīng)一個進(jìn)程(高穩(wěn)定)
1.rewrite更強(qiáng)大(rewrite主要功能是實(shí)現(xiàn)統(tǒng)一資源定位符URL的跳轉(zhuǎn))
2.模塊多,基本想到的都可以找到
3.少bug,更加穩(wěn)定(nginx相對較多)
4.PHP支持比較簡單(nginx需要配合其他后端用)
5.處理動態(tài)請求更有優(yōu)勢(nginx更適合靜態(tài)與反向)
Nginx:異步非阻塞模型:多個連接(萬級別)對應(yīng)一個進(jìn)程(高性能)
1.輕量級,采用C編寫,占用更少的內(nèi)存與資源
2.抗并發(fā)/高并發(fā),以epoll and kqueue 作為開發(fā)模型,負(fù)載能力高,高并發(fā)下能夠保持 低資源低消耗高性能(apache在PHP處理慢或前端壓力很大時,容易出現(xiàn)進(jìn)程數(shù)飆升 從而拒絕服務(wù))
3.處理靜態(tài)文件好,靜態(tài)處理性能比apache高三倍以上
4.設(shè)計高度模塊化,編寫模塊相對簡單
5.配置簡潔,正則配置更簡單,且更改完可以使用 -t 測試(apache配置復(fù)雜,重啟時發(fā) 現(xiàn)出錯,會很崩潰)
6.作為負(fù)載均衡服務(wù)器,支持七層負(fù)載均衡,可以有效防止ddos攻擊
7.本身是一個反向代理服務(wù)器,也可以作為郵件代理服務(wù)器使用
8.支持熱部署,支持在線升級
三.安裝Nginx
1.編譯安裝
關(guān)閉防火墻,將安裝nginx所需軟件包傳到/opt目錄下
nginx安裝官網(wǎng):https://nginx.org/en/download.html
systemctl stop firewalld systemctl disable firewalld setenforce 0 # 將壓縮包傳入到/opt目錄下 cd /opt wget http://nginx.org/download/nginx-1.18.0.tar.gz
安裝依賴包
#nginx的配置及運(yùn)行需要pcre、zlib等軟件包的支持,因此需要安裝這些安裝的開發(fā)包,以便提供相應(yīng)的庫和頭文件
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
創(chuàng)建運(yùn)行用戶、組(Nginx 服務(wù)程序默認(rèn)以 nobody 身份運(yùn)行,建議為其創(chuàng)建專門的用戶賬號,以便更準(zhǔn)確地控制其訪問權(quán)限)
useradd -M -s /sbin/nologin nginx
編譯安裝nginx
tar xf nginx-1.18.0.tar.gz cd nginx-1.18.0/ mkdir /apps/nginx -p ./configure --prefix=/apps/nginx \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-pcre \ --with-stream \ --with-stream_ssl_module \ --with-stream_realip_module make -j2 && make install chown -R nginx.nginx /apps/nginx
創(chuàng)建軟連接后直接 nginx啟動
ln -s /apps/nginx/sbin/nginx /usr/sbin/
創(chuàng)建Nginx 自啟動文件
vim /usr/lib/systemd/system/nginx.service [Unit] Description=nginx - high performance web server Documentation=http://nginx.org/en/docs/ After=network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/apps/nginx/logs/nginx.pid ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID [Install] WantedBy=multi-user.target
重新加載配置、設(shè)置開機(jī)自啟并開啟服務(wù)
systemctl daemon-reload #重新加載配置 systemctl enable --now nginx #開機(jī)自啟并立即啟動 systemctl status nginx.service #查看服務(wù)狀態(tài)(驗(yàn)證
2.yum安裝
Centos7 需要安裝epel源 cd /etc/yum.repos.d vim epel.repo [epel] name=epel baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64 gpgcheck=0 yum install -y epel-release yum install nginx -y
四.Nginx的信號使用
nginx 命令支持向其發(fā)送信號,實(shí)現(xiàn)不同功能
nginx -h #查詢nginx信號使用規(guī)則
常用信號:
信號 | 解釋 |
nginx -v | 顯示版本 |
nginx -V | 顯示編譯詳細(xì)情況、模塊等信息 |
nginx -t | 檢查語法格式 |
nginx -T | 打印當(dāng)前配置 |
nginx -s | 發(fā)送信號 |
nginx -s stop | 立即關(guān)閉 |
nginx -s quit | 優(yōu)雅退出,不影響業(yè)務(wù)的狀態(tài)下退出 |
nginx -s reload | 重新加載配置文件 |
nginx -s USR1 | 分割日志 |
nginx -s USR2 | 優(yōu)雅升級 |
nginx -g 'user zhangsan;' | 以張三身份運(yùn)行,默認(rèn)是以nginx身份 |
nginx -g 'daemon off;' | 前臺運(yùn)行命令 |
五.Nginx的核心配置指令
1.訪問狀態(tài)統(tǒng)計配置
第一步:查看已安裝的 Nginx 是否包含http_stub_status模塊
cd /usr/local/nginx/sbin #根據(jù)安裝路徑自由修改/apps/nginx/sbin也可 nginx -V
第二步:修改 nginx.conf 配置文件,指定訪問位置并添加 stub_status 配置(修改之前進(jìn)行備份)
cd /usr/local/nginx/conf/ #/apps/nginx/conf同理 cp nginx.conf nginx.conf.bak #備份 vim nginx.conf server { listen 80; server_name www.clj.com; charset utf-8; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } ##添加 stub_status 配置 location /status { ##訪問位置為/status stub_status on; ##打開狀態(tài)統(tǒng)計功能 access_log off; ##關(guān)閉此位置的日志記錄 }
第三步:重啟服務(wù)后進(jìn)行訪問測試
systemctl restart nginx.service
瀏覽器訪問 http;//192.168.79.210/status
Active connections ∶ 表示當(dāng)前的活動連接數(shù);
server accepts handled requests∶表示已經(jīng)處理的連接信息,三個數(shù)字依次表示已處理的連接數(shù)、成功的TCP握手次數(shù)已處理的請求數(shù)。
可curl http∶//192.168.79.210/status 結(jié)合 awk與if 語句進(jìn)行性能監(jiān)控。
2.基于授權(quán)的訪問控制
第一步:生成用戶密碼認(rèn)證文件
yum install -y httpd-tools #安裝工具 htpasswd -c /usr/local/nginx/passwd.db zhangsan #生成用戶密碼認(rèn)證文件(注意路徑 chown nginx /usr/local/nginx/passwd.db chmod 400 /usr/local/nginx/passwd.db #修改屬性和賦予執(zhí)行權(quán)限
第二步:修改主配置文件相應(yīng)的目錄,添加認(rèn)真配置
vim /usr/local/nginx/conf/nginx.conf #路徑/apps/nginx/conf/nginx.conf location / { root html; index index.html index.htm; #添加認(rèn)證配置 auth_basic "secret"; #設(shè)置密碼提示框文字信息 auth_basic_user_file /usr/local/nginx/passwd.db; }
第三步:檢查錯誤,重啟服務(wù),訪問測試
nginx -t systemctl restart nginx.service curl 192.168.79.210
3.基于客戶端訪問控制
訪問控制規(guī)則如下:
deny IP/IP段:拒絕某個IP或IP段的客戶端訪問。
allow IP/IP段:允許某個IP或IP段的客戶端訪問。
規(guī)則從上往下執(zhí)行,如果匹配到則停止,不會再往下繼續(xù)匹配。
第一步:在主配置文件中添加控制規(guī)則
vim /usr/local/nginx/conf/nginx.conf #注意路徑/apps/nginx/conf/nginx.conf location / { root html; index index.html index.htm; auth_basic "secret"; auth_basic_user_file /usr/local/nginx/passwd.db; # 添加控制規(guī)則 deny 192.168.80.77; #拒絕訪問的客戶端IP allow all; #允許其他所有客戶端訪問 }
第二步:重啟服務(wù)
systemctl restart nginx.service
第三步:被拒絕的客戶端訪問測試
192.168.79.220訪問 curl 192.168.79.210
第四步:其他客戶端訪問測試
192.168.79.210訪問 curl 192.168.79.210 192.168.79.230訪問 curl 192.168.79.210
4.基于域名的nginx虛擬主機(jī)
第一步:為虛擬主機(jī)提供域名和IP的映射
echo "192.168.79.210 www.zhuo.com www.xunizhuo.com" >> /etc/hosts
第二步:為虛擬主機(jī)準(zhǔn)備網(wǎng)頁文檔
mkdir -p /var/www/html/zhuo/ mkdir -p /var/www/html/xunizhuo/ echo "<h1>www.zhuo.com</h1>" > /var/www/html/zhuo/index.html echo "<h1>www.xunizhuo.com</h1>" > /var/www/html/xunizhuo/index.html
第三步:還原nginx主配置文件
之前做過訪問控制,所以直接將備份配置進(jìn)行還原
cd /usr/local/nginx/conf #/apps/nginx/conf路徑同理 cp nginx.conf.bak nginx.conf #還原主配置文件
第四步:修改主配置文件
vim /usr/local/nginx/conf/nginx.conf #/apps/nginx/conf/nginx.conf同理 server { listen 80; server_name www.xunizhuo.com; #設(shè)置域名 charset utf-8; #設(shè)置網(wǎng)頁字符集 access_log logs/xunizhuo.com.access.log; #設(shè)置日志名 location / { root /var/www/html/xunizhuo; #設(shè)置www.bxb.com的工作目錄 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 80; server_name www.zhuo.com; #設(shè)置域名 charset utf-8; #設(shè)置網(wǎng)頁字符集 access_log logs/zhuo.com.access.log; #設(shè)置日志名 location / { root /var/www/html/zhuo; #設(shè)置www.bxb.com的工作目錄 index index.html index.htm; }
第五步:重啟nginx后進(jìn)行訪問測試
systemctl restart nginx.service curl www.zhuo.com curl www.xunizhuo.com
5.基于IP的nginx虛擬主機(jī)
第一步:添加虛擬網(wǎng)卡,修改主配置文件
ifconfig ens33:0 192.168.79.211/24 vim /usr/local/nginx/conf/nginx.conf #/apps/nginx/conf/nginx.conf同理 server { listen 192.168.79.210:80; #修改監(jiān)聽的為ip server_name www.xunizhuo.com; charset utf-8; access_log logs/xunizhuo.com.access.log; location / { root /var/www/html/xunizhuo; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 192.168.79.211:80; #修改監(jiān)聽的為ip server_name www.zhuo.com; charset utf-8; access_log logs/zhuo.com.access.log; location / { root /var/www/html/zhuo; index index.html index.htm; }
第二步:檢查配置文件,重啟服務(wù)
nginx -t systemctl restart nginx.service
第三步:客戶端上訪問測試
curl 192.168.79.210:80 curl 192.168.79.211:80
6.基于端口的nginx虛擬主機(jī)
第一步:修改主配置文件
vim /usr/local/nginx/conf/nginx.conf #/apps/nginx/conf/nginx.conf同理 server { listen 192.168.79.210:666; #修改監(jiān)聽的為ip的666端口 server_name www.xunizhuo.com; charset utf-8; access_log logs/xunizhuo.com.access.log; location / { root /var/www/html/xunizhuo; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 192.168.79.211:888; #修改監(jiān)聽的為ip的888端口 server_name www.zhuo.com; charset utf-8; access_log logs/zhuo.com.access.log; location / { root /var/www/html/zhuo; index index.html index.htm; }
第二步:檢查配置文件,重啟服務(wù)
nginx -t systemctl restart nginx.service
第三步:客戶端上訪問測試
curl 192.168.79.210:666 curl 192.168.79.211:888
到此這篇關(guān)于Nginx的搭建與核心配置的文章就介紹到這了,更多相關(guān)Nginx搭建與配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx Location指令URI匹配規(guī)則詳解小結(jié)
這篇文章主要介紹了Nginx Location指令URI匹配規(guī)則詳解小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04詳解Nginx幾種常見實(shí)現(xiàn)301重定向方法上的區(qū)別
本篇文章主要介紹了詳解Nginx幾種常見實(shí)現(xiàn)301重定向方法上的區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06Nginx?502?bad?gateway錯誤解決的九種方案及原因
一般在訪問某些網(wǎng)站或者我們在做本地測試的時候,服務(wù)器突然返回502?Bad?Gateway?Nginx,這種問題相信大家也遇到不少了,下面這篇文章主要給大家介紹了關(guān)于Nginx?502?bad?gateway錯誤解決的九種方案及原因,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08Nginx配置實(shí)現(xiàn)用IP灰度測試(不同用戶ID)
本文主要介紹了使用Nginx配置實(shí)現(xiàn)基于IP的灰度發(fā)布實(shí)驗(yàn),以及如何通過不同用戶ID測試灰度發(fā)布,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11