1.nginx基本概念
1)nginx是什么
? nginx是一個(gè)高性能的HTTP和反向代理服務(wù)器奥此,特點(diǎn)是占用內(nèi)存少弧哎,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)站服務(wù)器中表現(xiàn)較好
? nginx專門為性能優(yōu)化而開發(fā)稚虎,性能是其最重要的考量撤嫩,是線上非常重視效率,能經(jīng)受高負(fù)載的考驗(yàn)蠢终,有報(bào)告表明能支持高達(dá)50000個(gè)并發(fā)連接數(shù)
2)反向代理
? tips:正向代理:在客戶端(瀏覽器)配置代理服務(wù)器序攘,通過代理服務(wù)器進(jìn)行互聯(lián)網(wǎng)訪問
? 我們只需要將請求發(fā)送到反向代理服務(wù)器茴她,有反向代理服務(wù)器去訪問目標(biāo)服務(wù)器獲取數(shù)據(jù)后,在返回給客戶端两踏,此時(shí)反向代理服務(wù)器和目標(biāo)服務(wù)器對(duì)外來說就是一個(gè)服務(wù)器败京,暴露的是反向代理服務(wù)器的地址,隱藏了真實(shí)服務(wù)器的地址
3)負(fù)載均衡
? 單個(gè)服務(wù)器解決不了梦染,我們增加服務(wù)器的數(shù)量赡麦,然后將請求分發(fā)到各個(gè)服務(wù)器上,就是負(fù)載均衡
4)動(dòng)靜分離
? 為了加快網(wǎng)站的解析速度帕识,可以把動(dòng)態(tài)資源和靜態(tài)資源有不同的服務(wù)器來解析泛粹,加快解析速度,降低單個(gè)服務(wù)器的壓力
2.nginx常用操作命令
- 查看nginx版本:
nginx -v
- 啟動(dòng)nginx:
systemctl start nginx
或/usr/sbin/nginx
(我的nginx啟動(dòng)文件在/us/sbin目錄下) - 關(guān)閉nginx:
nginx -s stop
- 檢查nginx配置文件:
nginx -t
- 重新加載nginx(配置文件):
nginx -s reload
或systemctl reload nginx
3.nginx配置文件
tips:nginx配置文件一般在/usr/local/nginx目錄中肮疗,如果沒有晶姊,可以通過whereis nginx 查找一下
nginx配置文件由三部分內(nèi)容構(gòu)成:
1)全局塊
? 從配置文件開始到events塊之間的內(nèi)容,主要會(huì)設(shè)置一些影響nginx服務(wù)器整體運(yùn)行的配置命令伪货,如:
user nginx;
#支持的并發(fā)數(shù)
worker_processes auto;
#error_log的位置
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
#加載的其他配置文件
include /usr/share/nginx/modules/*.conf;
2)events塊
? events塊涉及的指令主要影響nginx服務(wù)器與用戶的網(wǎng)絡(luò)連接 们衙,如:
#支持的最大連接數(shù)(單個(gè)進(jìn)程并發(fā)量)
worker_connections 1024;
3)http塊
tips:nginx服務(wù)器中配置最頻繁的部分
http塊包含兩個(gè)部分:http全局塊,server塊(具體設(shè)置描述看下一章)
3.nginx配置實(shí)例
1)配置虛擬機(jī)
tips:這里主要展示server塊中的配置
server {
#監(jiān)聽的端口后
listen 80;
#域名解析
server_name _;
#網(wǎng)站根目錄
root /usr/share/php;
# 加載其他配置文件
include /etc/nginx/default.d/*.conf;
#除下面提及的需要添加的配置信息外碱呼,其他配置保持默認(rèn)值即可蒙挑。
location / {
#在location大括號(hào)內(nèi)添加以下信息,配置網(wǎng)站被訪問時(shí)的默認(rèn)首頁
index index.php index.html index.htm;
}
#添加下列信息愚臀,配置Nginx通過fastcgi方式處理您的PHP請求
location ~ .php$ {
#Nginx通過本機(jī)的9000端口將PHP請求轉(zhuǎn)發(fā)給PHP-FPM進(jìn)行處理
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params; #Nginx調(diào)用fastcgi接口處理PHP請求
}
#配置錯(cuò)誤頁面
error_page 404 /404.html;
location = /40x.html {
}
#配置錯(cuò)誤頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
2)配置緩存
tips:這里主要展示server塊中的配置
nginx 通過配置可以告知瀏覽器忆蚀,返回?cái)?shù)據(jù)的有效期,瀏覽器就可以根據(jù)數(shù)據(jù)的有效期來判斷是否需要請求服務(wù)器姑裂,如果沒有超過有效期馋袜,就可以不用請求服務(wù)器,這樣可以減少服務(wù)器請求舶斧,并且降低帶寬壓力
#各種圖片的緩存時(shí)間(30天)
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
#js和css文件緩存時(shí)間(12小時(shí))
location ~ .*\.(js|css)?$
{
expires 12h;
}
3)gzip壓縮設(shè)置
壓縮資源欣鳖,通過網(wǎng)絡(luò)傳輸?shù)馁Y源變小,帶寬占用變小捧毛,可以快速訪問
tips:服務(wù)器進(jìn)行壓縮观堂,瀏覽器需要進(jìn)行解壓,目前大部分瀏覽器是支持解壓的
#該部分設(shè)置在http塊中的的全局塊中呀忧,也就是server之前
gzip on;
#http協(xié)議版本
gzip_http_version 1.1;
#需要壓縮的文件格式
gzip_types text/plain application/json application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
#如果是IE1-6师痕,就關(guān)閉壓縮,因?yàn)镮E1-6不支持壓縮
gzip_disable "MSIE [1-6]\.";
4)負(fù)載均衡設(shè)置
分發(fā)段配置:
#該部分設(shè)置在http塊中的的全局塊中
# upstream后的test要和 server塊中l(wèi)ocation中的代理的相同
upstream test1{
#保證同一個(gè)ip訪問同一臺(tái)服務(wù)器而账,這樣就可以避免之前訪問a服務(wù)器胰坟,之后訪問b服務(wù)器session丟失的問題
ip_hash;
# 分發(fā)到的服務(wù)器 分發(fā)權(quán)重優(yōu)先級(jí)(1:1) 最大失敗次數(shù) 失敗超時(shí)時(shí)間
server 192.168.174.130 weight=1 max_fails=3 fail_timeout=20s; #注意,真實(shí)服務(wù)器需要開啟nginx并監(jiān)聽80端口
server 192.168.174.130 weight=1 max_fails=3 fail_timeout=20s;
}
server {
#監(jiān)聽的端口后
listen 80;
#域名解析
server_name test1.123.com;
#除下面提及的需要添加的配置信息外泞辐,其他配置保持默認(rèn)值即可笔横。
location / {
#分發(fā)代理 (http://后面需要和前面upstream后面的相同)
proxy_pass: http://test1;
}
}