Nginx反向代理學習

1. Nginx是什麼?

Nginx("engine x")是一款是由俄羅斯的程序設計師Igor Sysoev所開發高性能的 Web和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服務器。css

在高鏈接併發的狀況下,Nginx是Apache服務器不錯的替代品。html

\nginx

nginx能夠做爲web服務器,但更多的時候,咱們把它做爲網關,由於它具有網關必備的功能:web

- 反向代理
- 負載均衡
- 動態路由
- 請求過濾
  • Web服務器分2類:正則表達式

    • web應用服務器,如:
      • tomcat
      • resin
      • jetty
    • web服務器,如:
      • Apache 服務器
      • Nginx
      • IIS
  • 區分:web服務器不能解析jsp等頁面,只能處理js、css、html等靜態資源。spring

  • 併發:web服務器的併發能力遠高於web應用服務器。後端

  • 爲何高於web應用服務器呢?瀏覽器

由於Nginx是用的 NIO:not-blocking-IO 非阻塞IOtomcat

而tomcat則是用的BIO:blocking-IO 阻塞IO安全

nginx+tomcat搭配起來使用,能夠很大的提高效率,nginx只處理js、css、html。tomcat只處理其餘的請求。

2. Nginx的安裝

2.1 下載

下載安裝包: 
官網地址:
http://nginx.org/en/download.html

百度網盤--已經下載好的-- 1.16.1 版, 裏面還有個工具,等下咱們測試要用
連接:https://pan.baidu.com/s/1z4BnGjd-nVQqzrXJSJIP8g
提取碼:s63f

2.2 安裝

咳咳,這個嘛,解壓便可使用,比較舒服

2.3 目錄結構

3. Nginx的簡單使用

啓動: start nginx.exe

  • 啓動成功

有沒有啓動成功表面是看不出來的,由於只會閃一下。但打開任務管理器是能夠看到的,nginx默認進程是兩個,能夠修改。若是啓動進程不是2個,說明是有問題的。

還有就是訪問瀏覽器,直接訪問localhost,能夠看到一些信息。爲何會到這個頁面,咱們後面將配置的時候進行解釋

中止: nginx.exe -s stop

也是看不出任何變化,但再看任務管理器就看不到nginx的進程了

從新加載: nginx.exe -s reload

nginx有個強大的功能,就是修改了nginx中的東西,不須要從新啓動,7*24小時在線,甚至是更新了版本也不須要從新啓動。運行nginx.exe -s reload從新加載便可。 咱們在後面使用的時候進行演示

4.反向代理

4.2 解釋

  • 代理:

說到代理,首先咱們要明確一個概念,所謂代理就是一個表明、一個渠道;此時就涉及到兩個角色,一個是被代理角色,一個是目標角色。

被代理角色經過這個代理訪問目標角色完成一些任務的過程稱爲代理操做過程;如同生活中的專賣店,客人到 「華爲」 專賣店買了個手機,這個專賣店就是代理,被代理角色就是 「華爲」 廠家,目標角色就是用戶。

  • 反向代理:

給你們舉個例子:好比說華爲官網,有不少人買華爲,而後把服務器擠爆了,人太多了,服務器響應時間慢。而後怎麼解決呢?就出現了你們熟悉的分佈式集羣。

經過上圖能夠看出,多個客戶端給服務器發送的請求,Nginx 服務器接收到以後,按照必定的規則分發給了後端的業務處理服務器進行處理了。

此時請求的來源也就是客戶端是明確的,可是請求具體由哪臺服務器處理的並不明確了,Nginx 扮演的就是一個反向代理角色。

客戶端是無感知代理的存在的,反向代理對外都是透明的,訪問者並不知道本身訪問的是一個代理。由於客戶端不須要任何配置就能夠訪問。

反向代理,"它代理的是服務端",主要用於服務器集羣分佈式部署的狀況下,反向代理隱藏了服務器的信息

  • 反向代理的做用:

保證內網的安全,一般將反向代理做爲公網訪問地址,Web 服務器是內網。負載均衡,經過反向代理服務器來優化網站的負載。

4.2 配置

咱們來配置一個代理,將本地路徑經過域名的方式進行訪問

一:配置映射

經過我在上面百度網盤分享的工具,將127.0.0.1映射到指定的域名

經過工具

  • 步驟一:

  • 步驟二:

  • 步驟三:

測試是否映射成功

打開cmd,咱們ping一下剛剛映射的路徑, ok,成功

二:配置nginx

步驟一: 編輯該文件

步驟二: 解釋server意思

# nginx默認的的配置, 一個server就是一個代理
server {
  listen       80; # 監聽的端口號
  server_name  localhost;  # 監聽的域名
  # 監聽的路徑,  / 是表示全部,  這裏能夠寫正則表達式
  location / {
    root html; # root表明本地(nginx的本地,就是nginx的安裝路徑), 這裏表示的html目錄
    index index.html index.htm; # 而後指向了index.html文件, 
				# 這就是爲何訪問localhost爲何會跳轉到那個頁面的緣由了,
				# 你能夠看一下nginx安裝目錄下的html目錄,裏面都有什麼。
  }
  # 監聽的錯誤響應碼
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root html;
  }
}

步驟三:配置咱們本身的代理

將以下配置複製配置文件中便可,要會本身修改

server{ # 反向代理
  listen 80; # 監聽的端口號
  server_name www.manlu.com; # 監聽的域名

  # 一些頭信息
  proxy_set_header X-Forwarded-Host $host;
  proxy_set_header X-Forwarded-Server $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  # 監聽的路徑, / 是表示全部,  這裏能夠寫正則表達式
  location / {
   proxy_pass http://127.0.0.1:10010; # proxy_pass 表明是代理到那個端口
   proxy_connect_timeout 1000; # 鏈接超時時間
   proxy_read_timeout 1000; # 超時超時時間
  }
}

其它配置- 設置進程數量

能夠修改試試,修改完成後,不須要從新啓動,輸入從新加載命令便可,而後看你的任務管理器進程是否是變了。

注意: 記得從新加載

三:建立項目-測試反向代理

建立一個簡單的項目-springboot,經過域名訪問接口

步驟一:maven構建

步驟二:項目名

步驟三:項目地址

步驟四:pom依賴

修改pom文件,添加springboot啓動器

<!--springboot啓動器-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.4.RELEASE</version>
        </dependency>
    </dependencies>

步驟五:端口號配置

建立配置文件

server:
  port: 10010 # 端口號

步驟六:啓動器

建立啓動器

package com.manlu;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author manlu
 */
@SpringBootApplication
public class NginxApplication {
    public static void main(String[] args) {
        SpringApplication.run(NginxApplication.class,args);
    }
}

步驟七:控制器

建立控制器controller

package com.manlu.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 漫路h
 */
@RestController
@RequestMapping("/nginx")
public class NginxController {
    /**
     * 測試
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public String testNginx(@PathVariable Integer id){
        System.out.println(id);
        return "nginx返回參數:"+id;
    }
}

步驟八:啓動

步驟九:訪問

路徑: http://www.manlu.com/nginx/123

nginx與其它web服務器的對比

哈哈咱們今天就到這裏。你們想多瞭解就多百度百度啦~~

相關文章
相關標籤/搜索