Nginx 超簡單教程

2021-02-19 Java後端
1.1 什麼是Nginx

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

1.2 反向代理

正向代理:在瀏覽器中配置代理伺服器,通過代理伺服器進行網際網路訪問。

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

1.3 負載均衡

如果請求數過大,單個伺服器解決不了,我們增加伺服器的數量,然後將請求分發到各個伺服器上,將原先請求集中到單個伺服器的情況改為請求分發到多個伺服器上,就是負載均衡。

1.4 動靜分離

為了加快伺服器的解析速度,可以把動態頁面和靜態頁面交給不同的伺服器來解析,加快解析速度,降低原來單個伺服器的壓力。

二 Nginx的安裝

Nginx需要幾個依賴包,分別是pcre,openssl,zlib,在安裝nginx之前需要先安裝這幾個依賴。

2.1 安裝pcre依賴

使用命令下載pcre壓縮包

1wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz

解壓壓縮文件

1tar -xvf  pcre-8.37.tar.gz

進入解壓後的名錄,執行以下命令

1./configure

使用以下命令進行編譯安裝

1make && make install

查看安裝的pcre版本號

1pcre-config --version

2.2 安裝openssl,zlib等依賴

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

2.3 安裝nginx

nginx官網下載nginx,官網地址:https://nginx.org/download/;

將壓縮包拖到伺服器上;

使用命令tar -xvf nginx-1.12.2.tar.gz解壓壓縮包;

使用命令./configure檢查;

使用命令make && make isntall編譯安裝;

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

2.4 啟動nginx

在/usr/local/nginx/sbin文件夾下,使用以下命令啟動

1./nginx

然後瀏覽器訪問伺服器ip,nginx默認埠是80,出現以下頁面則證明nginx安裝成功;

2.5 Nginx常用的命令

使用這些命令時需要進入/usr/local/nginx/sbin文件夾

1./nginx -v

1./nginx

1./nginx -s stop

1./nginx -s reload

2.6 Nginx的配置文件

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

1#user  nobody;
2worker_processes  1;
3
4#pid        logs/nginx.pid;
5
6events {
7    worker_connections  1024;
8}
9
10http {
11    include       mime.types;
12    default_type  application/octet-stream;
13
14    sendfile        on;
15    #tcp_nopush     on;
16
17    #keepalive_timeout  0;
18    keepalive_timeout  65;
19
20    #gzip  on;
21
22    server {
23        listen       80;
24        server_name  localhost;
25
26        location / {
27            root   html;
28            index  index.html index.htm;
29        }
30    }
31}

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

1.全局塊

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

1worker_processes  1;

這個代表nginx處理並發的關鍵配置,值越大,處理並發能力越強。但是會受到硬體、軟體等約束。

2.events塊

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

1worker_connections  1024;

這個代表nginx支持的最大連接數。

3.http全局塊

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

三 Nginx配置反向代理3.1 ngix代理流程

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

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

由於我們的nginx沒有域名,為了演示,因此我們在本地host文件中配置nginx伺服器ip和域名進行綁定。這個host文件的具體位置在C:\Windows\System32\drivers\etc。在host文件中增加一句配置:

147.104.xxx.xxx www.javatrip.com

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

3.3 在nginx配置請求轉發

1  server {
2        listen       80;
3        server_name  localhost;
4
5        location / {
6            root   html;
7            index  index.html index.htm;
8        }
9  }

我們將以上默認的配置文件做個修改:

1server {
2    listen       80;
3    server_name  47.104.xxx.xxx;
4
5    location / {
6        root   html;
7        proxy_pass http://127.0.0.1:8080;
8        index  index.html index.htm;
9    }
10}

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

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

3.4 根據請求後綴分發

我們再解壓一個tomcat,埠號設置為8081,分別在兩個tomcat下webapps目錄下面新建dev和prod目錄,然後在該目錄下寫一個文件。

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

1server {
2    listen       7001;
3    server_name  47.104.xxx.xxx;
4
5    location ~ /dev/ {
6        proxy_pass http://127.0.0.1:8080;
7    }
8
9    location ~ /prod/ {
10        proxy_pass http://127.0.0.1:8081;
11    }
12}

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

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

四 Nginx配置負載均衡4.1 什麼是負載均衡

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

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

4.2 配置nginx.conf

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

1upstream myserver{
2    server 127.0.0.1:8080;
3    server 127.0.0.1:8081;
4}

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

1server {
2    listen       80;
3    server_name  47.104.xxx.xxx;
4
5    location / {
6        root   html;
7        proxy_pass http://myserver;
8        index  index.html index.htm;
9    }
10}

4.3 測試效果

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

4.4 nginx支持的幾種負載策略

1upstream myserver{
2    server 127.0.0.1:8080;
3    server 127.0.0.1:8081;
4}

1upstream myserver{
2    server 127.0.0.1:8080 weight=1;
3    server 127.0.0.1:8081 weight=2;
4}

1upstream myserver{
2    ip_hash;
3    server 127.0.0.1:8080;
4    server 127.0.0.1:8081;
5}

1upstream myserver{
2    server 127.0.0.1:8080;
3    server 127.0.0.1:8081;
4    fair;
5}

由於動靜分離在實際開發中也不常用,就不再寫了。本篇文章做為一個nginx入門,到這裡就基本完結了。最後留給大家一個問題思考一下:如何保證nginx的高可用?

最近整理一份面試資料《Java技術棧學習手冊》,覆蓋了Java技術、面試題精選、Spring全家桶、Nginx、SSM、微服務、資料庫、數據結構、架構等等。

獲取方式:點「 在看,關注公眾號 Java後端 並回復 777 領取,更多內容陸續奉上。

喜歡文章,點個在看 

相關焦點

  • Nginx超詳細入門教程
    2011年6月1日,nginx 1.0.4發布。Nginx是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,在BSD-like 協議下發行。其特點是佔有內存少,並發能力強,事實上nginx的並發能力在同類型的網頁伺服器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。
  • 超實用的 Nginx 極簡教程
    安裝與使用安裝詳細安裝方法請參考:Nginx 安裝使用nginx 的使用比較簡單,就是幾條命令。常用到的命令如下:nginx -s stop 快速關閉Nginx,可能不保存相關信息,並迅速終止web服務。nginx -s quit 平穩關閉Nginx,保存相關信息,有安排的結束web服務。
  • 超詳細的 Nginx 教程,一學就會!!!
    下面以 C 盤根目錄為例說明下:cd C:cd C: ginx-0.8.54   start nginxNginx / Win32 是運行在一個控制臺程序,而非 windows 服務方式的。伺服器方式目前還是開發嘗試中。使用nginx 的使用比較簡單,就是幾條命令。
  • 史上最簡單的 Nginx 教程,沒有之一!
    之前,確保系統已經安裝 gcc、openssl-devel、pcre-devel 和 zlib-devel 軟體庫下載nginx 下載地址:http://nginx.org/en/download.html。
  • Nginx 教程 #1:基本概念
    我們準備了這個劃分為三節的《Nginx教程》。如果你對 Nginx 已經有所了解,或者你希望了解更多,這個教程將會對你非常有幫助。我們會告訴你 Nginx 是如何工作的,其背後的概念有哪些,以及如何優化它以提升應用程式的性能。還會告訴你如何安裝,如何啟動、運行。
  • 超實用的 Nginx 極簡教程,覆蓋了常用場景
    詳細安裝方法請參考:Nginx 安裝nginx 的使用比較簡單,就是幾條命令。nginx 將檢查配置文件的語法的正確性,並嘗試打開配置文件中所引用到的文件。nginx -v            顯示 nginx 的版本。nginx -V            顯示 nginx 的版本,編譯器版本和配置參數。
  • 超詳細 Nginx 極簡教程,傻瓜一看也會!
    下面以 C 盤根目錄為例說明下:cd C:cd C: ginx-0.8.54   start nginxNginx / Win32 是運行在一個控制臺程序,而非 windows 服務方式的。伺服器方式目前還是開發嘗試中。使用nginx 的使用比較簡單,就是幾條命令。
  • 超詳細的Nginx簡易教程,一學就會!
    下面以 C 盤根目錄為例說明下:cd C:cd C: ginx-0.8.54   start nginxNginx / Win32 是運行在一個控制臺程序,而非 windows 服務方式的。伺服器方式目前還是開發嘗試中。使用nginx 的使用比較簡單,就是幾條命令。
  • Nginx 極簡教程(快速入門)
    多線程內容聚合Nginx 極簡教程本項目是一個 Nginx 極簡教程,目的在於幫助新手快速入門 Nginx。Nginx 入門詳細安裝方法請參考:https://github.com/dunwu/nginx-tutorial/blob/master/install-nginx.mdnginx 的使用比較簡單
  • Nginx Linux和Windows安裝教程
    前言本篇文章主要介紹的是Nginx Linux環境和Windows的安裝教程。Nginx 介紹❝Nginx("engine x")是一款是由俄羅斯的程序設計師Igor Sysoev所開發高性能的 Web和 反向代理 伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。❞HTTP基礎功能:模塊化的結構。
  • Nginx 教程(1):基本概念
    我們準備了這個劃分為三節的《Nginx教程》。如果你對 Nginx 已經有所了解,或者你希望了解更多,這個教程將會對你非常有幫助。我們會告訴你 Nginx 是如何工作的,其背後的概念有哪些,以及如何優化它以提升應用程式的性能。還會告訴你如何安裝,如何啟動、運行。
  • Docker系列教程:如何在 Docker 容器中運行 Nginx
    在本教程中,您將學習如何將 Nginx 作為 Docker 容器運行,並將其公開給您的本地網絡。
  • nginx的簡單使用
    nginxnginx的安裝(Ubuntu)
  • +安裝nginx【圖文教程】
    +系統安裝nginx代理伺服器【圖文教程】1 安裝所需插件1.1 安裝gcc插件      gcc是linux下的編譯器,感興趣的小夥伴可以去查一下相關資料,它可以編譯 C,C++,Object C和Java等語言。一般centos7系統默認安裝了gcc編譯器的。
  • nginx簡易教程
    使用nginx 的使用比較簡單,就是幾條命令。nginx 將檢查配置文件的語法的正確性,並嘗試打開配置文件中所引用到的文件。nginx -v:顯示 nginx 的版本。nginx -V:顯示 nginx 的版本,編譯器版本和配置參數。
  • Nginx 快速極簡入門教程
    本項目是一個 Nginx 極簡教程,目的在於幫助新手快速入門 Nginx。
  • nginx 配置就是這麼簡單
    yum list | grep nginx安裝 nginxsudo yum install nginx配置 nginx 開機啟動sudo systemctl enable nginx啟動 nginxsudo systemctl start nginx檢查 nginx 是否啟動
  • Nginx 極簡入門教程!
    事實上 nginx 的並發能力確實在同類型的網頁伺服器中表現較好,一般來說,如果我們在項目中引入了 Nginx ,我們的項目架構可能是這樣:在這樣的架構中支持高並發、內存消耗少、成本低廉、配置簡單、運行穩定等。
  • Phpstudy建站教程(手把手超詳細)
    ②phpstudy安裝教程(超詳細)1x首先回答兩個問題,然後開始教各位如何安裝phpstudy  1.問:WEB網站是什麼?答:大家可提前接閱我校學生大二學習資料《計算機網絡》簡單了解網絡基礎知識。筆者給大家畫個圖簡單了解一下web服務,大家可搜索一下『什麼是CS模式,什麼是BS模式』。
  • Nginx 反向代理簡單使用
    千萬不要再/usr/local 下建 nginx 目錄 否則安裝會出現問題,這個會安裝到/usr/local/nginx 下面準備工作