Nginx的安裝和使用

Nginx的安裝和使用

Nginx主要功能:反向代理悯森、負(fù)載均衡卧秘、動靜分離

使用docker-compose安裝

cd /opt/docker_compose
mkdir docker_nginx
cd docker_nginx
touch docker-compose.yml

編寫docker-compose.yml后保存

version: '3.1'
services:
  nginx:
    restart: always
    image: daocloud.io/library/nginx:latest
    container_name: nginx
    ports:
      - 80:80

執(zhí)行

docker-compose up -d

啟動容器

此時瀏覽器正常訪問


Nginx的配置文件

關(guān)于Nginx的核心配置文件nginx.conf,所在容器內(nèi)部的位置是/etc/nginx/

user  nginx;        # Nginx用戶
worker_processes  1;        # 工作進(jìn)程姆蘸,數(shù)目墩莫。根據(jù)硬件調(diào)整,通常等于CPU數(shù)量或者2倍于CPU

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;      # pid(進(jìn)程標(biāo)識符):存放路徑逞敷。
# 以上稱為全局塊狂秦。
# worker_processes他的數(shù)值越大,Nginx的并發(fā)能力就越強
# error_log 代表Nginx的錯誤日志存放的位置

events {
    worker_connections  1024;       # 每個工作進(jìn)程的最大連接數(shù)量推捐。根據(jù)硬件調(diào)整裂问,和前面工作進(jìn)程配合起來用,盡量大玖姑,但是別把cpu跑到100%就行
}
# events塊
# worker_connections他的數(shù)值越大愕秫,Nginx并發(fā)能力越強

http {      # http塊
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    #include代表引入一個外部的文件 -> mime.types中放著大量的媒體類型
    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  /var/log/nginx/access.log  main;        # 日志

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;      # keepalive超時時間  單位是秒

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;       # -> 引入了conf.d目錄下的以.conf為結(jié)尾的配置文件
    # 相當(dāng)于引入外部的配置文件,咱們主要關(guān)注這個文件 include /etc/nginx/conf.d/*.conf;
}

default.conf文件

# 這個是 /etc/nginx/conf.d/default.conf;   這個配置文件  大部分內(nèi)容被注釋掉了  是一些配置示例

server {
    listen       80;        # nginx 默認(rèn)監(jiān)聽的端口號
    listen  [::]:80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    
    # location塊
    # root:將接收到的請求根據(jù)/url/share/nginx/html去查找靜態(tài)資源
    # index:默認(rèn)去上述的路徑中找index.html或者index.htm
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #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   /usr/share/nginx/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;
    #}
}

修改docker-compose文件

為了方便修改Nginx配置焰络,修改yml文件

version: '3.1'
services:
  nginx:
    restart: always
    image: daocloud.io/library/nginx:latest
    container_name: nginx
    ports:
      - 80:80
    volumes:
      - /opt/docker_compose/docker_nginx/conf.d:/etc/nginx/conf.d

這里注意戴甩,使用docker-compose創(chuàng)建容器,掛載的容器卷里面的內(nèi)容是空的闪彼,需要自己在容器卷內(nèi)創(chuàng)建配置文件甜孤,比如 默認(rèn)端口 默認(rèn)訪問頁面的配置 即上文的 default.conf內(nèi)的配置


Nginx的反向代理

正向代理和反向代理介紹

正向代理
  • 正向代理服務(wù)是由客戶端設(shè)立的
  • 客戶端了解代理服務(wù)器和目標(biāo)服務(wù)器都是誰
  • 幫助咱們實現(xiàn)突破訪問權(quán)限,提高訪問的速度畏腕,對目標(biāo)服務(wù)器隱藏客戶端的ip地址
反向代理
  • 反向代理服務(wù)器是配置在服務(wù)端的
  • 客戶端是不知道訪問的到底是哪一臺服務(wù)器
  • 達(dá)到負(fù)載均衡缴川,并且可以隱藏服務(wù)器真正的ip地址

基于Nginx實現(xiàn)反向代理

準(zhǔn)備一個目標(biāo)服務(wù)器
啟動了之前的tomcat服務(wù)器
編寫nginx的配置文件,通過Nginx訪問到tomcat服務(wù)

server {
    listen       80;
    server_name  localhost;
    # 基于反向代理訪問到Tomcat服務(wù)器
    location / {
        proxy_pass http://10.10.0.19:8080/;
    }
}

剛剛訪問Nginx的80端口描馅,現(xiàn)在顯示的是Tomcat的頁面了


關(guān)于Nginx的location路徑映射

優(yōu)先級關(guān)系如下

  • location = /路徑:優(yōu)先級最高把夸,精準(zhǔn)匹配,一旦匹配铭污,不再去找其他匹配項恋日。
  • location ^- /路徑:優(yōu)先級辭職,字符串匹配嘹狞,一旦匹配岂膳,不再去找其他匹配項。
  • location - 正則表達(dá)式:如果有多個location的正則表達(dá)式匹配的話磅网,則使用正則表達(dá)式最長的那個谈截。
  • location -* 正則表達(dá)式:和location - 正則表達(dá)式相同,不過黨前方式不區(qū)分大小寫
  • location /路徑:常規(guī)方式,匹配前綴簸喂,優(yōu)先級最低

注意:有沒有映射(陪陪)上是一回事毙死,映射上了location,有沒有找到對應(yīng)的資源是另一回事
舉個例子:

# 直接匹配      優(yōu)先級最高
location =/ {
    # 精確匹配娘赴,主機名后不能帶任何的字符串
}
    
# 完全匹配      精確匹配    a
location /aaa/bbb/ccc/d.html {
    proxy_pass http://10.10.0.19:8080/;
}
    
# 匹配開頭路徑    正則皮牌    b       a>b
location ^- /aaa/bbb {
    # 匹配所有以/aaa/bbb開頭的路徑规哲,陪陪后,不再篩選其他選項
}
    
# 正則匹配      優(yōu)先級 c       b>c 但是  c>a
location - /aaa/bbb {
    # 匹配所有以/aaa/bbb開頭的路徑
}
    
    location -/aaa/bbb/ccc {
        proxy_pass http://10.10.0.19:8080/;
    }
    
# 正則匹配后綴    優(yōu)先級4
location -* \.(gif|jpg|png)$ {
    # 匹配以gif或者jpg或者png為結(jié)尾的路徑
}

# 常規(guī)匹配  通用匹配    優(yōu)先級5
location /xxx {
    # 匹配所有以/xxx開頭的路徑
}

# 全部通賠      優(yōu)先級6
location / {
    # 匹配全部路徑
}

Nginx負(fù)載均衡

Nginx為我們默認(rèn)提供了三中負(fù)載均衡的策略:

  • 輪詢:將客戶端發(fā)起的請求诽表,平均的分配給每一臺服務(wù)器唉锌。默認(rèn)策略
  • 權(quán)重:會將客戶端的請求,根據(jù)服務(wù)器的權(quán)重值不同竿奏,分配不同的數(shù)量袄简。
  • ip_hash:基于發(fā)起請求的客戶端的ip地址不同,他始終會將請求發(fā)送到指定的服務(wù)器上泛啸。根據(jù)ip地址計算出一個結(jié)果绿语,根據(jù)這個結(jié)果找對應(yīng)的服務(wù)器

輪詢

想實現(xiàn)Nginx輪詢負(fù)載均衡機制只需要在配置文件中添加以下內(nèi)容

upstream 名字 {
  server ip:port;
  server ip:port;
  ...
}
server {
  listen 80;
  server_name localhost;

  location / {
    proxy_pass http://upstream的名字/;
  }
}

##########  輪詢訪問    一次80    一次81
#負(fù)載均衡
upstream ssm {
  server 10.10.0.19:8080;
  server 10.10.0.19:8081;
  ...
}
server {
  listen 80;
  server_name localhost;

# 演示 負(fù)載均衡
  location /ssm {
    proxy_pass http://ssm;
  }
}

權(quán)重

實現(xiàn)權(quán)重的方式

upstream 名字 {
  server ip:port weight=權(quán)重比例;
  server ip:port weight=權(quán)重比例;
  ...
}
server {
  listen 80;
  server_name localhost;

  location / {
    proxy_pass http://upstream的名字/;
  }
}

##########  輪詢訪問    一次80    四次81
#負(fù)載均衡
upstream ssm {
  server 10.10.0.19:8080 weight=2;
  server 10.10.0.19:8081 weight=8;
  ...
}
server {
  listen 80;
  server_name localhost;

# 演示 負(fù)載均衡
  location /ssm {
    proxy_pass http://ssm;
  }
}

ip_hash

ip_hash實現(xiàn) 根據(jù)hash算法,固定訪問某個地址
只需加上ip_hash;即可

upstream 名字 {
  ip_hash;
  server ip:port;
  server ip:port;
  ...
}
server {
  listen 80;
  server_name localhost;

  location / {
    proxy_pass http://upstream的名字/;
  }
}

Nginx動靜分離

Nginx的并發(fā)能力公式:

worker_processes * worker_connections / 4 | 2 = Nginx最終的并發(fā)能力

動態(tài)資源需要/4候址,靜態(tài)需要需要/2
Nginx通過動靜分離吕粹,來提升Nginx的并發(fā)能力,更快的給客戶響應(yīng)

動態(tài)資源代理

使用proxy_pass動態(tài)代理

# 配置如下
location / {
  proxy_pass 路徑;
}

靜態(tài)資源代理

使用root靜態(tài)代理

location / {
  root 靜態(tài)資源路徑;
  index 默認(rèn)訪問路徑下的什么資源;
  autoindex on; # 代表展示靜態(tài)資源的全部內(nèi)容岗仑,以列表的行使展開匹耕。
}

# 先修改docker,添加一個數(shù)據(jù)卷荠雕,映射到Nginx服務(wù)器的一個目錄
version: '3.1'
services:
  nginx:
    restart: always
    image: daocloud.io/library/nginx:latest
    container_name: nginx
    ports:
      - 80:80
    volumes:
      - /opt/docker_compose/docker_nginx/conf.d:/etc/nginx/conf.d
      - /opt/docker_compose/docker_nginx/images/:/usr/share/nginx/images
      - /opt/docker_compose/docker_nginx/css/:/usr/share/nginx/css
      - /opt/docker_compose/docker_nginx/js/:/usr/share/nginx/js
      - /opt/docker_compose/docker_nginx/html/:/usr/share/nginx/html


# 添加了index.html和boy.png鏡頭資源
在tomcat的jsp 動態(tài)頁面  引用nginx 中的靜態(tài)資源
<img src="/image/boy.png">
# 修改配置文件
upstream test {
  server ip:port weight=權(quán)重比例;
  server ip:port weight=權(quán)重比例;
  ...
}
      
server {
    listen       80;        # nginx 默認(rèn)監(jiān)聽的端口號
    listen  [::]:80; 
    server_name  localhost;

#    location / {
#        root /usr/share/nginx/html;
#        index index.html index.htm;
#        proxy_pass http://10.10.0.19:8080/;
#    }


    location /images {
        root /usr/share/nginx/html;
        autoindex on; # 代表展示靜態(tài)資源的全部內(nèi)容稳其,以列表的行使展開。
    }

    location /css {
        root /usr/share/nginx/html;
        autoindex on; # 代表展示靜態(tài)資源的全部內(nèi)容炸卑,以列表的行使展開既鞠。
    }

    location /js {
        root /usr/share/nginx/html;
        autoindex on; # 代表展示靜態(tài)資源的全部內(nèi)容,以列表的行使展開盖文。
    }

    location /html {
        root /usr/share/nginx/html;
        autoindex on; # 代表展示靜態(tài)資源的全部內(nèi)容嘱蛋,以列表的行使展開。
    }

    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
        proxy_pass http://test/;
    }
    
}

@歐幣杰昔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末五续,一起剝皮案震驚了整個濱河市洒敏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌返帕,老刑警劉巖桐玻,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篙挽,死亡現(xiàn)場離奇詭異荆萤,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門链韭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來偏竟,“玉大人,你說我怎么就攤上這事敞峭∮荒保” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵旋讹,是天一觀的道長殖蚕。 經(jīng)常有香客問我,道長沉迹,這世上最難降的妖魔是什么睦疫? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮鞭呕,結(jié)果婚禮上蛤育,老公的妹妹穿的比我還像新娘。我一直安慰自己葫松,他們只是感情好瓦糕,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著腋么,像睡著了一般咕娄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上党晋,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天谭胚,我揣著相機與錄音,去河邊找鬼未玻。 笑死灾而,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扳剿。 我是一名探鬼主播旁趟,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼庇绽!你這毒婦竟也來了锡搜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤瞧掺,失蹤者是張志新(化名)和其女友劉穎耕餐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辟狈,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡肠缔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年夏跷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片明未。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡槽华,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出趟妥,到底是詐尸還是另有隱情猫态,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布披摄,位于F島的核電站亲雪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疚膊。R本人自食惡果不足惜匆光,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望酿联。 院中可真熱鬧终息,春花似錦、人聲如沸贞让。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喳张。三九已至续镇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間销部,已是汗流浹背摸航。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留舅桩,地道東北人酱虎。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像擂涛,于是被迫代替她去往敵國和親读串。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容