一 Nginx簡介
1.1 什么是Nginx
Nginx是一個高性能的http和反向代理服務器,其特點是占用記憶體小,并發能力強,Nginx專為性能優化而開發,性能是其最重要的考量,能經受高負載的考驗,有報告表明能支持高達50000個并發連接數,
1.2 反向代理
正向代理:在瀏覽器中配置代理服務器,通過代理服務器進行互聯網訪問,
反向代理:將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取資料后,再回傳給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴漏的是代理服務器地址,
1.3 負載均衡
如果請求數過大,單個服務器解決不了,我們增加服務器的數量,然后將請求分發到各個服務器上,將原先請求集中到單個服務器的情況改為請求分發到多個服務器上,就是負載均衡,
1.4 動靜分離
為了加快服務器的決議速度,可以把動態頁面和靜態頁面交給不同的服務器來決議,加快決議速度,降低原來單個服務器的壓力,
二 Nginx的安裝
Nginx需要幾個依賴包,分別是pcre,openssl,zlib,在安裝nginx之前需要先安裝這幾個依賴,
2.1 安裝pcre依賴
- 使用命令下載
pcre壓縮包
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
- 解壓壓縮檔案
tar -xvf pcre-8.37.tar.gz
- 進入解壓后的名錄,執行以下命令
./configure
- 使用以下命令進行編譯安裝
make && make install
- 查看安裝的
pcre版本號
pcre-config --version
2.2 安裝openssl,zlib等依賴
yum -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檔案夾下,使用以下命令啟動
./nginx
然后瀏覽器訪問服務器ip,nginx默認埠是80,出現以下頁面則證明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服務器反向代理tomcat服務器,當我們請求nginx的時候直接訪問到tomcat,tomcat的安裝這里就不在講了,我將tomcat和nginx安裝在了同一臺服務器上,
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默認頁面,則配置成功,

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,分別在兩個tomcat下webapps目錄下面新建dev和prod目錄,然后在該目錄下寫一個檔案,
將請求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配置負載均衡
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的服務串列
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上,


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入門,到這里就基本完結了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/36525.html
標籤:其他
