前端Nginx學習筆記

nginx簡介

1.nginx是一個高性能的Web服務器和反向代理服務器,也可做爲電子郵件代理服務器。
2.在鏈接高併發的狀況下,nginx是Apache服務不錯的替代品,可以支持高達 50,000 個併發鏈接數的響應。php

正向代理與反向代理

1.反向代理是指以代理服務器來接受Internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回到Internet上請求鏈接的客戶端,此時代理服務器對外表現爲一個反向代理服務器。
2.正向代理是指用戶沒法訪問某網站,可是能夠訪問某代理服務器,而代理服務器能夠訪問該網站。因而用戶經過訪問代理服務器去訪問該網站,代理服務器把響應信息返回給用戶。
3.反向代理中用戶訪問的IP和端口是nginx服務器的,不知道提供服務的底層服務器,底層服務器在內網中,對外公開的是nginx服務器,nginx充當中間層。而正向代理中用戶是知道目標服務器的域名信息的,知只是迫於網絡的限制沒法訪問,如最多見的訪問外網。css

nginx安裝與啓動

nginx有windows版本和linux版本,通常針對項目需求是在Linux部署nginx服務器。html

下載地址

nginx.org/en/download…前端

windows版本下載一個壓縮包,解壓便可
1.文件路徑必須爲英文,不然啓動不成功。
2.查看端口占用,nginx服務器默認啓動80端口。 cmd中node

  • netstat -an  顯示出電腦中全部被打開的端口列表
  • netstat -ano  顯示出全部佔用端口的列表
  • netstat -ano | findstr "80"  顯示出80端口占用的詳細狀況
  • tasklist | findstr "80"    查詢端口具體哪一個應用佔用

Netstat是在內核中訪問網絡鏈接狀態及其相關信息的程序,它能提供TCP鏈接,TCP和UDP監聽,進程內存管理的相關報告。python

啓動成功

  • 啓動方式1:雙擊nginx.exe
  • 啓動方式2:start nginx
  • 關閉方式1: 結束進程(兩個進程)
  • 關閉方式2:nginx -s stop

nginx配置文件

nginx的核心配置文件nginx.conf主要由3個部分組成linux

  • 基本配置
#user nobody; #配置worker進程運行用戶
worker_processes  1; #配置工做進程數目,根據硬件調整,一般等於CPU數量或者2倍於CPU數量

#error_log logs/error.log; #配置全局錯誤日誌及類型 [debug|info|notice|warn|error|crit(致命錯誤)]默認error
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid; #配置進程pid文件

複製代碼
  • events配置
#配置工做模式和鏈接數
events {
    # use epoll; #事件處理模型優化
    worker_connections  1024; #配置每一個worker進程鏈接數上限,nginx支持的總鏈接數等於worker_connections*worker_processes
    # 個人本雙核四線程,多任務運行弱,CPU主頻2.4GHz,運行緩慢
}
複製代碼
  • http配置,基本配置和多個server配置
http {
    include       mime.types;
    default_type  application/octet-stream;

    #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日誌及存放路徑,並使用上面定義的main日誌格式
    #access_log logs/access.log main;

    sendfile        on; #開啓高效文件傳輸模式
    #tcp_nopush on; #防止網絡阻塞

    #keepalive_timeout 0;
    keepalive_timeout  65; #長鏈接超時時間,單位是秒
    #gzip on; #開啓gzip壓縮輸出

    #能夠配置多個server
    server {
        listen       80; #配置監聽端口
        server_name  localhost; #配置服務名

        #charset koi8-r; #配置字符集(俄羅斯字符集) 
        #access_log logs/host.access.log main;

        #默認的匹配斜槓/的請求,當訪問路徑中有/,會被該localtion匹配到並進行處理
        #nginx根目錄 /html/index.html
        location / {
            root   html; #root根目錄,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; #配置50x錯誤頁面 html/50x.html
        #精確匹配
        location = /50x.html {
            root   html;
        }

        #PHP腳本請求所有轉發道到Apache處理
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        # proxy_pass http://127.0.0.1;
        #}

        #PHP腳本請求所有轉發道到FastCGI處理
        # 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;
        #}
        
        # 禁止訪問.htaccess文件-一般是禁止外網訪問的文件
        # 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服務,安全的網絡傳輸協議,加密傳輸,端口443
    # 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;
    # }
    #}

}
複製代碼

nginx的主要應用

1.靜態網站

nginx是一個http的web服務器,能夠將服務器上的靜態文件(html、圖片等)經過http協議返回給瀏覽器客戶端;若不配置location,nginx默認查找根目錄html中的index.html文件。nginx

server {
        listen       8080;
        server_name  localhost;
        location / {
	    root   wangyi/static; #root= ip+端口 
            index  index.html index.htm;
        }
        #訪問:localhost:8080,或以下配置
         location /static {  
	    root   wangyi;  #注意分號
            index  index.html index.htm;
        }
        #訪問:localhost:8080或localhost:8080/static
        .......
    }
複製代碼

2.負載均衡

網站服務器由多臺服務器組成一個集羣對外提供服務,當用戶輸入域名進行訪問的時候,負載均衡負責將用戶請求分發到集羣中的不一樣服務器,從而提升併發處理能力。nginx做爲訪問的統一入口,分發請求,實現負載均衡。 負載均衡實現方式有硬件負載均衡和軟件負載均衡。web

nginx負載均衡

nginx經過在nginx.conf配置文件中配置實現負載均衡 1.首先在http模塊配置windows

upstream network1{
    server 127.0.0.1:3000 weight=3; #權重
    server 127.0.0.1:5000 weight=1; 
}
複製代碼

weight表示權重,用於後端服務器性能不均的狀況,訪問比率約等於權重之比,權重越大,被訪問的概率越大。 upstream是配置nginx與後端服務器負載均衡很是重要的一個模塊,他還能對後端服務器的健康狀態進行檢查,若後端服務器中有一臺發生故障,則前端請求不會轉發到該故障機器。 2.而後在server模塊裏配置

localtion /webname{
    proxy_pass http://network1; 
}
複製代碼

參數‘http://’是固定的,network1字符串要和upstream後面的字符串相等。代理轉發到network1下,而後去匹配upstream,再去匹配upstream下的server。

node.js建立http服務器實現負載均衡

node http服務建立好之後,nginx 配置好之後,node做爲代理服務器就能夠訪問node服務了。

upstream network1 {
        server 127.0.0.1:3000 weight=3;
	server 127.0.0.1:5000 weight=1;
        server 127.0.0.1:6000 weight=1;
    }

    server {
        listen       8080;
        server_name  localhost;

        location / {
            # 訪問不到服務器,作詳細配置。
	    #proxy_redirect off; 
            #proxy_set_header X-Real-IP $remote_addr; 
            #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
            #proxy_set_header X-Forwarded-Proto $scheme; 
            #proxy_set_header Host $http_host; 
            #proxy_set_header X-NginX-Proxy true; 
            #proxy_set_header Connection ""; 
            #proxy_http_version 1.1; 
           proxy_pass http://network1;
        }
複製代碼
const http = require('http')
const fs = require('fs')
const url = require('url')
http
    .createServer((req, res) => {
        if(req.url == '/favicon.ico'){
            res.writeHead(200);
            res.end()   
            return;
        }
        res.writeHead(200);
        fs.createReadStream(__dirname + '/index.html') #不一樣的頁面內容查看效果
        .pipe(res);
    })
    .listen(5000)  #3000、6000。。。
------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>node</title>
   <link rel="stylesheet" href="">
</head>
<body>
    <div>第 1 個node服務器</div>
    <!-- <div>第 2 個node服務器</div> -->	
    <!-- <div>第 3 個node服務器</div> -->				
</body>
</html>
複製代碼

nginx能夠成功訪問服務器,訪問比大約等於權重之比。

nginx經常使用負載均衡策略
  • 1.輪詢(默認)

每一個請求輪流分配到不一樣的後端服務器,若是後端服務器宕機,則自動剔除。具體輪詢策略爲第一次訪問第一個,第二次訪問第二個。。。。。

upstream network1 {
        server 127.0.0.1:3000;
	    server 127.0.0.1:5000;
        server 127.0.0.1:6000;
    }
複製代碼
  • 2.權重

每一個請求按照必定比例分發到不一樣的後端服務器,用於後端服務器性能不均的狀況,訪問比率約等於權重之比,權重越大,被訪問的概率越大。

upstream network1 {
        server 127.0.0.1:3000 weight=3;
	    server 127.0.0.1:5000 weight=1;
        server 127.0.0.1:6000 weight=1;
    }
複製代碼
  • 3.ip_hash

ip_hash也叫ip綁定,每一個請求按照訪問ip的哈希值分配,這樣每一個訪問客戶端會固定訪問一個後端服務器,能夠解決會話session丟失的問題,常見帳號密碼登陸。 哈希函數hash("192.168.0.164")%2 = 0 / 1,ip不變的話訪問的服務器不變。

upstream network1 {
       ip_hash;
       server 127.0.0.1:3000;
       server 127.0.0.1:5000;
       server 127.0.0.1:6000;
   }
複製代碼

當使用ip_hash之後,會一直訪問3000端口的第一臺服務器。

  • 最少鏈接 web請求會被轉發到鏈接數最少的服務器上。
upstream network1 {
        least_conn;
        server 127.0.0.1:3000;
	    server 127.0.0.1:5000;
        server 127.0.0.1:6000;
    }
複製代碼
負載均衡其餘配置
upstream network1 {
        least_conn;
        server 127.0.0.1:3000;
	server 127.0.0.1:5000 backup; #備份 當全部非backup機器宕機的時候才能請求backup機器。
    }
upstream network1 {
        least_conn;
        server 127.0.0.1:3000;
	server 127.0.0.1:5000 down;#當前機器是down狀態,不參與負載均衡。
    } 
複製代碼

3.靜態代理

把全部靜態資源的訪問改成訪問nginx,而不是後臺服務器,nginx更擅長於靜態資源的處理,性能更好,效率更高。在實際應用中將靜態資源html,css,js,圖片交給nginx處理。 nginx實現靜態代理,在nginx.conf配置文件中添加靜態資源的location。
1.基於請求資源的後綴

location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${
    &emsp;root/html; #訪問靜態資源的路徑,靜態資源部署在nginx安裝目錄下,跟訪問html/index.html一個道理。
}
複製代碼

2.基於請求資源的存放目錄

location ~ .*/(js|css|img|imgags)${
    &emsp;root/opt/static
}
複製代碼

linux安裝目錄:/user/local/nginx,在linux做爲nginx部署服務器時,請求linux中存放靜態資源的某個目錄,如/opt/static

4.動靜分離

nginx的負載均衡和靜態代理結合在一塊兒,實現動靜分離,服務器專一於動態資源,nginx專一於靜態資源。

5.虛擬主機

虛擬主機就是把一臺物理服務器劃分紅多個「虛擬」的服務器,這樣咱們的一臺物理服務器就能夠當作多個服務器來使用,從而能夠配置多個網站。 Nginx下,一個server標籤就是一個虛擬主機,設置多個虛擬主機,配置多個server便可。

基於端口的虛擬主機

根據nginx的不一樣端口便可訪問到基於不一樣端口的服務器。

server {
        listen       8080; #9090。。。
        server_name  localhost;
        location / {
		  proxy_pass http://network1;
        }
 }
 upstream network1 {
        server 127.0.0.1:3000;
    }
 upstream network2 {
        server 127.0.0.1:5000;
    }
複製代碼
基於域名的虛擬主機

基於域名的虛擬主機訪問時以域名的形式訪問,這就涉及到DNS域名解析的知識,咱們能夠在windows的hosts文件給域名直接指定端口,windows C:\Windows\System32\drivers\etc有個hosts文件,若是在這裏指定了一個域名對應的ip地址,那瀏覽器會首先使用這個ip地址。

server {
        listen       8080;
        server_name  www.maanshan.com
        # server_name www.laioyang.com
        location / {
		  proxy_pass http://network1;
          #proxy_pass http://network2;
        }
 }
複製代碼
upstream network1 {
        server 127.0.0.1:3000;
    }
 upstream network2 {
        server 127.0.0.1:5000;
    }
複製代碼
虛擬主機實例

www.meituan.com

  • www.liaoyang.meituan.com
  • www.maanshan.meituan.com

相關文章
相關標籤/搜索