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

0009 Nginx知識點(diǎn)
2022-08-29 23:56:33

01 nginx基礎(chǔ)概念

1.1 什么是nginx

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

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

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

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

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

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

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

1.2 反向代理

1) 正向代理

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

  

2)反向代理

  反向代理:其實(shí)客戶端對代理是無感知的,因?yàn)榭蛻舳瞬恍枰魏闻渲镁涂梢栽L問。

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

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

  

?1.3 負(fù)載均衡

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

?   

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

  

1.4 動(dòng)靜分離

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

?

?

  

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

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

步驟一:docker search nginx

  

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

  

?步驟三:新建并運(yùn)行

  

?步驟四:訪問

  

說明:

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

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

參數(shù)說明:

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

注意:

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

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

?

?2.2 常用命令

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

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

?  

03 啟動(dòng)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;
#工作進(jìn)程數(shù),一般配置成和cpu數(shù)量一致
worker_processes  1;
#全局錯(cuò)誤日志及pid文件存放位置
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#nginx 啟動(dòng)master進(jìn)程pid號
#pid        logs/nginx.pid;
#=================全局塊結(jié)束============================
      
#==============events塊開始======================
events {
#標(biāo)識單個(gè)worker進(jìn)程的最大并發(fā)數(shù)
    worker_connections  1024;
}
#============events塊結(jié)束============================

#============http塊開始(nginx服務(wù)器中配置最頻繁的部分,配置虛擬主機(jī),監(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;
  #連接的超時(shí)時(shí)間
    #keepalive_timeout  0;
    keepalive_timeout  65;
   #解開注釋就是開啟gzip壓縮
    #gzip  on;
    #此處配置多臺(tái)tomcat服務(wù)器(名稱不能有下劃線:webServer)
    upstream webServer{
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
     } 
	#此處配置多臺(tái)tomcat服務(wù)器(名稱不能有下劃線:webs2Server)
    #upstream webs2Server{
      #server 192.168.30.19:8083;
      #server 192.168.32.12:8085;
    #}
    server {
        #定義當(dāng)前這個(gè)server監(jiān)聽的端口
        listen       80;
        #定義使用localhost訪問
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        #默認(rèn)請求地址,如果請求是:192.168.10.80:80/  那么會(huì)進(jìn)入這個(gè)里面的tomcat反向代理地址
        #一個(gè)location里面只能有一個(gè)proxy_pass
        location / {
        #此處可以配置Tomcat反向代理地址比如:
        #此處可以引用上面upstream 的多臺(tái)tomcat;也可以單獨(dú)配置一臺(tái)
        proxy_pass http://127.0.0.1:8081/; #配置單臺(tái)
        #proxy_pass http://webServer/; #引用上面的多臺(tái)
        #引用上面的多臺(tái)配置
           # root   html; #默認(rèn)的網(wǎng)站根目錄的位置
            #index  index.html index.htm; #網(wǎng)站的歡迎頁,起始頁
        }
        #表示如果請求是:192.168.10.80:80/web 那么會(huì)進(jìn)入這個(gè)里面的tomcat反向代理地址
        location /web {
        #此處引用上面的配置的多臺(tái)tomcat
        #proxy_pass http://127.0.0.1:8082/;
        #proxy_pass http://w eb2Server/; #引用上面的多臺(tái)Tomcat配置
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        #錯(cuò)誤提示頁面
        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配置實(shí)例-反向代理

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

2)?準(zhǔn)備工作

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

  

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

  

3)?訪問過程分析

  

4)?具體配置

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

???????

5)?最終測試

??????

?

?

04 nginx配置實(shí)例--反向代理02

1)實(shí)現(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)準(zhǔn)備工作

 ?。?)?準(zhǔn)備兩個(gè)tomcat服務(wù)器,一個(gè)是8080端口,一個(gè)是8081端口

  (2)?準(zhǔn)備文件夾和測試頁面

3)具體配置

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

    

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

4)最終測試

   

 說明:

?  

?05 nginx配置實(shí)例--負(fù)載均衡

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

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

2)?準(zhǔn)備工作

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

3)?nginx的配置文件中進(jìn)行負(fù)載均衡的配置工作

  

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

第一種:輪詢(默認(rèn))

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

第二種: 權(quán)重

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

?  

  通過修改weight的值即可

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

 

?  可以解決session共享問題

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

?  

?07 ngnix配置實(shí)例--動(dòng)靜分離

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

?????

動(dòng)靜分離的兩種方式

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

1)?準(zhǔn)備工作

?

2)? 具體配置

nginx配置文件中進(jìn)行配置

?3)最終測試

 ???  

?  

?08 nginx配置高可用集群

01 什么是高可用

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

?

?高可用

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

(2)需要keepalived

(3)需要一個(gè)虛擬ip

?

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

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

配置文件keepalived.conf(兩臺(tái)服務(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/

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