Nginx使用


 

1、正向代理與反向代理

 

 

 

圖解:

在正向代理中,Proxy和Client同屬於一個LAN(圖中方框內),隱藏了客戶端信息;

在反向代理中,Proxy和Server同屬於一個LAN(圖中方框內),隱藏了服務端信息;

理解:

正向代理,就好比我們設置代理服務器一樣,我們要向服務器A請求資源,實際上我們是把請求拋給代理服務器,由代理服務器去請求服務器A的資源,也就是說,對客戶端而言,給他們的資源訪問提供了一個統一的出口,這樣服務器A就不知道是哪個客戶端的請求了

反向代理,相對服務端而言,為請求的訪問提供了一個統一的入口,也就是說客戶端只要向這個代理服務器發送請求,而代理服務器對這些請求轉發而目標服務器,這樣客戶端就不知道到底訪問的是哪個服務器了

正向代理和反向代理一個區別就是:正向代理明確的告訴代理服務器要訪問哪個地址,而反向代理則是只需要訪問到需要的資源就可以了,其它的不需要關注

 

2、項目場景

 

 

 

圖解:

正常一個項目在使用過程中,通常都是正向與反向一起使用的

 

3、Nginx安裝

CentOS:sudo yum install nginx

Ubuntu:sudo apt install nginx

 

也可以使用安裝包安裝:https://www.cnblogs.com/shanfeng1000/p/11063851.html

 

4、Nginx常用命令

 

nginx -s reload :修改配置后重新加載生效
nginx -s reopen :重新打開日志文件
nginx -t -c /path/to/nginx.conf 測試nginx配置文件是否正確

nginx -s stop :快速停止nginx
nginx -s quit :完整有序的停止nginx

 

具體的命令可以通過:nginx -h 查看

 

5、Nginx配置詳解

參考博客:https://www.cnblogs.com/bluestorm/p/4574688.html

 

Nginx配置文件主要分成四部分:main(全局設置)、server(主機設置)、upstream(上游服務器設置,主要為反向代理、負載均衡相關配置)和 location(URL匹配特定位置后的設置),每部分包含若干個指令。

main部分設置的指令將影響其它所有部分的設置;

server部分的指令主要用於指定虛擬主機域名、IP和端口;

upstream的指令用於設置一系列的后端服務器,設置反向代理及后端服務器的負載均衡;

location部分用於匹配網頁位置(比如,根目錄“/”,“/images”,等等)。他們之間的關系式:server繼承main,location繼承server;upstream既不會繼承指令也不會被繼承。它有自己的特殊指令,不需要在其他地方的應用。

 

首先,輸入nginx -h 可以nginx命令,另外,可以看到nginx的配置文件的路徑:

 

 

打開這個conf文件(vim /etc/nginx/nginx.conf),

 

 

Nginx啟動會讀取這個配置文件,當然,我們如果在啟動時使用-c參數指定,那就是讀取指定的配置文件了,最外圍就是main配置,也就是全局配置,比如上面的worker_processes auto就是worker進程數的配置,http就是http服務器的配置,比如是否使用keepalive啊,是否使用gzip進行壓縮等都是這個節點配置,而且這個也是我們常用的配置,我們配置server節點等等都是配置在這個里面,但是我們一般不會在nginx.conf中配置server節點,因為http節點可以使用include指令,server節點都被配置在其它文件中,如圖:

 

 

也就是說,/etc/nginx/conf.d目錄下的所有以.conf結尾的文件,/etc/nginx/sites-enabled下的所有文件都被視為http節點的配置文件,所以我們可以再這兩個文件中配置server節點,可以打開這個目錄下面的內容,打開其中的默認文件查看server節點和location節點的配置,其中很多配置應該都是一看就明白的

 

Server配置詳解:

上面說到/etc/nginx/conf.d目錄下的所有.conf文件都會被認為是http節點的配置,那么我們可以在/etc/nginx/conf.d中創建一個example.conf,然后打開輸入:

server {

       listen 88;  #監聽主機的88端口,如果端口小於1024可能涉及權限問題

       listen [::]:88;  #監聽主機的88端口

       server_name example;  #當前服務器的名稱

 

       root /var/www/example;   #當前服務器的根路徑

       index index.html index.htm index.nginx-debian.html;   #起始頁

 

       location / {          #路由配置規則,匹配上就使用里面的配置

               root /var/www/example;   #根路徑

               index index.html index.htm index.nginx-debian.html;   #起始頁

       }

location = /test {                #路由配置規則,匹配上就使用里面的配置

               root /var/www/example/test;   #根路徑

               index index.html index.htm index.nginx-debian.html;   #起始頁

       }

}

 

 

 

上面的配置是說(當前主機IP:192.168.182.134),監聽主機的88端口,當訪問請求時http://192.168.182.134:88/時,使用/var/www/example做根路徑,當請求是http://192.168.182.134:88/test時使用/var/www/example/test做更路徑,所以我們分別創建/var/www/example和/var/www/example/test兩個目錄,在里面創建一個index.html文件,內容分別是:

/var/www/example/index.html

 

 

 

/var/www/example/test/index.html

 

 

 

 

然后可以啟動nginx,然后測試一下了

先測試配置是否有問題:sudo nginx -t

如果提示:

nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)

則是權限不夠,干脆將nginx目錄的所有人改一下:sudo chown -R feng:feng /etc/nginx

測試沒問題后就可以啟動了:sudo nginx

 

 

然后就可以在瀏覽器輸入地址訪問了:

http://192.168.182.134:88/index.html

http://192.168.182.134:88/test/index.html

 

負載均衡配置:

在/etc/nginx/conf.d目錄下新建一個balance.conf,輸入一下內容:

 

upstream balance_test {

        server 172.16.3.212;  #我本地的IP地址

        server 172.16.201.27;  #27預生產環境

        ip_hash;  #使用負載均衡的IP哈希規則

}

 

 

server {

       listen 89;  #監聽主機的89端口,如果端口小於1024可能涉及權限問題

       listen [::]:89;  #監聽主機的89端口

       server_name balance;  #當前服務器的名稱

 

       root /var/www/balance;   #當前服務器的根路徑

       index index.html index.htm index.nginx-debian.html;   #起始頁

 

       location /Tfs.Loan.Web {    #虛擬路徑是這個的時候,為貸后

                proxy_pass http://balance_test;    #這里的balance_test就是指上面的upstream中的一個,到底取哪個就看情況了,下面是代理服務器的配置

                proxy_http_version 1.1;

                proxy_set_header Upgrade $http_upgrade;

                proxy_set_header Connection keep-alive;

                proxy_set_header Host $host;

                proxy_set_header   X-Real-IP        $remote_addr;

                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

                proxy_cache_bypass $http_upgrade;

                # First attempt to serve request as file, then

                # as directory, then fall back to displaying a 404.

                #try_files $uri $uri/ =404;

        }

      

       location ~ .*\.(js|css|svg|ico|png)$ {   #靜態文件

                proxy_pass http://balance_test;      #這里的balance_test就是指上面的upstream中的一個,到底取哪個就看情況了

        }

 

}

 

 

 

然后按照上面啟動nginx的方式啟動就可以了,如果之前以啟動,那么只需要使用以下命令重新加載配置就可以了:sudo nginx -s reload

打開瀏覽器訪問:http://192.168.182.134:89/Tfs.Loan.Web

 

 

Location配置詳解:

語法規則: location [=|~|~*|^~] /uri/ { … }

= 開頭表示精確匹配

^~ 開頭表示uri以某個常規字符串開頭,理解為匹配 url路徑即可。nginx不對url做編碼,因此請求為/static/20%/aa,可以被規則^~ /static/ /aa匹配到(注意是空格)。

~ 開頭表示區分大小寫的正則匹配

~*  開頭表示不區分大小寫的正則匹配

!~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配 的正則

/ 通用匹配,任何請求都會匹配到。

多個location配置的情況下匹配順序為(參考資料而來,還未實際驗證,試試就知道了,不必拘泥,僅供參考):

首先匹配 =,其次匹配^~, 其次是按文件中順序的正則匹配,最后是交給 / 通用匹配。當有匹配成功時候,停止匹配,按當前匹配規則處理請求。

 

附:

一個很常見的錯誤:

當執行nginx -s stop后,在執行nginx -s reload或者nginx -s reopen ,會提示nginx.pid文件找不到:

 

 

這個nginx是因為nginx的主進程被關閉了,只需要重啟主進程就可以了,執行:sudo nginx

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM