當前位置:首頁 > IT技術(shù) > 其他 > 正文

0009 Nginx知識點
2022-08-29 23:56:33

01 nginx基礎(chǔ)概念

1.1 什么是nginx

  l?是一個高性能的HTTP和反向代理服務(wù)器

  l?特點:占有內(nèi)存少,并發(fā)能力強

  l?事實上Nginx的并發(fā)能力確實在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好

  l?可以作為靜態(tài)頁面的web服務(wù)器,同時還支持CGI協(xié)議的動態(tài)語言,如perlPHP

  l?不支持java,java程序只能通過與tomcat配合完成

  l 專為性能優(yōu)化而開發(fā),是線上非常注重效率,能經(jīng)受高負載的考驗,最大支持的并發(fā)連接數(shù)是50000

  l 支持熱部署,啟動特別容易,并且?guī)缀踝龅?/span>7*24不間斷運行,即使運行幾個月也不需要重新啟動,還能夠在不間斷服務(wù)的情況下,對軟件版本進行升級

1.2 反向代理

1) 正向代理

  在客戶端(瀏覽器)配置代理服務(wù)器,通過代理服務(wù)器進行互聯(lián)網(wǎng)訪問的過程

  

2)反向代理

  反向代理:其實客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問。

  我們需要將請求發(fā)送到反向代理服務(wù)器,由反向代理服務(wù)器去選擇目標服務(wù)器并獲取數(shù)據(jù),然后在返回給客戶端,

  此時反向代理服務(wù)器和目標服務(wù)器對外是一臺服務(wù)器,暴露的是代理服務(wù)器地址,隱藏了真是服務(wù)器的IP地址。

  

?1.3 負載均衡

  普通請求處理方式:客戶端發(fā)送多個請求到服務(wù)器,服務(wù)器處理請求,有一些可能要與數(shù)據(jù)庫進行交互,服務(wù)器處理完畢后,再講結(jié)果返回給服務(wù)端

?   

  單個服務(wù)器解決不了,我們增加服務(wù)器的數(shù)量,然后將請求分發(fā)到各個服務(wù)器上,將原先請求集中到單個服務(wù)器上的情況改為請求分發(fā)到多個服務(wù)器上,將負載分發(fā)到不同的服務(wù)器,就是我們所說的負載均衡

  

1.4 動靜分離

  為了加快網(wǎng)站的解析速度,可以把動態(tài)頁面和靜態(tài)頁面由不同的服務(wù)器來解析,加快解析速度,降低原來單個服務(wù)器的壓力

?

?

  

?02 nginx安裝,常用命令和配置文件

2.1 nginx安裝(linux)結(jié)合docker

步驟一:docker search nginx

  

?步驟二:拉取最新版本的Nginx

  

?步驟三:新建并運行

  

?步驟四:訪問

  

說明:

安裝完成后,我們可以使用以下命令來運行 nginx 容器:

$ docker run --name nginx-test -p 8080:80 -d nginx

參數(shù)說明:

  •  --name nginx-test:容器名稱。
  • -p 8080:80: 端口進行映射,將本地 8080 端口映射到容器內(nèi)部的 80 端口。
  • -d nginx: 設(shè)置容器在在后臺一直運行。

注意:

  1. 其中的會出現(xiàn)加載時間過長的問題,其原因是配置文件中的問題,需要修改
  2. 配置文件中的端口與啟動映射的管口要保持一致才行

?安裝完成之后,在user多出來一個文件夾local/nginx,在Nginx中有sbin啟動腳本

?

?2.2 常用命令

01 使用nginx操作命令的前提條件:必須進入nginx的目錄中/user/local/nginx/sbin

02 查看nginx的版本號:./nginx -V

?  

03 啟動nginx: ?./nginx

?  

?04? 關(guān)閉nginx: ?./nginx -s stop

?   

? 05 查看nginx狀態(tài): ?ps -ef | grep nginx

  

?06 重新加載nginx: ?./nginx -s reload

  

?2.3配置文件

01 配位文件的位置

  

?02 配置文件的內(nèi)容

#===================全局塊開始======================
#user  nobody;
#工作進程數(shù),一般配置成和cpu數(shù)量一致
worker_processes  1;
#全局錯誤日志及pid文件存放位置
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#nginx 啟動master進程pid號
#pid        logs/nginx.pid;
#=================全局塊結(jié)束============================
      
#==============events塊開始======================
events {
#標識單個worker進程的最大并發(fā)數(shù)
    worker_connections  1024;
}
#============events塊結(jié)束============================

#============http塊開始(nginx服務(wù)器中配置最頻繁的部分,配置虛擬主機,監(jiān)聽端口,請求轉(zhuǎn)發(fā)等等)==========================
http {
    #引入 mime 類型定義文件
    include       mime.types;
    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"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
  #連接的超時時間
    #keepalive_timeout  0;
    keepalive_timeout  65;
   #解開注釋就是開啟gzip壓縮
    #gzip  on;
    #此處配置多臺tomcat服務(wù)器(名稱不能有下劃線:webServer)
    upstream webServer{
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
     } 
	#此處配置多臺tomcat服務(wù)器(名稱不能有下劃線:webs2Server)
    #upstream webs2Server{
      #server 192.168.30.19:8083;
      #server 192.168.32.12:8085;
    #}
    server {
        #定義當前這個server監(jiān)聽的端口
        listen       80;
        #定義使用localhost訪問
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        #默認請求地址,如果請求是:192.168.10.80:80/  那么會進入這個里面的tomcat反向代理地址
        #一個location里面只能有一個proxy_pass
        location / {
        #此處可以配置Tomcat反向代理地址比如:
        #此處可以引用上面upstream 的多臺tomcat;也可以單獨配置一臺
        proxy_pass http://127.0.0.1:8081/; #配置單臺
        #proxy_pass http://webServer/; #引用上面的多臺
        #引用上面的多臺配置
           # root   html; #默認的網(wǎng)站根目錄的位置
            #index  index.html index.htm; #網(wǎng)站的歡迎頁,起始頁
        }
        #表示如果請求是:192.168.10.80:80/web 那么會進入這個里面的tomcat反向代理地址
        location /web {
        #此處引用上面的配置的多臺tomcat
        #proxy_pass http://127.0.0.1:8082/;
        #proxy_pass http://w eb2Server/; #引用上面的多臺Tomcat配置
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        #錯誤提示頁面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ .php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ .php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /.ht {
        #    deny  all;
        #}
    }
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

?03 配置文件組成

  1)有但部分組成

    

?    

03 nginx配置實例-反向代理

1)?實現(xiàn)效果:打開瀏覽器,在瀏覽器地址欄輸入地址www.123.com,跳轉(zhuǎn)到linux系統(tǒng)tomcat主頁面中

2)?準備工作

(1)linux系統(tǒng)安裝tomcat,并使用默認端口8080 ?

  

?3)在windows系統(tǒng)中通過瀏覽器訪問tomcat服務(wù)器

  

3)?訪問過程分析

  

4)?具體配置

(1)?nginx中進行 請求轉(zhuǎn)發(fā)的配置(反向代理)

???????

5)?最終測試

??????

?

?

04 nginx配置實例--反向代理02

1)實現(xiàn)效果:

    使用nginx反向代理,根據(jù)訪問的路徑不同跳轉(zhuǎn)到不同端口的服務(wù)中去

    Nginx監(jiān)聽端口為9001

    訪問http://127.0.0.1:9001/edu/ 直接跳轉(zhuǎn)到127.0.0.1:8080

    訪問http://127.0.0.1:9001/vod/ 直接跳轉(zhuǎn)到127.0.0.1:8081

2)準備工作

  (1)?準備兩個tomcat服務(wù)器,一個是8080端口,一個是8081端口

 ?。?)?準備文件夾和測試頁面

3)具體配置

 ?。?)找到nginx的配置文件,進行反向代理配置

    

 ?。?)開放對外訪問的端口號 9001, 8080,,8081

4)最終測試

   

 說明:

?  

?05 nginx配置實例--負載均衡

1)?實現(xiàn)效果

  瀏覽器地址欄輸入地址http://192.168.17.129/edu/a.html 負載均衡效果,平均到80808081端口中

2)?準備工作

  1. 準備兩臺tomcat服務(wù)器,分別是8080,,8081
  2. 在兩臺tomcat里面webapps目錄中,創(chuàng)建名稱為edu文件夾,在edu文件夾中創(chuàng)建頁面a.html

3)?nginx的配置文件中進行負載均衡的配置工作

  

?06nginx分配服務(wù)器策略

第一種:輪詢(默認)

  每個請求按照時間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,會被自動踢出

第二種: 權(quán)重

  weight代表權(quán)重,默認為1,權(quán)重越高被分配的客戶端越多

?  

  通過修改weight的值即可

第三種:ip_hash:按照每個請求訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器,可以解決session的問題

 

?  可以解決session共享問題

第四種:fair:按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配

?  

?07 ngnix配置實例--動靜分離

  動靜分離簡單來說就是把動態(tài)請求和靜態(tài)請求分開,不能理解為把動態(tài)頁面和靜態(tài)頁面物理分離

?????

動靜分離的兩種方式

  1. 純粹的把靜態(tài)文件獨立成單獨的域名,放到獨立的服務(wù)器上,(兩個tomcat)(主流推崇)
  2. 動態(tài)和靜態(tài)文件混合在一起發(fā)布,通過nginx來分開處理

1)?準備工作

?

2)? 具體配置

nginx配置文件中進行配置

?3)最終測試

 ???  

?  

?08 nginx配置高可用集群

01 什么是高可用

面臨的問題:如果nginx宕機(即請求無法實現(xiàn)的效果)

?

?高可用

(1)需要兩臺nginx服務(wù)器

(2)需要keepalived

(3)需要一個虛擬ip

?

?安裝之后,在etc里面生成目錄keepalived,有文件keepalived.conf

4.完成高可用配置(主從配置)

配置文件keepalived.conf(兩臺服務(wù)器都需要)

?

?主服務(wù)器

?

?腳本文件

?

?備份服務(wù)器

?腳本文件

最終測試:

(1)在瀏覽器地址欄輸入虛擬ip地址 192.168.17.50

?

訪問

(2)把主服務(wù)器(192.168.17.129nginxkeepalived停止(先停keepalived,再停止nginx),然后輸入192.168.17.50,仍能正常訪問

?

?從(備)服務(wù)器中的效果

?瀏覽器

?

?09 nginx原理解析

?

?

本文摘自 :https://www.cnblogs.com/

開通會員,享受整站包年服務(wù)立即開通 >