close
1、常用命令

需要進入 [nginx]的安裝目錄中的sbin目錄(也可以配置環境變量,在任何目錄都可以執行下面的命令),裡面有一個 nginx 腳本文件

1、啟動nginx./nginx2、關閉nginx./nginx-sstop3、重新加載nginx(nginx.conf)./nginx-sreload4、查看版本號./nginx-v2、Nginx 配置文件 (nginx.conf)2.1 概述

默認在Linux上安裝的Nginx,配置文件在安裝的nginx目錄下的conf目錄下,名字叫做nginx.conf

nginx.conf 主要由三部分組成

全局塊,
events 塊
http 塊
2.2 配置文件結構2.3 真實配置文件概覽#全局快------------------------------------------------------------------------------#usernobody;worker_processes1;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx.pid;------------------------------------------------------------------------------#events塊events{worker_connections1024;}#http塊http{------------------------------------------------------------------------------#http全局塊includemime.types;default_typeapplication/octet-stream;#log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'#'$status$body_bytes_sent"$http_referer"'#'"$http_user_agent""$http_x_forwarded_for"';#access_loglogs/access.logmain;sendfileon;#tcp_nopushon;#keepalive_timeout0;keepalive_timeout65;#gzipon;------------------------------------------------------------------------------#server塊server{#server全局塊listen80;server_namelocalhost;#charsetkoi8-r;#access_loglogs/host.access.logmain;#location塊location/{roothtml;indexindex.htmlindex.htm;}#error_page404/404.html;#redirectservererrorpagestothestaticpage/50x.html#error_page500502503504/50x.html;location=/50x.html{roothtml;}#proxythePHPscriptstoApachelisteningon127.0.0.1:80##location~\.php${#proxy_passhttp://127.0.0.1;#}#passthePHPscriptstoFastCGIserverlisteningon127.0.0.1:9000##location~\.php${#roothtml;#fastcgi_pass127.0.0.1:9000;#fastcgi_indexindex.php;#fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;#includefastcgi_params;#}#denyaccessto.htaccessfiles,ifApache'sdocumentroot#concurswithnginx'sone##location~/\.ht{#denyall;#}}#可以配置多個server塊}2.2 全局塊

就是配置文件從頭開始到 events 塊之間的內容,主要設置的是影響nginx服務器整體運行的配置指令比如 worker_process, 值越大,可以支持的並發處理量也越多,但是還是和服務器的硬件相關

2.3events 塊

events 塊涉及的指令主要影響 Nginx 服務器與用戶的網絡連接,常用的設置包括是否開啟對多 work process 下的網絡連接進行序列化,是否允許同時接收多個網絡連接,選取哪種事件驅動模型來處理連接請求,每個 word process 可以同時支持的最大連接數等。

上述例子就表示每個 work process 支持的最大連接數為 1024.這部分的配置對 Nginx 的性能影響較大,在實際中應該靈活配置

2.4http 塊

包括 http 全局塊,以及多個 server 塊

2.4.1http 全局塊

http 全局塊配置的指令包括文件引入、 MIME-TYPE 定義、日誌自定義、連接超時時間、單鏈接請求數上限等。

2.4.2server 塊
這塊和虛擬主機有密切關係,虛擬主機從用戶角度看,和一台獨立的硬件主機是完全一樣的,該技術的產生是為了節省互聯網服務器硬件成本。
每個 http 塊可以包括多個 server 塊,而每個 server 塊就相當於一個虛擬主機
而每個 server 塊也分為全局 server 塊,以及可以同時包含多個 location 塊。
2.4.2.1server 全局塊

最常見的配置是本虛擬機主機的監聽配置和本虛擬主機的名稱或 IP 配置。

#這一行表示這個server塊監聽的端口是80,只要有請求訪問了80端口,此server塊就處理請求listen80;#表示這個server塊代表的虛擬主機的名字server_namelocalhost;2.4.2.2location 塊
一個 server 塊可以配置多個 location 塊。
主要作用是根據請求地址路徑的匹配,匹配成功進行特定的處理
這塊的主要作用是基於 Nginx 服務器接收到的請求字符串(例如 server_name/uri-string),對虛擬主機名稱(也可以是 IP 別名)之外的字符串(例如 前面的 /uri-string)進行匹配,對特定的請求進行處理。地址定向、數據緩存和應答控制等功能,還有許多第三方模塊的配置也在這裡進行。
#表示如果請求路徑是/就是用這個location塊進行處理location/{roothtml;indexindex.htmlindex.htm;}3、反向代理3.1 正向代理與反向代理概述3.1.1 正向代理
正向代理代理的是客戶端,需要在客戶端配置,我們訪問的還是真實的服務器地址
3.1.2 反向代理
反向代理代理的是服務器端,客戶端不需要任何配置,客戶端只需要將請求發送給反向代理服務器即可,代理服務器將請求分發給真實的服務器,獲取數據後將數據轉發給你。隱藏了真實服務器,有點像網關。
3.1.3 區別與總結

正向代理與反向代理的區別

最根本的區別是代理的對象不同

正向代理代理的是客戶端,需要為每一個客戶端都做一個代理服務器,客戶端訪問的路徑是目標服務器
反向代理代理的是真實服務器,客戶端不需要做任何的配置,訪問的路徑是代理服務器,由代理服務器將請求轉發到真實服務器
3.2 配置3.2.1 應用一

實現效果訪問 http://192.168.80.102:80(Nginx 首頁), 最終代理到 http://192.168.80.102:8080(Tomcat 首頁)

首先啟動一台 Tomcat 服務器 (已經安裝了 Tomcat)

進入 Tomcat 的安裝目錄下的bin目錄下,使用./startup.sh命令,啟動 Tomcat

在 Nginx 的配置文件中進行配置

1、新建一個 server 塊,在 server 全局塊中配置監聽 80 端口

2、在 location 塊中配置 / 路徑請求代理到 tomcat 的地址

下面三個配置的含義就是 ,當訪問 Linux 的 http://192.168.80.102:80 這個地址時,由於配置 Nginx 監聽的是 80 端口,所以會進入這個 server 塊進行處理,然後看你的訪問路徑,根據 location 塊配置的不同路徑進入對應的處理,由於配置了 / 請求,所以進入 / 的 location 處理,然後配置了 proxy_pass,所以進行代理到指定的路徑。

server{#監聽端口80即當訪問服務器的端口是80時,進入這個server塊處理listen80;#server_name當配置了listen時不起作用server_namelocalhost;#location後面代表訪問路徑當是/請求時代理到tomcat的地址location/{#使用proxy_pass(固定寫法)後面跟要代理服務器地址proxy_passhttp://192.168.80.102:8080;}}

經過測試,當輸入http://192.168.80.102:80時,Nginx給我們代理到了Tomcat,所以顯示了Tomcat的頁面,即配置成功

3.2.2 應用二

應用一訪問的是 / 路徑,給我們代理到指定的服務器

應用二實現:

讓 Nginx 監聽 9001 端口
我們實現當訪問 http://192.168.80.102:9001/edu(Nginx 地址) 時,nginx 給我們代理到 http://192.168.80.102:8081,
當訪問 http://192.168.80.102:9001/vod 時,nginx 給我們代理到 http://192.168.80.102:8082

啟動兩個 Tomcat 服務器

端口分別是 8081 和 8082,
在 8001 的服務器的 webapps 下創建一個 edu 目錄,編寫一個 test.html
在 8002 的服務器的 webapps 下創建一個 vod 目錄,編寫一個 test.html

由於虛擬機的 ip 是 192.168.80.102,所以保證訪問 http://192.168.80.102:8081/edu/test.html 和 http://192.168.80.102:8082/vod/test.html 都可以成功訪問

編寫 Nginx 配置文件

server{#監聽9001端口listen9001;#進行路徑匹配,匹配到edu代理到8081location~/edu/{proxy_passhttp://192.168.80.102:8081;}#進行路徑匹配,匹配到vod代理到8082location~/vod/{proxy_passhttp://192.168.80.102:8082;}}

經過測試,訪問成功!!!

3.3 server_name 作用及訪問流程

客戶端通過域名訪問服務器時會將域名與被解析的 ip 一同放在請求中。當請求到了 nginx 中時。nginx會先去匹配ip,如果listen中沒有找到對應的ip,就會通過域名進行匹配,匹配成功以後,再匹配端口。當這三步完成,就會找到對應的 server 的 location 對應的資源。

4、負載均衡4.1 概述

簡單來說就是使用分布式的場景,將原先的一台服務器做成一個集群,然後將請求分發到各個服務器上,但是,如何將請求每次轉發到不同的服務器呢,Nginx 就可以做到。原來我們都是直接訪問服務器,現在我們可以使用 Nginx 進行反向代理,然後我們訪問 Nginx,由Nginx將我們的請求分發到不同的服務器上,以實現負載均衡

4.2 配置

實現:

訪問 http://192.168.80.102:80/edu/test.html,Nginx 將請求分配到 8081 和 8082 兩台 tomcat 服務器上。

1、開啟兩台tomcat

分別在 webapps 下的 edu 下編寫一個 test.html,文件內容可以不一致,為了明顯看到負載均衡的效果

2、配置文件

#在http塊中的全局塊中配置#upstream固定寫法後面的myserver可以自定義upstreammyserver{server192.168.80.102:8081;server192.168.80.102:8082;}#server配置server{#監聽80端口listen80;#location塊location/{#反向代理到上面的兩台服務器寫上自定義的名稱proxy_passhttp://myserver;}}

訪問 http://192.168.80.102:80/edu/test.html 時,可以分發到 8081 和 8082 兩台服務器,測試成功

4.3 負載均衡規則4.3.1 輪詢 (默認)

每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器 down 掉,能自動剔除

4.3.2weight 權重

weight 代表權重默認為 1, 權重越高被分配的客戶端越多

upstreammyserver{server192.168.80.102:8081weight=1;server192.168.80.102:8082weight=2;}server{listen80;location/{proxy_passhttp://myserver;}4.3.3ip_hash

每個請求按訪問 ip 的 hash 結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決 session 問題

#配置負載均衡的服務器和端口upstreammyserver{server192.168.80.102:8081;server192.168.80.102:8082;ip_hash;}server{listen80;location/{proxy_passhttp://myserver;}}4.3.4fair

按後端服務器的響應時間來分配請求,響應時間短的優先分配。

#配置負載均衡的服務器和端口upstreammyserver{server192.168.80.102:8081;server192.168.80.102:8082;fair;}server{listen80;location/{proxy_passhttp://myserver;}}5、動靜分離5.1 概述
將靜態資源 css html js 等和動態資源 (jsp servlet) 進行分開部署,我們可以將靜態資源直接部署在專門的服務器上,也可以直接放在反向代理服務器上(Nginx)所在在的服務器上 然後動態資源還是部署在服務器上,如 tomcat。
然後請求來的時候,靜態資源從專門的靜態資源服務器獲取,動態資源還是轉發到後端服務器上。
5.2 配置

準備工作:在 Linux 的根目錄下 / 的 staticResource 目錄下創建兩個文件夾,分別是 www 和 image,在 www 目錄下創建一個 okc.html, 在 image 目錄下放一張 ttt.jpg

實現效果,訪問 http://192.168.80.102:80/www/okc.html 和 http://192.168.80.102:80/image/ttt.img 時可以成功訪問資源

配置

server{listen80;#當訪問路徑帶了www時,進入這個location處理,去/staticResource目錄下對應的www目錄去找okc.html#即最終實現訪問到這個路徑#http://192.168.80.102:80/staticResource/www/okc.htmllocation/www/{root/staticResource/;indexindex.htmlindex.htm;}#跟上面一樣location/image/{root/staticResource/;}}

經過測試,成功訪問

5.3root 與 alias 區別與訪問路徑
alias 實際訪問文件路徑不會拼接 URL 中的路徑
root 實際訪問文件路徑會拼接 URL 中的路徑

示例如下:

alias

location^~/sta/{alias/usr/local/nginx/html/static/;}
請求:http://test.com/sta/sta1.html
實際訪問:/usr/local/nginx/html/static/sta1.html 文件

root

location^~/tea/{root/usr/local/nginx/html/;}
請求:http://test.com/tea/tea1.html
實際訪問:/usr/local/nginx/html/tea/tea1.html 文件

【Linux常用命令速查手冊】關注【入門小站】,後台回復 「1001」 自取。

近期熱文

Git基本原理介紹

打造一款高逼格的Vim神器

乾淨又衛生漂亮的終端工具

我面試Linux必問的20個常用命令

Linux【實操篇】磁盤分區,網絡配置

Linux基礎-用戶管理與組管理

網吧學習Linux在線運行強的很哦

Shell中的if判斷怎麼用?

Windows與網絡基礎:Windows用戶管理

linux中20個高級命令


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()