Ⅰ Nginx配置文件詳解
說到該指令 ,首先得闡述一下什麼是所謂的 「驚群問題」,可以參考 WIKI網路的解釋。就Nginx的場景來解釋的話大致的意思就是:當一個新網路連接來到時,多個worker進程會被同時喚醒,但僅僅只有一個進程可以真正獲得連接並處理之。如果每次喚醒的進程數目過多的話,其實是會影響一部分性能的。
所以在這里,如果accept_mutex on,那麼多個worker將是以串列方式來處理,其中有一個worker會被喚醒;反之若accept_mutex off,那麼所有的worker都會被喚醒,不過只有一個worker能獲取新連接,其它的worker會重新進入休眠狀態。
用rewrite轉發的話,url會發生變化的,那就用proxy_pass吧,於是添加了如下的配置:
在現有環境的nginx里添加這段配置之後,訪問卻始終轉不過去,查看nginx日誌也只能看到是404信息,並沒有更多定位問題的信息。檢查了許久也沒找到原因,於是重新裝了一台新nginx,裡面只加上面這段配置,結果nginx是能夠轉發成功的,這說明單獨來看這條location的配置是沒有問題的,很有可能是現有環境nginx里的某些配置影響到了這個轉發。
為了定位問題原因,我將aaa.example.com虛擬主機下的其他配置注意注釋掉來調試,最後發現當注釋掉proxy_set_header Host $http_host ;這條配置之後,就能成功轉發了。這才注意到是反向代理配置的問題。現有環境中原有的配置也不能隨便刪掉,上網查了下原因,找到下面這種解決方案:
即,在location裡面添加一條proxy_set_header Host http_host時,則不改變請求頭的值,所以當要轉發到bbb.example.com的時候,請求頭還是aaa.example.com的Host信息,就會有問題;當Host設置為$proxy_host時,則會重新設置請求頭為bbb.example.com的Host信息。
另外,關於proxy_pass轉發url的參數,可以通過在location中用rewrite來做,所以完善後的配置如下:
在location用rewrite改變了URI之後,proxy_pass將使用改變後的URI。上面例子(.*)是將所有參數傳給 1會拼接在 http://bbb.example.com 後面。
先來看下proxy_set_header的語法
允許重新定義或者添加發往後端伺服器的請求頭。value可以包含文本、變數或者它們的組合。 當且僅當當前配置級別中沒有定義proxy_set_header指令時,會從上面的級別繼承配置。 默認情況下,只有兩個請求頭會被重新定義:
當匹配到/customer/straightcustomer/download時,使用crmtest處理,到upstream就匹配到crmtest.aty.sohuno.com,這里直接轉換成IP進行轉發了。假如crmtest.aty.sohuno.com是在另一台nginx下配置的,ip為10.22.10.116,則$proxy_host則對應為10.22.10.116。此時相當於設置了Host為10.22.10.116。如果想讓Host是crmtest.aty.sohuno.com,則進行如下設置:
如果不想改變請求頭「Host」的值,可以這樣來設置:
但是,如果客戶端請求頭中沒有攜帶這個頭部,那麼傳遞到後端伺服器的請求也不含這個頭部。 這種情況下,更好的方式是使用$host變數——它的值在請求包含「Host」請求頭時為「Host」欄位的值,在請求未攜帶「Host」請求頭時為虛擬主機的主域名:
此外,伺服器名可以和後端伺服器的埠一起傳送:
如果某個請求頭的值為空,那麼這個請求頭將不會傳送給後端伺服器:
nginx配置項,裡面的配置項有代理https,http,代理靜態文件,H5分發,代理TCP連接,能滿足大多數搭建測試環境所要用的nginx的情況,大家碰到要使用nginx的時候可以參考下
Ⅱ 寶塔面板nginx下動態鏈接301跳轉到偽靜態配置文件修改
301一般是某個頁面鏈接改動後,出現新鏈接,舊鏈接變成404,十分不利於用戶體驗,因此建議把舊鏈接301跳轉到新鏈接亂蘆上,傳遞權重過去,對網站更換cms尤其重要,往往更換cms後鏈接規則不同,導致老站權重丟失
一般修改的301規則都是沒有問號的,比如說
rewrite ^/jingji(.*)$ https://www.wendaba.com/list-6-1.html permanent;
以上這種只適合靜態鏈接
但是對於舊鏈接頁面(或者蜘蛛老抓動態鏈接頁面,但是動態鏈接又不想讓他參與排名)有問號的多參數的就不好使中並了賣陪跡
只能用一下的方法,這是只有一個參數的
if ($request_uri ~* "^/\?p=(\d+)$") {
set $myarg1 $1;
rewrite .* https://www.wendaba.com/$myarg1.html? permanent;
}
帶兩個參數可以這樣
if ($request_uri ~* "^/index.php\?moleid=(\d+)&itemid=(\d+)$") {
set $myarg1 $1;
set $myarg2 $2;
rewrite .* https://www.wendaba.com/$myarg1-0-$myarg2-1.html? permanent;
}
Ⅲ 不容錯過的Nginx配置詳解,一文帶你搞懂Nginx
Nginx是一個高性能的HTTP和反向代理伺服器,特點是佔用內存少,並發能力強,事實上Nginx的並發能力確實在同類型的網頁伺服器中表現好。Nginx專為性能優化而開發,性能是其最重要的考量,實現上非常注重效率,能經受高負載的考驗,有報告表明能支持高達50000個並發連接數。
需要客戶自己在瀏覽器配置代理伺服器地址。
例如:在大陸訪問www.google.com,我們需要一個代理伺服器,我們通過代理伺服器去訪問谷歌,這個過程就是正向代理。
反向代理,客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問,我們只需要將請求發送到反向代理伺服器,由反向代理伺服器去選擇目標伺服器獲取數據後,在返回給客戶端,此時反向代理伺服器和目標伺服器對外就是一個伺服器,暴露的是代理伺服器地址,隱藏了真實伺服器IP地址。
單個伺服器解決不了,我們增加伺服器的數量,然後將請求分發到各個伺服器上,將原先請求集中到單個伺服器上的情況改為將請求分發到多個伺服器上,將負載分發到不同的伺服器,也就是我們說的負載均衡。
為了加快網站的解析速度,可以把動態頁面和靜態頁面由不同的伺服器來解析,加快解析速度。降低原來單個伺服器的壓力。
進入到下面的目錄,然後使用命令
配置文件所在位置:/usr/local/nginx/conf/nginx.conf
由全局塊+events塊+http塊組成
從配置文件開始到events之間的內容,主要會設置一些影響Nginx伺服器整體運行的配置指令,主要包括配置運行Nginx伺服器的用戶(組)、允許生成的worker process數,進程pid存放路徑、日誌存放路徑和類型以及配置文件的引入等。
events塊設計的指令主要影響Nginx伺服器與用戶的網路連接,常用的設置包括是否開啟對多work process下的網路連接進行序列化,是否允許同時接收多個網路連接,選取哪種事件驅動模型來處理連接請求,每個work process可以同時支持的最大連接數等。下面的例子表示每個work process支持的最大連接數為1024。這部分配置對Nginx的性能影響較大,在實際中應該靈活配置。
Nginx伺服器配置中最頻繁的部分,代理、緩存和日誌定義等絕大多數功能和第三方模塊的配置都在這里,http塊又包括http全局塊和server塊。
http全局塊配置的指令包括文件引入、MIME-TYPE定義、日誌自定義、連接超時時間、單鏈接請求數上限等。
這塊和虛擬主機有密切關系,虛擬主機從用戶角度看,和一台獨立的硬體主機是完全一樣的,該技術的產生是為了節省互聯網伺服器硬體成本。
每個http塊可以包括多個server塊,而每個server塊就相當於一個虛擬主機。
每個server塊也可以分為全局server塊,以及可以同時包含多個location塊。
最常見的配置時本虛擬主機的監聽配置和本虛擬主機的名稱或IP配置。
一個server塊可以配置多個location塊。
這塊的主要作用是基於Nginx伺服器接收到的請求字元串(例如server_name/uri-string),對虛擬主機名稱(也可以是IP別名)之外的字元串(例如前面的/uri-string)進行匹配,對特定的請求進行處理。地址定向、數據緩存和應答控制等功能,還有許多第三方模塊的配置也在這里進行。
訪問http://ip,訪問到的是Tomcat的主頁面http://ip:8080。
Nginx+JDK8+Tomcat
訪問:http://192.168.71.167/,看到的是Tomcat的首頁。
根據訪問的路徑跳轉到不同的伺服器中去。
訪問http://ip:9001/e 直接跳到http://127.0.0.1:8080/e
訪問http://ip:9001/vod 直接跳到http://127.0.0.1:9090/vod
Nginx+JDK8+配置兩個Tomcat,Tomcat的配置不再講述。
訪問http://192.168.71.167:9001/e/a.html跳到了http://127.0.0.1:8080/e/a.html頁面。
訪問http://192.168.71.167:9001/vod/a.html跳到了http://127.0.0.1:9090/vod/a.html頁面。
假如Nginx代理伺服器Server的配置為:192.168.71.167:9001,跳到:127.0.0.1:8080,訪問者的IP為:192.168.71.200:20604。
通過訪問http://192.168.71.167/e/a.html,實現負載均衡的效果,平均分攤到8080和8081埠中。
Nginx+JDK8+2台Tomcat,一台8080,一台8081。
訪問:http://192.168.71.167/e/a.html,8080和8081交替訪問。
1 輪詢(默認)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
2 weight
weight代表權重,默認為1,權重越高被分配的客戶端越多。
指定輪詢幾率,weight和訪問比率成正比,用於後端伺服器性能不均的情況。
3 ip_hash
每個請求按訪問IP的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題,示例如下:
4 fair(第三方)
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
訪問圖片:http://192.168.71.167/image/1.jpg
訪問頁面:http://192.168.71.167/www/a.html
訪問目錄:http://192.168.71.167/image/(因為設置了autoindex on;)
兩台機器,每台機器都裝有keepalived+Nginx+Tomcat。
主備keepalived伺服器中只有master一台機器會出現VIP地址,否則會出現腦裂問題。
【提示】腳本要加+x的執行許可權:chmod +x chk_nginx.sh
在Nginx里把虛擬IP配置進去即可。
一個Nginx是由一個master進程和多個worker進程組成的。
客戶端發送請求到Master,然後給worker,再由這些work爭搶處理這個請求。
1 可以使用nginx -s reload進行熱部署方式;
2 每個worker是獨立的進程,如果有其中的一個worker出現了問題,其他worker獨立的繼續進行爭搶,實現請求的過程,不會造成服務的中斷;
Nginx和Redis類似,都採用了io多路復用機制。每個worker進程都可以把CPU發揮到極致,一般來說worker數和伺服器的CPU數相等是最為適宜的。
發送請求:訪問靜態資源佔用2個連接,反向代理佔用4個連接。
【溫馨提示】
Ⅳ 通過Nginx部署flask項目和靜態站點
安裝nginx
安裝supervisor( 官方文檔 )
安裝uwsgi( 官方中文文檔 )
啟動服務
nginx 日誌(默認)
supervisor 日誌(默認)
supervisor 查看啟動的進程
supervisor相關命令
一般配置文件在 /etc/nginx 目錄下
全局配置文件為 nginx.conf ,一般需要改的是下面兩項,其他的保持默認就好了
我們要添加配置只需修改 sites-enabled/default
或在 conf.d/ 下面添加配置文件即可,因為在 nginx.conf 中會導基祥入這兩個地方的配置文件
靜態web伺服器只需要有靜態文件(html+css+js)和配置Nginx即可
假設我的靜態文件在 /home/moco/www/html 目錄下
接下來我們來配置nginx
這里為了簡單,直接修改 sites-enabled/default
如果要同時配置多個呢?
說下root 和 alias的區別:
alias指定的目錄就是要訪問的目錄,root是要森咐訪問目錄的上此鋒純級目錄,使用root時,
靜態文件的實際路徑等於root+location的路徑,如上面的第二個location,
站點文件必須在 /home/moco/other/tool/ 下, 而使用alias,則靜態文件的路徑
就是alias路徑,即第三個location站點文件就在 home/moco/www/tool/ 下。
項目路徑: /home/moco/www/myflask/
/home/moco/www/myflask/manage.py
虛擬環境: /home/moco/.local/share/virtualenvs/myflask-XuRgNXhR
在虛擬環境中安裝 flask 和 uwsgi (pip install uwsgi)
在項目路徑下創建uwsgi的配置文件(也可以統一在一個地方創建,如 /etc/uwsgi/ )
uwsgi_config.ini
啟動虛擬環境中的uwsgi
配置Nginx 配置文件中的 sites-enabled/default
啟動nginx
/home/moco/www/flask_hello/uwsgi_config.ini
/home/moco/www/flask_world/uwsgi_config.ini
因為要啟動多個uwsgi的配置文件,這里就用supervisor工具統一啟動管理
在 /etc/supervisor/conf.d/ 下分別添加
flask_hello.conf
flask_world.conf
啟動supervisor
Nginx配置
下面是flask_hello的訪問示例: