女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Nginx實戰全攻略

馬哥Linux運維 ? 來源:CSDN技術社區 ? 2025-03-31 10:44 ? 次閱讀

前言

Nginx 是一個高性能的 HTTP 和反向代理服務器,也是一個 IMAP/POP3 代理服務器。它以其高并發處理能力、穩定性、豐富的功能模塊和低內存消耗而聞名。

一. Nginx簡介

● Nginx (engine x) 是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務。
● 其特點是占有內存少,并發能力強,事實上nginx的并發能力在同類型的網頁服務器中表現較好
● Nginx 是一個安裝非常的簡單、配置文件非常簡潔(還能夠支持perl語法)、Bug非常少的服務。Nginx 啟動特別容易,并且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動。
● Nginx代碼完全用C語言從頭寫成。官方數據測試表明能夠支持高達 50,000 個并發連接數的響應。

二. Nginx作用

2.1 代理

- 正向代理:代理是代理客戶端的
客戶端 <一> 代理 一>服務端

9becef28-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述
正向代理是一個位于客戶端和原始服務器之間的服務器,所有客戶端的請求都首先發送到正向代理服務器,然后由代理服務器將請求轉發到原始服務器。正向代理的目的是為了隱藏客戶端的信息。

Nginx不是默認的正向代理服務器,但可以通過配置來實現正向代理的功能。

通常某些服務因為安全問題,限制固定訪問,因此可以通過正向代理解決
訪問某些國外的服務訪問慢,可以通過正向代理中繼緩解丟包和延遲高的問題

例如:VPN



http {
    resolver 8.8.8.8;
    server {
        listen 8088;
        location / {
            proxy_pass http://$http_host$request_uri;
        }
    }
}





AI寫代碼

反向代理:

反向代理,客戶端對代理是無感知的,客戶端不需要任何配置就可以訪問,客戶端將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取數據后,再返回給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器地址,隱藏了真實服務器IP地址。

Nginx是默認的反向代理服務器。以下是一個簡單的Nginx配置示例,用于設置Nginx作為反向代理服務器:

9bf9a718-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述
比如:百度的服務器是在不同的服務器上,我們只需要搜索baidu.com就行

2.2 負載均衡

如果請求數過大,單個服務器解決不了,我們增加服務器的數量,然后將請求分發到各個服務器上,將原先請求集中到單個服務器的情況改為請求分發到多個服務器上,就是負載均衡。

Nginx提供的負載均衡策略有2種:內置策略和擴展策略。內置策略為輪詢,加權輪詢,Ip hash。擴展策略,就天馬行空,只有你想不到的沒有他做不到的。

輪詢:

9c0dcc48-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

加權輪詢

9c23ff7c-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

iphash

對客戶端請求的ip進行hash操作,然后根據hash結果將同一個客戶端ip的請求分發給同一臺服務器進行處理,可以解決session不共享的問題。

9c399bd4-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

2.3 動靜分離

在我們的軟件開發中,有些請求是需要后臺處理的,有些請求是不需要經過后臺處理的(如:css、html、jpg、js等等文件),這些不需要經過后臺處理的文件稱為靜態文件。讓動態網站里的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以后,我們就可以根據靜態資源的特點將其做緩存操作。提高資源響應的速度。

9c5158e6-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

三. 安裝

下載地址:https://nginx.org/en/download.html

下載

9c6484e8-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

解壓至任意非中文路徑下:

9c75cff0-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

運行
直接雙擊nginx.exe 即可(一閃而過),或者進入cmd 輸入nginx.exe

9c833bc2-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

檢測
瀏覽器輸入:http://localhost:80 瀏覽器默認端口就是80 所以80端口可以不寫

9c8b3336-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

配置監聽
nginx的配置文件是conf目錄下的nginx.conf,默認配置的nginx監聽的端口為80,如果80端口被占用可以修改為未被占用的端口即可



  server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
...




當我們修改了nginx的配置文件nginx.conf 時,不需要關閉nginx后重新啟動nginx,只需要執行命令 nginx -s reload 即可讓改動生效

關閉nginx
如果使用cmd命令窗口啟動nginx, 關閉cmd窗口是不能結束nginx進程的,可使用兩種方法關閉nginx
(1) 輸入nginx命令 nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)
(2) 使用taskkill taskkill /f /t /im nginx.exe
taskkill是用來終止進程的,
/f是強制終止 .
/t終止指定的進程和任何由此啟動的子進程。
/im示指定的進程名稱 .

3.2 Linux

1.安裝gcc(已經安裝的可以忽略這個步驟)安裝 nginx 需要先將官網下載的源碼進行編譯,編譯依賴 gcc 環境,如果沒有 gcc 環境,則需要安裝



yum install gcc-c++






2.PCRE pcre-devel安裝(已經安裝的可以忽略這個步驟)PCRE(Perl Compatible Regular Expressions) 是一個Perl庫,包括 perl 兼容的正則表達式庫。nginx 的 http 模塊使用 pcre 來解析正則表達式,所以需要在 linux 上安裝 pcre 庫,pcre-devel 是使用 pcre 開發的一個二次開發庫。nginx也需要此庫。命令:



yum install -y pcre pcre-devel





AI寫代碼

3.zlib安裝(已經安裝的可以忽略這個步驟)zlib 庫提供了很多種壓縮和解壓縮的方式, nginx 使用 zlib 對 http 包的內容進行 gzip ,所以需要在 Centos 上安裝 zlib 庫。



yum install -y zlib zlib-devel





AI寫代碼

4.openssl安裝(已經安裝的可以忽略這個步驟)OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 SSL 協議,并提供豐富的應用程序供測試或其它目的使用。nginx 不僅支持 http 協議,還支持 https(即在ssl協議上傳輸http),所以需要在 Centos 安裝 OpenSSL 庫



yum install -y openssl openssl-devel





AI寫代碼

5.下載linux的nginx安裝包

9c987e74-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

6.上傳到linux上

7.解壓縮



tar -zxvf nginx-1.26.0.tar.gz
cd nginx-1.26.0/





AI寫代碼

8.順序執行下面三個命令



./configure
make
make install





AI寫代碼

9.查看安裝路徑 whereis nginx

9caeb284-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

10.nginx常用命令



# cd /usr/local/nginx/sbin/
# ./nginx  //啟動
# ./nginx -s stop  //停止
# ./nginx -s quit  //安全退出
# ./nginx -s reload  //重新加載配置文件
# ps aux|grep nginx  //查看nginx進程





AI寫代碼

確認開放了80端口



# 開發端口命令
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 重新加載
firewall-cmd --reload
# 查看已開放的端口
firewall-cmd --zone=public --list-ports






啟動成功訪問 http://ip:80

9cc04c7e-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

3.3 Docker

1.拉取鏡像



docker pull nginx






2.查看鏡像



[root@iZf8z89pv77t13an9qqmcrZ ~]# systemctl start docker
[root@iZf8z89pv77t13an9qqmcrZ ~]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED       SIZE
1panel/maxkb         latest    c023f10d7cab   2 weeks ago   2.66GB
nginx                latest    605c77e624dd   2 years ago   141MB
redis                latest    7614ae9453d1   2 years ago   113MB
mysql                latest    3218b38490ce   2 years ago   516MB
nacos/nacos-server   latest    bdf60dc2ada3   2 years ago   1.05GB





AI寫代碼

3.運行鏡像



[root@iZwz96byk26u1sns4xp7giZ ~]# docker run --name mn -d -p 80:80 nginx
49c02ef7c18facc452762fa7e722720235290df28fce39b6aebb8b024ae21d70






4.檢測

9cd10244-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

掛載
簡單啟動nginx



docker run --name mn -d -p 80:80 nginx





AI寫代碼

創建配置文件夾



mkdir -p /opt/nginx





AI寫代碼

復制文件



docker cp mn:/usr/share/nginx/html /opt/mount/nginx/
docker cp mn:/etc/nginx/nginx.conf /opt/mount//nginx/
docker cp mn:/etc/nginx/conf.d /opt/mount/nginx/





AI寫代碼

刪除原有的Nginx容器



docker rm -f mn





AI寫代碼

創建容器



docker run --name nginx -d 
-p 80:80 -p 81:81 
-v /opt/mount/nginx/html:/usr/share/nginx/html 
-v /opt/mount/nginx/nginx.conf:/etc/nginx/nginx.conf:ro 
-v /opt/mount/nginx/conf.d:/etc/nginx/conf.d 
nginx:1.26.0





AI寫代碼

修改配置

9ce252b0-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

把端口改為81

9cf4f5c8-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

四. 實戰

1.將某個現有的項目打包

9da0f72e-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述
2.運行jar項目
打開window命令窗口,啟動服務java -jar SpringBoot-Redis-1.0-SNAPSHOT.jar
9dc69984-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述
3.在打開另外一個窗口,啟動一個8081的服務
java -jar SpringBoot-Redis-1.0-SNAPSHOT.jar --server.port=8081
9dd5c74c-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述
4.啟動nginx服務. ginx.exe
9de34926-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述
5.修改nginx配置



upstream zyy {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
      proxy_pass  http://zyy;

        }
        ##....
}


9df1efe4-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

五. 配置詳解

https://blog.csdn.net/weixin_43239880/article/details/130841067

5.1原本配置到解釋

我們把其中的注釋都刪掉,除掉了注釋之后的nginx代碼,現在只有22行了



worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}


注解版本



#nginx進程數,建議設置為等于CPU總核心數。
worker_processes  1;
# 事件區塊開始
events {
    #單個進程最大連接數(最大連接數=連接數*進程數)
    #根據硬件調整,和前面工作進程配合起來用,盡量大,但是別把cpu跑到100%就行。每個進程允許的最多連接數,理論上每臺nginx服務器的最大連接數為。
    worker_connections  1024;
}
#設定http服務器,利用它的反向代理功能提供負載均衡支持
http {
    #include:導入外部文件mime.types,將所有types提取為文件,然后導入到nginx配置文件中
    include       mime.types;
     #默認文件類型
    default_type  application/octet-stream;
    #開啟高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對于普通應用設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。注意:如果圖片顯示不正常把這個改成off。
    #sendfile指令指定 nginx 是否調用sendfile 函數(zero copy 方式)來輸出文件,對于普通應用,必須設為on。如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網絡IO處理速度,降低系統uptime。
    sendfile        on;
      #長連接超時時間,單位是秒
    keepalive_timeout  65;
    # 第一個Server區塊開始,表示一個獨立的虛擬主機站點
    server {
        # 提供服務的端口,默認80
        listen       80;
        # 提供服務的域名主機名
        server_name  localhost;
        #對 "/" 啟用反向代理,第一個location區塊開始
        location / {
            root   html;  #服務默認啟動目錄
            index  index.html index.htm; # 默認的首頁文件,多個用空格分開
        }
         # 錯誤頁面路由
        error_page   500 502 503 504  /50x.html; # 出現對應的http狀態碼時,使用50x.html回應客戶
        location = /50x.html { # location區塊開始,訪問50x.html
            root   html;  # 指定對應的站點目錄為html
        }
    }
}

5.2 整體基本理解

雖然上面有了注解,但是看起來還是很迷糊。接著解釋:我們可以把nginx.conf分為三個部分進行理解:
第一部分:全局塊
第二部分:events塊
第三部分:http塊

9e057604-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述

六. Nginx與網關的區別

本質上API網關也是做了請求的轉發,那既然Nginx也可以做請求轉發,那這兩者有什么區別?

9e179424-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述
在具體架構設計時Nginx做負載均衡時,考慮到API網關在系統中不止一個(以集群的方式做高可用),通常可以將Nginx至于API網關前,負責對API網關的負載均衡,然后再由網關決定進入根據判定到哪個真實的web 服務器。讓兩者的分工更加明確,也就是:API網關聚合服務,Nginx請求轉發

業務網關(gateway):對于具體的后端業務應用或者是服務和業務有一定關聯性的策略網關。業務網關針對具體的業務需要提供特定的流控策略、緩存策略、鑒權認證策略

流量網關(Nginx):與業務網關相反,定義全局性的、跟具體的后端業務應用和服務完全無關的策略網關。流量網關通常只專注于全局的Api管理策略,比如全局流量監控、日志記錄、全局限流、黑白名單控制、接入請求到業務系統的負載均衡等

業務網關一般部署在流量網關之后、業務系統之前,比流量網關更靠近業務系統。通常API網指的是業務網關。有時候我們也會模糊流量網關和業務網關,讓一個網關承擔所有的工作,所以這兩者之間并沒有嚴格的界線。

9e2bb8c8-0aef-11f0-9310-92fbcf53809c.png在這里插入圖片描述
nginx與gateway的區別:

編寫語言:
○ Nginx是用C語言編寫的,這使得它在處理高并發連接時表現出色,但它的配置和擴展相對有限。
○ Gateway(如Spring Cloud Gateway)通常使用Java編寫,提供了更豐富的服務治理和路由轉發功能,使得在微服務架構中更容易實現擴展功能。

功能特性:
○ Nginx更側重于反向代理和負載均衡功能,如HTTP代理、TCP代理、HTTP緩存、SSL加密等。
○ Gateway(如Spring Cloud Gateway)提供了豐富的服務治理和路由轉發功能,如服務注冊和發現、熔斷降級、限流等。

部署方式:
○ Nginx通常部署在傳統的Web服務器架構中,可以作為流量入口,處理大量的并發連接。
○ Gateway(如Spring Cloud Gateway)通常部署在微服務架構中,與Spring Cloud的其他組件(如Eureka、Zuul等)進行無縫集成,提供統一的API路由管理。

擴展性:
○ 對于Nginx的擴展,通常需要結合Lua等腳本語言,這可能需要額外的學習成本。
○ Gateway(如Spring Cloud Gateway)由于使用Java編寫,可以更容易地集成到微服務的擴展功能中,利用Java生態系統的豐富資源。

總結來說,Nginx和Gateway在微服務架構中都發揮著重要的作用,但它們的設計目標、功能特性和擴展方式有所不同。選擇哪種作為網關取決于具體的項目需求和技術棧。

Nginx在其中扮演的角色是什么?
● 反向代理
● 負載均衡
SpringGateway在其中扮演的角色是什么?
● 統一鑒權
● 負載均衡
● 服務發現

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 網關
    +關注

    關注

    9

    文章

    5277

    瀏覽量

    52458
  • 服務器
    +關注

    關注

    13

    文章

    9686

    瀏覽量

    87280
  • HTTP
    +關注

    關注

    0

    文章

    521

    瀏覽量

    32453
  • nginx
    +關注

    關注

    0

    文章

    163

    瀏覽量

    12491

原文標題:Nginx實戰全攻略:從安裝配置到反向代理,詳解與網關的差異及性能優化技巧

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    GPS 設計全攻略

    GPS 設計全攻略
    發表于 09-25 14:11

    LED技術全攻略

    LED技術全攻略
    發表于 09-25 14:16

    GPS 設計全攻略

    GPS 設計全攻略
    發表于 12-05 12:08

    GPS設計全攻略

    本帖最后由 zgzzlt 于 2012-8-16 13:58 編輯 GPS設計全攻略
    發表于 08-06 12:56

    LED技術全攻略

    本帖最后由 zgzzlt 于 2012-8-16 13:56 編輯 LED技術全攻略
    發表于 08-06 12:59

    MCU解密全攻略

    MCU解密全攻略
    發表于 08-19 14:28

    FPGA開發全攻略

    FPGA開發全攻略
    發表于 05-10 11:40

    FPGA開發全攻略

    FPGA開發全攻略
    發表于 09-27 10:59

    FPGA開發全攻略

    FPGA開發全攻略
    發表于 05-21 09:28

    FPGA開發全攻略

    FPGA開發全攻略
    發表于 03-03 10:30

    FPGA開發全攻略

    FPGA開發全攻略
    發表于 03-07 11:46

    MCU解密全攻略

    本內容介紹了MCU解密的全攻略教程
    發表于 07-11 17:51 ?649次下載
    MCU解密<b class='flag-5'>全攻略</b>

    LED調光技術全攻略

    LED調光技術全攻略
    發表于 02-08 00:50 ?42次下載

    LED驅動電源方案全攻略

    LED驅動電源方案全攻略
    發表于 01-14 12:22 ?43次下載

    智能小車的DIY全攻略

    智能小車的DIY全攻略
    發表于 10-13 09:13 ?28次下載
    智能小車的DIY<b class='flag-5'>全攻略</b>