Nginx是什么?
??Nginx是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務。Nginx是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發(fā)的,第一個公開版本0.1.0發(fā)布于2004年10月4日。2011年6月1日,nginx 1.0.4發(fā)布。
??特點是占有內存少,并發(fā)能力強,事實上nginx的并發(fā)能力在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。在全球活躍的網站中有12.18%的使用比率,大約為2220萬個網站。
??Nginx安裝非常的簡單、配置文件非常簡潔(還能夠支持perl語法)、Bug非常少的服務。Nginx 啟動特別容易,并且?guī)缀蹩梢宰龅?*24不間斷運行,即使運行數個月也不需要重新啟動。你還能夠不間斷服務的情況下進行軟件版本的升級。
??Nginx代碼完全用C語言從頭寫成。官方數據測試表明能夠支持高達 50,000 個并發(fā)連接數的響應。
為什么用Nginx
??項目剛上線時,用戶量和并發(fā)量都很小。此時,一臺應用服務器足夠處理用戶請求,服務器直接返回內容給用戶。然而,隨著用戶數量的增加和并發(fā)量的上升,單臺服務器無法滿足需求。為了解決這個問題,采取了橫向擴展的方式,增加了多臺服務器?,F在,多個項目運行在不同的服務器上。為了讓用戶訪問這些服務器,引入了一個代理服務器。代理服務器的作用是接收用戶的請求,并根據一定的規(guī)則將請求轉發(fā)到不同的服務器節(jié)點上。這個過程對用戶來說是無感知的,用戶并不知道最終返回結果的服務器是哪一臺。同時,希望代理服務器能夠根據服務器的性能提供不同的權重選擇,以保證最佳的用戶體驗。
Nginx的作用
- HTTP代理和反向代理:Nginx常被用作Web服務器,其中最常見的功能是充當HTTP代理或反向代理。作為代理服務器,它可以接收客戶端的請求并將其轉發(fā)給后端服務器,然后將響應返回給客戶端。這種方式可以隱藏后端服務器的真實IP地址,提供負載均衡、緩存和安全性等優(yōu)勢。
- 負載均衡:Nginx提供負載均衡功能,可以將請求分發(fā)給多個后端服務器,以實現更好的性能和可靠性。它支持多種負載均衡策略,包括輪詢、加權輪詢和IP哈希等。
-
動靜分離:在動態(tài)網站中,有些資源是靜態(tài)的(如CSS、HTML、圖片等),不需要經過后端處理,而有些資源是動態(tài)生成的,需要后端服務器處理。Nginx可以根據規(guī)則將動態(tài)資源和靜態(tài)資源分離,將靜態(tài)資源進行緩存,以提高響應速度和減輕后端服務器的負載。
4、Nginx服務搭建和使用
Nginx官網:https://nginx.org/
本次使用華為云服務器(ubuntu22) + docker搭建nginx服務
拉取nginx鏡像
docker pull nginx:latest
啟動nginx容器并且復制默認配置文件到宿主機
docker run -d <image-id>
# 將容器中的nginx配置文件復制到 /docker/nginx下
# 包括默認配置文件、html、conf.d
docker cp nginx:/etc/nginx/nginx.conf /docker/nginx/conf/nginx.conf
docker cp nginx:/etc/nginx/conf.d /docker/nginx/conf/conf.d
docker cp nginx:/usr/share/nginx/html /docker/nginx/html/
# 接下來刪除剛才運行的容器
掛載nginx配置、html、日志文件的方式重新啟動容器
# 默認使用80端口
# 指定時區(qū)為Asia/Shanghai,配置打印日志的時區(qū)
# 掛載nginx的日志,方便查看
docker run -d -p 80:80 --name nginx \
-v /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /docker/nginx/log:/var/log/nginx \
-v /docker/nginx/html:/usr/share/nginx/html \
-v /root/www:/www \
-e TZ=Asia/Shanghai \
container-id
容器啟動成功實例
測試服務啟動狀態(tài)(成功啟動)
5、nginx配置結構
- 全局塊:配置影響nginx全局的指令。一般有運行nginx服務器的用戶組,nginx進程pid存放路徑,日志存放路徑,配置文件引入,允許生成worker process數等。
- events塊:配置影響nginx服務器或與用戶的網絡連接。有每個進程的最大連接數,選取哪種事件驅動模型處理連接請求,是否允許同時接受多個網路連接,開啟多個網絡連接序列化等。
- http塊:可以嵌套多個server,配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置。如文件引入,mime-type定義,日志自定義,是否使用sendfile傳輸文件,連接超時時間,單連接請求數等。
- server塊:配置虛擬主機的相關參數,一個http中可以有多個server。
- location塊:配置請求的路由,以及各種頁面的處理情況
... #全局塊
events { #events塊
...
}
http #http塊
{
upstream servername{ #負載均衡
...
}
...
server #server塊
{
...
location #location塊
{
...
}
}
}
6、nginx配置實戰(zhàn)
6.1 使用nginx代理靜態(tài)文件
代理靜態(tài)文件的nginx配置
# 代理靜態(tài)文件的配置我們放到conf.d目錄下,.conf后綴
# 我們啟動服務的時候將宿主機的/root/www目錄映射到容器的/www目錄下
# 希望通過訪問 http://host:port/static/filename 獲取靜態(tài)文件
server {
listen 80;
server_name 127.0.0.1;
location /static {
alias /www/;
index index.html index.htm;
try_files $uri $uri/ =404;
}
}
代理效果展示
在宿主機的/root/www目錄下放一個test.jpg文件以測試效果
6.2 代理web服務
應用正以5001端口正常啟動
代理web服務5001端口的nginx配置
# 這里沒有使用域名 flask項目運行在5001端口
server {
listen 80 default_server;
server_name <私有IP>;
access_log /var/log/nginx/myflask.access.log combined;
error_log /var/log/nginx/myflask.error.log notice;
#error_page 404 /404.html;
#location = /404.html {
# root /usr/share/nginx/html
#}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location / {
proxy_pass http://<私有IP>:5001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# enable server push for resources
http2_push_preload on;
}
}
代理效果展示
文章來源:http://www.zghlxwxcb.cn/news/detail-470114.html
7、總結
??Nginx 是一個功能強大、高性能的服務器軟件,適用于各種規(guī)模的網絡應用和服務,可以提供高效、可靠的服務支持。具體用法和配置我們可以參考官網的文檔和資源,利用其強大的功能構建高性能、可靠的網絡應用和服務。文章來源地址http://www.zghlxwxcb.cn/news/detail-470114.html
到了這里,關于Nginx - ?一個高性能、靈活可靠的開源Web服務器的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!