Nginx

Nginx學(xué)習(xí)筆記

1蔗坯、Nginx初識

Nginx 是一個(gè)高性能的Http和反向代理服務(wù)器撮躁。也是一個(gè)IMAP/POP3/SMTP等郵件代理服務(wù)器。

(一) 正向代理和反向代理

正向代理:客戶端client通過設(shè)置颈娜,使用代理服務(wù)器proxy去訪問遠(yuǎn)程服務(wù)器server地回。
|client - proxy | - server

使用場景:

  1. 可以訪問原來無法訪問的資源
  2. 做緩存使用,加快訪問速度
  3. 對客戶端授權(quán)或記錄訪問信息等

反向代理:服務(wù)器通過代理服務(wù)接收連接請求扔枫,然后再轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)的服務(wù)器汛聚,將服務(wù)器的結(jié)果返回給客戶端,此時(shí)這種代理叫反向代理短荐。

client - | proxy - server |

使用場景:

1)保證內(nèi)網(wǎng)的安全倚舀,阻止web攻擊。
2)負(fù)載均衡忍宋,優(yōu)化網(wǎng)站的負(fù)載(處理能力)

一句話痕貌,代理服務(wù)器站在客戶端一邊(能夠感知),就是正向代理糠排;代理服務(wù)器站在服務(wù)端一邊(客戶不感知)舵稠,就是反向代理。

(二) Hello Nginx

nginx安裝包所在目錄 /usr/local/src/

nginx安裝目錄 /usr/local/nginx/

啟動(dòng)命令 ./nginx

驗(yàn)證方式 瀏覽器訪問 虛擬機(jī)ip地址 (返回nginx歡迎頁面)

image-20200309163705910.png

啟動(dòng)后入宦,進(jìn)程id存放位置 /usr/local/nginx/nginx.pid
查看文件 cat nginx.pid

關(guān)閉方式: ./nginx -s stop 原生命令

殺死進(jìn)程:
kill + 參數(shù) + pid 形式
如 : kill -9 pid 強(qiáng)制停止服務(wù)
kill -TERM pid 快速停止服務(wù)
kill -QUIT pid 平緩?fù)V狗?wù)

信號處理命令:
./nginx -s + ( stop, quit, reopen, reload)
其中 reload 是重加載命令哺徊, 在更改配置后使用
quit仍然是平緩?fù)V沟囊馑迹ㄍ暾行颍瑂top是快速停止

2乾闰、Nginx配置

分為三部分落追,全局塊、events塊汹忠、http塊淋硝。

(一)全局塊

全局指令,指定運(yùn)行時(shí)的用戶組宽菜、進(jìn)程id存放位置、日志存放位置竿报、worker process數(shù)量等等铅乡。

# 配置用戶或者用戶組
#user  nobody;

# 允許生成的進(jìn)程數(shù)
worker_processes  1;

# 日志路徑設(shè)置  可以配置級別
#  debug | info | notice | warn | error | crit 
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

# 存儲進(jìn)程id的文件地址
#pid        logs/nginx.pid;

(二)events塊

影響nginx服務(wù)器和用戶網(wǎng)絡(luò)連接的配置,比如每個(gè)進(jìn)程的最大連接數(shù)烈菌,選取哪種事件驅(qū)動(dòng)模型阵幸,以及在網(wǎng)絡(luò)連接過程中花履,是否開啟多個(gè),是否序列化等等挚赊。

events {
    # 每個(gè)進(jìn)程的最大連接數(shù)
    worker_connections  1024;
}

(三)http塊

配置代理诡壁、緩存、日志等絕大部分功能的地方荠割,可以嵌套多個(gè)server塊妹卿,而不同的server可以對應(yīng)不同的域名(虛擬主機(jī))

(1)虛擬主機(jī)的配置

虛擬主機(jī):同一臺nginx服務(wù)器,可以支持多個(gè)網(wǎng)站的運(yùn)行蔑鹦,每個(gè)虛擬主機(jī)之間都相互獨(dú)立夺克,具有完整功能。

http {
    # 對應(yīng)虛擬主機(jī)的配置
    server{
       # 監(jiān)聽端口
       listen       80;
       # 監(jiān)聽域名
       server_name  localhost;
       # 定位出路徑或文件地址
       location / {
             # 相對路徑
             root   html;
             # 默認(rèn)跳轉(zhuǎn)的首頁地址
             index  index.html index.htm;
       }
    }
    
    server{
    
    }
}

配置指定域名(www.duyi123.com)嚎朽,訪問到虛擬機(jī)上的頁面

1)在安裝目錄下铺纽,創(chuàng)建文件夾,如: mkdir duyi123

  1. 創(chuàng)建頁面哟忍, index.html
  2. 更改配置
http {
    # 對應(yīng)虛擬主機(jī)的配置
    server{
       # 監(jiān)聽端口
       listen       80;
       # 監(jiān)聽域名
       server_name  duyi123.com;
       # 定位出路徑或文件地址
       location / {
             # 相對路徑
             root   duyi123;
             # 默認(rèn)跳轉(zhuǎn)的首頁地址
             index  index.html;
       }
    }

}
  1. 給域名配置ip地址的映射
    更改hosts文件 (C:\Windows\System32\drivers\etc)

5)瀏覽器輸入虛擬機(jī)地址或者域名 duyi123.com 狡门,均能返回自定義頁面

(2)日志配置

通過日志,可以獲取到用戶地址信息锅很、跳轉(zhuǎn)來源其馏、終端、以及url訪問量等等粗蔚。

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    # 配置日志文件地址  聲明日志格式 
    #access_log  logs/access.log  main;

日志demo

192.168.1.11 - - [04/Mar/2020:13:03:39 +0800] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36"
日志分析 對應(yīng)屬性 用途
192.168.1.11 remote_addr 客戶端的ip地址
- - remote_user 客戶端的用戶名稱
[04/Mar/2020:13:03:39 +0800] time_local 訪問時(shí)間和時(shí)區(qū)
"GET / HTTP/1.1" request 請求方法
200 status 響應(yīng)狀態(tài)碼 如:200
612 body_bytes_sent 主體內(nèi)容字節(jié)數(shù) 如:612
"-" http_referer 記錄是從哪個(gè)鏈接訪問過來的
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) http_user_agent 用戶使用的代理(瀏覽器)
Chrome/80.0.3987.100 Safari/537.36" http_x_forwarded_for 通過代理服務(wù)器來記錄客戶端的ip地址

可以通過腳本實(shí)現(xiàn)日志切割(每天生成一份日志)
重命名日志文件 - 讓nginx重新從配置中讀取日志文件名 - 在新的日志文件中記錄日志

(3)反向代理配置

前提:系統(tǒng)中安裝好jdk和tomcat(配置好環(huán)境變量)

已安裝的目錄地址:
1) jdk路徑 /usr/local/java/
2) tomcat路徑 /usr/local/tomcat/
啟動(dòng)方式 /usr/local/tomcat/bin 執(zhí)行 ./startup.sh
關(guān)閉方式 執(zhí)行./shutdown.sh
驗(yàn)證方式 虛擬機(jī)ip:8080 可以看到tomcat頁面

image-20200309230938568.png

原需求: 訪問域名duyi123.com 顯示 nginx路徑/duyi123/index.html頁面
現(xiàn)需求: 訪問域名duyi123.com 顯示 tomcat 首頁

實(shí)現(xiàn)方式

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

注意:更改配置文件nginx.conf后尝偎,執(zhí)行重加載命令 ./nginx -s reload

進(jìn)階需求:一臺nginx連接多臺tomcat,當(dāng)域名下對應(yīng)不同路徑時(shí)鹏控,分發(fā)給不同的tomcat處理

實(shí)現(xiàn)方式

a) 拷貝一個(gè)tomcat安裝目錄致扯,修改server.xml配置中的三處端口
b) 分別在webapps目錄下,創(chuàng)建tomcat1和tomcat2目錄当辐,放置index.html(顯示不同的tomcat以及其端口)抖僵,啟動(dòng)兩個(gè)tomcat
c) 通過瀏覽器訪問 虛擬機(jī)ip:8080/tomcat1/index.html 以及
虛擬機(jī)ip:8081/tomcat2/index.html 都可以展示出內(nèi)容
d) 修改nginx配置文件并重加載

        location ~ /tomcat1/ {
            #root   duyi123;
            proxy_pass  http://127.0.0.1:8080;
            #index  index.html;
        }

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

e) 瀏覽器驗(yàn)證,訪問 http://duyi123.com/tomcat1/index.htmlhttp://duyi123.com/tomcat2/index.html缘揪,均能找到對應(yīng)頁面耍群。

最終實(shí)現(xiàn)通過不同的路徑,映射到不同的tomcat目錄下

(4)負(fù)載均衡

client1 client2 .... clientN --- server

client1 client2 ... client 2^n --- server1 server2 .. serverN

早期使用DNS(域名解析系統(tǒng))做負(fù)載找筝,具體而言蹈垢,給客戶端解析不同的ip地址,讓流量直接到達(dá)服務(wù)器袖裕。

clientN - 負(fù)載均衡器(load balancer) --調(diào)度算法-- serverN
優(yōu)點(diǎn):
1) 通過健康檢查曹抬,避免單點(diǎn)故障
2) 當(dāng)發(fā)現(xiàn)節(jié)點(diǎn)故障時(shí),從集群中移除急鳄,保證應(yīng)用的高可用

四層負(fù)載均衡谤民,在OSI模型的傳輸層堰酿,主要是轉(zhuǎn)發(fā)。
七層負(fù)載均衡张足,在OSI模型的應(yīng)用層触创,主要是代理。

負(fù)載均衡器可以處理四大類型的請求为牍,HTTP/HTTPS/TCP/UDP等哼绑。

負(fù)載均衡的調(diào)度算法:
1) 輪詢, 相當(dāng)于將服務(wù)器從第1臺到最后1臺吵聪,形成一個(gè)環(huán)狀凌那,每接收一筆請求,則從1臺開始循環(huán)遍歷吟逝。
2)最小連接帽蝶,優(yōu)先選擇連接數(shù)最少的服務(wù)器,適用于會話時(shí)間較長的業(yè)務(wù)處理块攒。
3)ip映射励稳,根據(jù)請求的ip地址進(jìn)行散列,讓同一ip下的請求都映射到同一服務(wù)器上囱井,可以解決session問題驹尼。(粘性會話)

當(dāng)訪問 192.168.1.20/lb/index.html時(shí),通過負(fù)載均衡庞呕,讓請求平均分配到8080和8081端口中新翎。
1) 分別找到兩個(gè)tomcat的安裝目錄,如/usr/local/tomcat/webapps
創(chuàng)建lb目錄住练, mkdir lb
創(chuàng)建訪問頁面地啰, cp tomcat1/index.html lb
查看頁面內(nèi)容, cat lb/index.html

2) nginx.conf配置的修改

    # http塊的層級下
    upstream myserver{
        # server列表的地址和端口
        server 192.168.1.20:8080;
        server 192.168.1.20:8081;
    }
    
     server {
        listen       80;
        server_name  192.168.1.20;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            # 將請求映射到負(fù)載均衡器中   參數(shù)為配置的upstream名稱
            proxy_pass http://myserver;
        }
     }

3) 瀏覽器訪問 http://192.168.1.20/lb/index.html

以上讲逛,是默認(rèn)的輪詢調(diào)度算法亏吝。

如果需要額外設(shè)置權(quán)重,某個(gè)服務(wù)器處理的更多些盏混,使用weight蔚鸥,默認(rèn)值是1。

   upstream myserver{
        # server列表的地址和端口
        server 192.168.1.20:8080 weight=2;
        server 192.168.1.20:8081 weight=1;
    }

如果需要根據(jù)ip地址许赃,固定server處理止喷,可以使用ip_hash。

   upstream myserver{
        server 192.168.1.20:8080  weight=2;
        server 192.168.1.20:8081  weight=1;
        ip_hash;
    }

(5) 動(dòng)靜分離

將動(dòng)態(tài)和靜態(tài)請求分離開混聊,不能單純的理解為動(dòng)態(tài)頁面和靜態(tài)頁面的物理分離启盛。
如果是靜態(tài)資源請求,直接查找nginx上的靜態(tài)資源地址技羔。
如果是動(dòng)態(tài)資源請求僵闯,通過反向代理,映射到tomcat路徑下的資源藤滥。

實(shí)現(xiàn)方式:
1) 單獨(dú)把靜態(tài)文件放在獨(dú)立的服務(wù)器及獨(dú)立的域名下鳖粟,推薦方案;
2) 將動(dòng)態(tài)資源和靜態(tài)資源混合在一起拙绊,通過nginx來分開向图。

需求: 訪問圖片等靜態(tài)資源時(shí),可以直接從nginx中獲取标沪,訪問jsp等動(dòng)態(tài)資源時(shí)榄攀,通過tomcat返回結(jié)果。

處理流程:
1) 準(zhǔn)備動(dòng)態(tài)資源金句,來到/usr/local/tomcat/webapps 檩赢, 通過rz命令上傳本地的index.jsp
2) 準(zhǔn)備靜態(tài)資源,來到/usr/local/nginx/image违寞, 通過rz命令上傳本地的test.png

  1. nginx.conf配置
        # 動(dòng)態(tài)資源配置
        location ~ .*.jsp$ {
            proxy_pass http://myserver;
        }       
        
        # 靜態(tài)資源配置
        location ~ .*\.(gif|jpg|png|css)$ {
            root /usr/local/nginx/image;
            # 在瀏覽器端使用緩存  設(shè)置過期時(shí)間
            expires 3d;
        }

4) 瀏覽器驗(yàn)證贞瞒,分別訪問 http://192.168.1.20/jsp/index.jsp & http://192.168.1.20/test.png

?

(6)location塊

匹配規(guī)則:

1)location = /uri 精確匹配
2)location ^~ /uri 前綴匹配,順序在正則之前
location /uri 前綴匹配趁曼,順序在正則匹配之后

3)location ~ pattern 區(qū)分大小寫的正則匹配
location ~* pattern 不區(qū)分大小寫的正則匹配

4)location / 通用匹配军浆,接收未匹配到其他location的請求

匹配順序:
首先會進(jìn)行精確匹配,然后會進(jìn)行前綴匹配挡闰,具體順序按照指令長度乒融,從長到短的順序依次匹配,但是在正則匹配時(shí)摄悯,是按照配置文件的順序依次匹配的赞季,如果不希望前綴匹配后進(jìn)行正則匹配,那么使用^~

情況一:

#對于 ^~ 和 ~

location ^~ /helloworld {
    return 601;
}

#location /helloworld {
#    return 602;
#}
#兩種前綴匹配不能同時(shí)出現(xiàn)  否則啟動(dòng)會報(bào)錯(cuò)

訪問 duyi123.com/helloworld/test -》 返回601

情況二:

#location ^~ /helloworld {
#    return 601;
#}

location /helloworld {
    return 602;
}
#兩種前綴匹配不能同時(shí)出現(xiàn)  否則啟動(dòng)會報(bào)錯(cuò)

location ~ /helloworld {
    return 603;
}

訪問 duyi123.com/helloworld/test -》 返回603

情況三:


#location ^~ /helloworld {
#    return 601;
#}

location /helloworld {
    return 602;
}
#兩種前綴匹配不能同時(shí)出現(xiàn)  否則啟動(dòng)會報(bào)錯(cuò)

location ~ /helloworld {
    return 603;
}

location ~ /helloworld/test {
    return 604;
}

訪問 duyi123.com/helloworld/test/a.html -》 返回603

情況四:

#location ^~ /helloworld {
#    return 601;
#}

location /helloworld {
    return 602;
}
#兩種前綴匹配不能同時(shí)出現(xiàn)  否則啟動(dòng)會報(bào)錯(cuò)

location ~ /helloworld/test {
    return 604;
}

location ~ /helloworld {
    return 603;
}

訪問 duyi123.com/helloworld/test/a.html -》 返回604

(7)URL重寫

對url的規(guī)范化處理射众,域名更換時(shí)的新舊跳轉(zhuǎn)碟摆,一些額外的參數(shù)調(diào)整等等

server{
    listen 80;
    server_name duyi123.com;
    rewrite ^/(.*) http://www.duyi123.com/$1 permanent;
}
# 訪問 duyi123.com   地址欄會變成www.duyi123.com

3、Nginx安裝

在各官網(wǎng)下載相關(guān)組件 nginx openssl zlib pcre 等等

image-20200310173801106.png

以openssl為例
1) 通過rz上傳壓縮包
2) 通過tar -xvf *.tar.gz 進(jìn)行解壓縮
3)cd openssl-1.1.1d 進(jìn)行配置檢查以及編譯
./config 執(zhí)行配置檢查
make & make install 進(jìn)行編譯和安裝

? 如上過程叨橱,適用于zlib和pcre
? 注意: 對于 pcre而言典蜕, 執(zhí)行檢查命令為 ./configure

  1. 安裝nginx過程中 執(zhí)行配置檢查

./configure --sbin-path=/usr/local/nginx/nginx
--conf-path=/usr/local/nginx/nginx.conf
--pid-path=/usr/local/nginx/nginx.pid
--with-http_ssl_module
--with-pcre=/usr/local/src/pcre-8.44
--with-zlib=/usr/local/src/zlib-1.2.11
--with-openssl=/usr/local/src/openssl-1.1.1d
```

  1. 仍然執(zhí)行 make 以及 make install
  2. nginx安裝成功 ./nginx驗(yàn)證

注意事項(xiàng):nginx服務(wù)器,需要虛擬機(jī)開放80端口的訪問
防火墻配置 (同樣適用于開放8080 8081端口)
firewall-cmd --list-all 查看當(dāng)前配置
firewall-cmd --add-service=http --permanent 開放http訪問
firewall-cmd --add-port=80/tcp --permanent 開放80端口
firewall-cmd --reload 重啟防火墻保存

jdk的安裝
1) 解壓縮 -- 拷貝目錄到 /usr/local/java

  1. 更改環(huán)境變量 vim /etc/profile
export JAVA_HOME=/usr/local/java
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
  1. 讓環(huán)境變量生效 source /etc/profile
  2. 驗(yàn)證版本 java -version

tomcat的安裝
1) 解壓縮 -- 拷貝目錄到 /usr/local/tomcat

  1. 執(zhí)行啟動(dòng) ./startup.sh
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罗洗,一起剝皮案震驚了整個(gè)濱河市愉舔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伙菜,老刑警劉巖轩缤,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡火的,警方通過查閱死者的電腦和手機(jī)壶愤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馏鹤,“玉大人征椒,你說我怎么就攤上這事∨壤郏” “怎么了勃救?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長治力。 經(jīng)常有香客問我蒙秒,道長,這世上最難降的妖魔是什么宵统? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任晕讲,我火速辦了婚禮,結(jié)果婚禮上榜田,老公的妹妹穿的比我還像新娘益兄。我一直安慰自己,他們只是感情好箭券,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布净捅。 她就那樣靜靜地躺著,像睡著了一般辩块。 火紅的嫁衣襯著肌膚如雪蛔六。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天废亭,我揣著相機(jī)與錄音国章,去河邊找鬼。 笑死豆村,一個(gè)胖子當(dāng)著我的面吹牛液兽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掌动,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼四啰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了粗恢?” 一聲冷哼從身側(cè)響起柑晒,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎眷射,沒想到半個(gè)月后匙赞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佛掖,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年涌庭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芥被。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡脾猛,死狀恐怖撕彤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情猛拴,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布蚀狰,位于F島的核電站愉昆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏麻蹋。R本人自食惡果不足惜跛溉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扮授。 院中可真熱鬧芳室,春花似錦、人聲如沸刹勃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荔仁。三九已至伍宦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乏梁,已是汗流浹背次洼。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留遇骑,地道東北人卖毁。 一個(gè)月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓踪区,卻偏偏與公主長得像些己,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子耳幢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容