Nginx入門教程

一 Nginx簡介

1.1 什麼是Nginx

Nginx是一個高性能的http和反向代理服務器,其特色是佔用內存小,併發能力強。Nginx專爲性能優化而開發,性能是其最重要的考量,能經受高負載的考驗,有報告代表能支持高達50000個併發鏈接數。html

1.2 反向代理

正向代理:在瀏覽器中配置代理服務器,經過代理服務器進行互聯網訪問。java

反向代理:將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取數據後,再返回給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴漏的是代理服務器地址。nginx

1.3 負載均衡

若是請求數過大,單個服務器解決不了,咱們增長服務器的數量,而後將請求分發到各個服務器上,將原先請求集中到單個服務器的狀況改成請求分發到多個服務器上,就是負載均衡。c++

1.4 動靜分離

爲了加快服務器的解析速度,能夠把動態頁面和靜態頁面交給不一樣的服務器來解析,加快解析速度,下降原來單個服務器的壓力。web

二 Nginx的安裝

Nginx須要幾個依賴包,分別是pcreopensslzlib,在安裝nginx以前須要先安裝這幾個依賴。正則表達式

2.1 安裝pcre依賴

  1. 使用命令下載pcre壓縮包
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
  1. 解壓壓縮文件
tar -xvf  pcre-8.37.tar.gz
  1. 進入解壓後的名錄,執行如下命令
./configure
  1. 使用如下命令進行編譯安裝
make && make install
  1. 查看安裝的pcre版本號
pcre-config --version

2.2 安裝openssl,zlib等依賴

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

2.3 安裝nginx

  1. nginx官網下載nginx,官網地址:https://nginx.org/download/
  2. 將壓縮包拖到服務器上;
  3. 使用命令tar -xvf nginx-1.12.2.tar.gz解壓壓縮包;
  4. 使用命令./configure檢查;
  5. 使用命令make && make isntall編譯安裝;

安裝成功後,在usr會多出來一個文件夾,local/nginx,在nginxsbin文件夾下有啓動腳本。後端

2.4 啓動nginx

/usr/local/nginx/sbin文件夾下,使用如下命令啓動瀏覽器

./nginx

而後瀏覽器訪問服務器ip,nginx默認端口是80,出現如下頁面則證實nginx安裝成功;tomcat

Nginx入門教程

2.5 Nginx經常使用的命令

使用這些命令時須要進入/usr/local/nginx/sbin文件夾性能優化

  • 查看nginx的版本號
./nginx -v
  • 啓動nginx
./nginx
  • 關閉nginx
./nginx -s stop
  • 從新加載nginx
./nginx -s reload

2.6 Nginx的配置文件

nginx的配置文件在/usr/local/nginx/conf中的nginx.conf。咱們將nginx.conf中註釋的內容刪除一下。

#user  nobody;
worker_processes  1;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

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

nginx的配置文件包含三部門。

1.全局塊

從配置文件開始到events塊之間的內容,主要會設置一些nginx服務器總體運行的配置指令。

worker_processes  1;

這個表明nginx處理併發的關鍵配置,值越大,處理併發能力越強。可是會受到硬件、軟件等約束。

2.events塊

events塊涉及的指令主要影響nginx服務器與用戶網絡的鏈接。

worker_connections  1024;

這個表明nginx支持的最大鏈接數。

3.http全局塊

nginx服務器配置最頻繁的部分。http全局塊包含http塊server塊

三 Nginx配置反向代理

3.1 ngix代理流程

Nginx入門教程

本地瀏覽器訪問nginx服務器,nginx服務器反向代理tomcat服務器,當咱們請求nginx的時候直接訪問到tomcattomcat的安裝這裏就不在講了,我將tomcatnginx安裝在了同一臺服務器上。

3.2 配置ip和域名的綁定關係

因爲咱們的nginx沒有域名,爲了演示,所以咱們在本地host文件中配置nginx服務器ip和域名進行綁定。這個host文件的具體位置在C:\Windows\System32\drivers\etc。在host文件中增長一句配置:

47.104.xxx.xxx www.javatrip.com

前面的ip是服務器的ip地址,後面的域名是我隨便起的用於綁定這個ip的一個域名。配置好以後,咱們使用域名訪問一下tomcat,若是能請求到omcat默認頁面,則配置成功。

Nginx入門教程

3.3 在nginx配置請求轉發

server {
        listen       80;
        server_name  localhost;

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

咱們將以上默認的配置文件作個修改:

server {
    listen       80;
    server_name  47.104.xxx.xxx;

    location / {
        root   html;
        proxy_pass http://127.0.0.1:8080;
        index  index.html index.htm;
    }
}

以上這段配置的意思就是請求是47.104.xxx.xxx:80,都會轉發至47.104.xxx.xxx:8080

如今瀏覽器訪問www.javatrip.com,發現直接轉發到了tomcat上了,這樣簡單的反向代理就完成了。

3.4 根據請求後綴分發

咱們再解壓一個tomcat,端口號設置爲8081,分別在兩個tomcatwebapps目錄下面新建devprod目錄,而後在該目錄下寫一個文件。

將請求www.javatrip.com:7001/dev轉發到tomcat8080,將請求www.javatrip.com:7001/prod轉發到tomcat8081。如今咱們的nginx監聽的端口號是7001。打開nginx的配置文件,新建一個server以下:

server {
    listen       7001;
    server_name  47.104.xxx.xxx;

    location ~ /dev/ {
        proxy_pass http://127.0.0.1:8080;
    }

    location ~ /prod/ {
        proxy_pass http://127.0.0.1:8081;
    }
}

而後試試效果,分別訪問`www.javatrip.com:7001/dev/a.html和www.javatrip.com:7001/prod/a.html,效果以下:

Nginx入門教程

Nginx入門教程

其中,配置轉發的時候用到了~,其含義內容以下:

  • = 嚴格匹配。若是這個查詢匹配,那麼將中止搜索並當即處理此請求。
  • ~ 爲區分大小寫匹配(可用正則表達式)
  • !~爲區分大小寫不匹配
  • ~* 爲不區分大小寫匹配(可用正則表達式)
  • !~*爲不區分大小寫不匹配
  • ^~ 若是把這個前綴用於一個常規字符串,那麼告訴nginx若是路徑匹配那麼不測試正則表達式。

四 Nginx配置負載均衡

4.1 什麼是負載均衡

負載均衡(Load Balance),意思是將負載(工做任務,訪問請求)進行平衡、分攤到多個操做單元(服務器,組件)上進行執行。是解決高性能,單點故障(高可用),擴展性(水平伸縮)的終極解決方案。

如今咱們想實現的效果是經過訪問www.javatrip.com:7001/prod/a.html,將請求分別分發到兩個tomcat上面去,首先咱們在tomcat8080上新建一個prod的文件夾,裏面放一個a.html的文件。這樣tomcat8081tomcat8080兩個上就都有了一個prod的文件加且裏面有一個a.html的文件。

4.2 配置nginx.conf

首先,在http塊中配置兩個tomcat的服務列表

upstream myserver{
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}

其次,在server塊中配置規則:

server {
    listen       80;
    server_name  47.104.xxx.xxx;

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

4.3 測試效果

訪問地址:www.javatrip.com:7001/prod/a.html,多刷新幾回。發現有的請求到tomcat8080上,有的請求到tomcat8081上。

Nginx入門教程

Nginx入門教程

4.4 nginx支持的幾種負載策略

  • 輪詢(默認):每一個請求按時間順序逐一分配到不一樣的服務器,若是服務器down了,會自動剔除。
upstream myserver{
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}
  • weight(權重):默認爲1,權重越高,分配的請求越多。
upstream myserver{
    server 127.0.0.1:8080 weight=1;
    server 127.0.0.1:8081 weight=2;
}
  • ip hash:每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個後臺服務器,能夠解決session的問題。
upstream myserver{
    ip_hash;
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}
  • fair(第三方):按後端響應時間進行分配,響應時間越短分配的請求越多。
upstream myserver{
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    fair;
}

因爲動靜分離在實際開發中也不經常使用,就再也不寫了。本篇文章作爲一個nginx入門,到這裏就基本完結了。

相關文章
相關標籤/搜索