ginx(發(fā)音為“engine X”)是一款高性能的HTTP和反向代理服務(wù)器,也是一個IMAP/POP3/SMTP代理服務(wù)器。它因其穩(wěn)定性、豐富的功能集、簡單的配置和低資源消耗而廣受歡迎。Nginx常作為Web服務(wù)器來服務(wù)靜態(tài)文件,同時也被廣泛用作反向代理、負(fù)載均衡器和HTTP緩存。下面將介紹Nginx的一些基本用法。
在大多數(shù)Linux發(fā)行版中,你可以通過包管理器來安裝Nginx。以下是在一些流行發(fā)行版上安裝Nginx的命令:
# 對于基于Debian(如Ubuntu)的系統(tǒng):
sudo apt update
sudo apt install nginx
# 對于基于RPM的系統(tǒng)(如CentOS或Fedora):
sudo yum install nginx # CentOS 7及之前版本
sudo dnf install nginx # CentOS 8及Fedora
安裝完成后,通常可以通過運行sudo systemctl start nginx來啟動Nginx服務(wù),并使用sudo systemctl enable nginx來設(shè)置開機自啟。
Nginx的配置文件通常位于/etc/nginx/目錄下,主配置文件是nginx.conf。此外,還有/etc/nginx/sites-available/和/etc/nginx/sites-enabled/目錄,用于管理網(wǎng)站配置文件。在/etc/nginx/sites-enabled/目錄下的鏈接會指向/etc/nginx/sites-available/目錄下的實際配置文件,這樣便于管理多個網(wǎng)站。
一個基本的Nginx服務(wù)器塊(server block)配置示例如下:
server {
listen 80;
server_name example.com www.example.com;
location / {
root /var/www/example;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location=/50x.html {
root /usr/share/nginx/html;
}
}
這個配置定義了一個監(jiān)聽80端口的服務(wù)器,當(dāng)請求example.com或www.example.com時,Nginx會查找/var/www/example目錄下的文件來響應(yīng)請求。location /塊指定了根位置的處理規(guī)則,而error_page指令則定義了錯誤頁面的處理。
Nginx也可以用作反向代理服務(wù)器,將請求轉(zhuǎn)發(fā)到后端服務(wù)器。以下是一個簡單的反向代理配置示例:
server {
listen 80;
server_name backend.example.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
這個配置將backend.example.com的所有請求轉(zhuǎn)發(fā)到本地的8080端口。proxy_pass指令指定了后端服務(wù)器的地址,而proxy_set_header指令則用于傳遞一些必要的請求頭到后端服務(wù)器。
Nginx是一款功能強大的Web服務(wù)器和反向代理服務(wù)器,其簡潔的配置和高效的性能使其成為許多Web應(yīng)用的首選。通過了解Nginx的基本用法,你可以輕松地配置和管理你的Web服務(wù)器,以滿足各種需求。
Nginx("engine x")是一款是由俄羅斯的程序設(shè)計師Igor Sysoev所開發(fā) 高性能的 Web和 反向代理 服務(wù)器 ,也是一個 IMAP/POP3/SMTP 代理服務(wù)器。
Nginx在部署網(wǎng)站時,可以說是小伙伴們的首選,當(dāng)然不能說全部項目都使用,對于一些小項目,直接IIS(.Net)、Tomcat(Java)等就搞定了,但對于大項目或微服務(wù)架構(gòu),Nginx肯定是少不了啦,一張圖看清Nginx有多火:
Nginx之所以招人喜愛, 那是它本身性能好,支持并發(fā)量大,內(nèi)存消耗少,配置簡單,提供功能給力,最重要是開源免費。 接下來會挑重要的來說說,了解我的小伙伴都應(yīng)該知道,我喜歡邊實操,邊說理論;走起來~~~
關(guān)于安裝我就不一步一步來演示啦,如果需要詳細(xì)安裝步驟,點 這里 ,菜鳥教程很詳細(xì)了,接下來就重點說說平時用得比較多的功能。
以下演示是通過阿里云服務(wù)器演示,系統(tǒng)為Centos7,nginx版本為1.18.0。 用到連接云服務(wù)器的工具為Xshell6,上傳文件為Xftp 6.
Nginx和Redis一樣,只需簡單的文件配置,就能輕松實現(xiàn)吊炸天的功能,所以先來了解一下配置文件內(nèi)容,不用太急著知道怎么用,接下來在功能實操的時候還會用到。
nginx.conf文件是經(jīng)常需要配置的,我這里安裝完成之后,該配置文件的路徑見下圖:
文件主要內(nèi)容如下:
#指定用戶,可以不進(jìn)行設(shè)置
#user nobody;
#Nginx進(jìn)程,一般設(shè)置為和CPU核數(shù)一樣
worker_processes 1;
#錯誤日志存放目錄,可以根據(jù)后面的日志級別指定到不同目錄
error_log /var/log/nginx/error.log info;
#進(jìn)程pid存放位置
pid /var/run/nginx.pid;
events {
# 單個后臺進(jìn)程的最大并發(fā)數(shù)
worker_connections 1024;
}
http {
#文件擴展名與類型映射表,指定為當(dāng)前目錄下的 mime.types
include mime.types;
#默認(rèn)文件類型
default_type application/octet-stream;
#設(shè)置日志顯示格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#nginx訪問日志存放位置
access_log /var/log/nginx/access.log main;
#開啟高效傳輸模式
sendfile on;
#tcp_nopush on;
#保持連接的時間,也叫超時時間
keepalive_timeout 65;
#開啟gzip壓縮
#gzip on;
#server的配置可以單獨為一個子配置文件,避免單個配置文件過大
server {
#配置監(jiān)聽端口
listen 80;
#配置域名
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
#指定默認(rèn)目錄
root html;
#默認(rèn)訪問頁面
index index.html index.htm;
}
# 指定http code 配置404頁面
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#錯誤狀態(tài)碼的顯示頁面,配置后需要重啟
error_page 500 502 503 504 /50x.html;
location=/50x.html {
root html;
}
}
}
在上面配置文件中,有幾個點需要注意:
這里演示沒有配置環(huán)境變量,所以需要進(jìn)入nginx的安裝目錄(/usr/local/nginx/sbin)中進(jìn)行操作,進(jìn)入可以執(zhí)行以下命令:
經(jīng)常有小伙伴要用google搜索資料,被無情地拒絕了,所以只能百度;如果非要用google進(jìn)行搜索咋弄? 翻墻(需要配置相關(guān)信息) ,其實本質(zhì)是 本機電腦借助代理服務(wù)器轉(zhuǎn)到對應(yīng)目標(biāo)服務(wù)器(小伙伴機器和代理服務(wù)器在同一個LAN內(nèi)) ,然后就可以間接獲取到信息啦,這種形式就叫 正向代理 。如下圖:
反向代理與正向代理剛好相反, 反向代理和目標(biāo)服務(wù)器在同一個LAN內(nèi) ,小伙伴直接訪問反向代理服務(wù)器地址,由反向代理將請求轉(zhuǎn)發(fā)給目標(biāo)服務(wù)服務(wù)器,然后將結(jié)果返回給小伙伴。如下圖:
新建一個API項目,然后部署到云服務(wù)器上,通過nginx進(jìn)行反向代理,隱藏項目的真實地址,為了運行API項目,這里需要安裝.NetCore3.1的運行環(huán)境(不是開發(fā)就不用安裝SDK啦);
#第一步,注冊 Microsoft 密鑰和存儲庫。安裝必需的依賴項。
rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
#第二步,安裝 .NET Core3.1 運行時,不是開發(fā)環(huán)境,就不需要安裝sdk
yum install aspnetcore-runtime-3.1
然后執(zhí)行 dotnet --version 命令,如果顯示對應(yīng)版本就可以繼續(xù)部署程序啦;
創(chuàng)建一個TestWebAPI項目,將編譯之后的項目文件通過Xftp拷貝到云服務(wù)器上,然后將其啟動,如下:
運行之后,由于阿里云云服務(wù)器的安全組沒有對外開放5000端口,所以外網(wǎng)是訪問不了的,但可以在服務(wù)器內(nèi)通過curl命令測試站點是否啟動,如下:
我這個服務(wù)器,80端口是對外開放的,可以訪問到的,如下:
所以現(xiàn)在我們通過nginx能訪問的80端口,反向代理到我們內(nèi)部開啟的測試項目,即5000那個端口。nginx配置如下:
重啟nginx之后,就可以訪問啦,如下:
系統(tǒng)的高可用是比較重要的,所以站點會通常以集群的方式進(jìn)行部署, 但為了讓請求均勻分配到各服務(wù)器上,則就要用到負(fù)載均衡策略啦,不管是軟件的方式還是硬件的方式都可以實現(xiàn)(這里就不詳細(xì)列舉啦),大概模式如下圖:
案例采用一個nginx作為反向代理,并通過簡單的配置實現(xiàn)負(fù)載均衡功能;由于設(shè)備有限,目標(biāo)服務(wù)器采用端口不同的形式進(jìn)行模擬,端口分別是5000和6000,然后在原來的 項目中增加一個獲取端口的接口 ,用于便于案例演示,代碼如下:
然后將編譯完成之后的項目文件通過xFtp拷貝到云服務(wù)器上,然后用以不同端口的形式分別在不同終端啟動,命令如下:
另外打開一個終端,如上圖一樣啟動項目,只是配置端口為5000打開,這樣項目就啟動了兩個(集群),接下來就通過配置nginx來實現(xiàn)負(fù)載均衡的功能。如下圖:
如上演示,默認(rèn)情況下, nginx的負(fù)載均衡策略為輪詢 ,在實際應(yīng)用場景中可以根據(jù)需要配置其他策略,如下:
負(fù)載均衡的功能的配置是不是很簡單~~~,動動手感覺就是舒坦。
前后端分離開發(fā)的模式最近幾年是火得不行,在部署方面,為了提高系統(tǒng)性能和用戶體驗,也會將動靜分離部署,即將靜態(tài)資源(如html、js、css、圖片等)單獨部署一個站點,關(guān)于WebAPI獲取和處理信息單獨部署為一個站點。本質(zhì)還是通過location匹配規(guī)則,將匹配的請求進(jìn)行不同的處理即可。
在nginx安裝目錄下創(chuàng)建一個static目錄,用于存放相關(guān)靜態(tài)資源:
結(jié)構(gòu)如下:
動靜分離思想就是這樣直觀,小伙伴可以根據(jù)自己的需要,定義location的匹配規(guī)則即可。
除了以上常用的功能,可能還有一些小功能也會常用到哦,比如 根據(jù)http狀態(tài)碼配置指定頁面、訪問權(quán)限控制、適配PC或移動端等 ,以下挑幾個平時比較常用的演示一把,如下:
nginx的常用功能就先說到這吧,分享的功能對于搞開發(fā)的小伙伴來說應(yīng)該是隨便夠用了,如果需要深入,還得下下功夫;下次來說說如何配置高可用:主從模式、雙主模式。
原文鏈接: http://www.cnblogs.com/zoe-zyq/p/14779429.html