vue項目如何打包部署并用Nginx做代理訪問
vue是網頁的前端框架,vue的程序是在瀏覽器上運行,界面也是通過瀏覽器渲染出來的。
vue是單頁的應用,后端需要提供鏈接給瀏覽器下載這一頁所需要的所有資源,包括html文件,js文件以及css文件,以及圖片,字體文件等等。
所以從vue的工程中編譯生成的所有文件按照工程中的路徑關系在ngnix放好即可,需要注意的是ngnix可能需要做一些路徑的配置。
vue的打包可以通過npmrunbuild命令實現,運行一個命令之后,vue會生成所有資源文件。
另外,前后端的數據交互需要服務器提供對應的接口,在ngnix服務器上需要實現這些數據交互的接口。
nginx windows還是linux
1、首先,nginx可以在Windows和Linux操作系統上運行。
2、選擇使用哪個操作系統來部署nginx取決于你的具體需求和偏好。
3、如果你是一個Windows用戶,你可能更傾向于使用nginxforWindows。
深入淺出Nginx,如何做到高并發下的高效處理如何做到熱部署
01前言
Nginx("enginex")是一款是由俄羅斯的程序設計師IgorSysoev所開發高性能的Web和反向代理服務器,也是一個IMAP/POP3/SMTP代理服務器。
在高連接并發的情況下,Nginx是Apache服務器不錯的替代品。由于它的內存占用少,啟動極快,高并發能力強,在互聯網項目中廣泛應用。
上圖簡單展示了Nginx的部署,Nginx類似網關。
02正向代理與反向代理正向代理與反向代理有什么區別昵?我們就不廢話先,直接上圖
這兩圖這么一整,估計也很難理解清楚那個是正向代理,那個是反向代理。那我現在詳細解釋一下吧。
正向代理形如1圖,我們在aws上申請首次注冊送12月的服務器,然后它就是我們的VPN了,然后我們通過它就可以訪問YouTube了。不知道大伙能不能明白,正向代理是我們客戶端發起的,客戶端做出調整。
反向代理形如2圖,服務器A,服務器B,服務C部署在內網,我們通過Nginx暴露一個外網地址,小伙伴們就可以訪問我們了。
這么講不知道能不能解釋清楚,大伙可以繼續看一下下面這個比喻:
正向代理:客戶端<一>代理一>服務端
正向代理簡單地打個租房的比方:
A(客戶端)想租C(服務端)的房子,但是A(客戶端)并不認識C(服務端)租不到。B(代理)認識C(服務端)能租這個房子所以你找了B(代理)幫忙租到這個房子。
這個過程中C(服務端)不認識A(客戶端)只認識B(代理)C(服務端)并不知道A(客戶端)租了房子,只知道房子租給了B(代理)。
反向代理:客戶端一>代理<一>服務端
反向代理也用一個租房的例子:
A(客戶端)想租一個房子,B(代理)就把這個房子租給了他。這時候實際上C(服務端)才是房東。B(代理)是中介把這個房子租給了A(客戶端)。
這個過程中A(客戶端)并不知道這個房子到底誰才是房東。
03Master-Worker模式啟動Nginx后,其實就是在80端口啟動了Socket服務進行監聽,如圖所示,Nginx涉及Master進程和Worker進程。
1--進程數,建議設置和CPU個數一樣或2倍
2--日志級別,默認error級別
3--Nginx啟動后的pid存放位置
4--配置每個進程的連接數,總的連接數=worker_processes*worker_connections根據物理內存大小來配置,默認1024
Master進程的作用是?
讀取并驗證配置文件nginx.conf;管理worker進程;
Worker進程的作用是?
每一個Worker進程都維護一個線程(避免線程切換),處理連接和請求;注意Worker進程的個數由配置文件決定,一般和CPU個數相關(有利于進程切換),配置幾個就有幾個Worker進程。
由圖1可以看到,我這邊配了兩個worker_processes,所以有兩個worker進程。
04如何做到高并發下的高效處理?上文已經提及Nginx的worker進程個數與CPU綁定、worker進程內部包含一個線程高效回環處理請求,這的確有助于效率,但這是不夠的。
作為專業的程序員,我們可以開一下腦洞:BIO/NIO/AIO、異步/同步、阻塞/非阻塞...
要同時處理那么多的請求,要知道,有的請求需要發生IO,可能需要很長時間,如果等著它,就會拖慢worker的處理速度。
Nginx采用了Linux的epoll模型,epoll模型基于事件驅動機制,它可以監控多個事件是否準備完畢,如果OK,那么放入epoll隊列中,這個過程是異步的。worker只需要從epoll隊列循環處理即可。
05如何做到熱部署?所謂熱部署,就是配置文件nginx.conf修改后,不需要stopNginx,不需要中斷請求,就能讓配置文件生效!(nginx-sreload重新加載|nginx-t檢查配置|nginx-sstop停止nginx)
通過上文我們已經知道worker進程負責處理具體的請求,那么如果想達到熱部署的效果,可以想象:
方案一:
修改配置文件nginx.conf后,主進程master負責推送給woker進程更新配置信息,woker進程收到信息后,更新進程內部的線程信息。(有點valatile的味道)
方案二:
修改配置文件nginx.conf后,重新生成新的worker進程,當然會以新的配置進行處理請求,而且新的請求必須都交給新的worker進程,至于老的worker進程,等把那些以前的請求處理完畢后,kill掉即可。
Nginx采用的就是方案二來達到熱部署的!
模擬一個例子:
首先在本地模擬一個線上需要升級Nginx的環境,假設舊版本為nginx-1.0.15,需要升級到nginx-1.16.0。
開始之前,先牢記一下以下幾個命令:
-HUP平滑啟動(相當于reload)
-USR2平滑升級可執行程序,主要用在版本升級
-WINCH從容關閉工作進程
-USR1重新打開日志文件,主要用在日志切割(相當于reopen)
配置舊版本
#下載nginx-1.0.15
wgethttp://nginx.org/download/nginx-1.0.15.tar.gz
#解壓壓縮包
tar-zxfnginx-1.0.15.tar.gz
#進入解壓后的目錄
cdnginx-1.0.15
#配置nginx
./configure--prefix=/home/nginx
#編譯安裝
make&&makeinstall
#運行nginx
sudo/home/nginx/sbin/nginx
此時訪問服務器地址應該可以看到nginx的歡迎頁面了。
獲得新版本二進制
#下載nginx-1.16.0
wgethttp://nginx.org/download/nginx-1.16.0.tar.gz
#解壓壓縮包
tar-zxfnginx-1.16.0
#進入解壓后的目錄
cdnginx-1.16.0/
#配置nginx
./configure--prefix=/home/nginx
#只編譯不需要安裝
make
在編譯后的objs目錄中,可以看到二進制文件nginx。
熱部署
經過以上步驟,我們實現了一個正在運行的舊版本nginx和編譯完成的新版本nginx二進制執行文件。
熱部署的流程是:
備份舊的nginx可執行文件
新的nginx可執行文件直接替換舊的(此時舊的nginx進程還在運行)
向nginxmaster進程發送熱部署信號,新的nginx進程啟動,舊的worker不再就收請求。
關閉舊的worker進程,完成熱部署。
#備份
cp/home/nginx/sbin/nginx/home/nginx/sbin/nginx.old
#替換
cp-fobjs/nginx/home/nginx/sbin/nginx
#查看masterpid
ps-ef|grepnginx
root237121021:21?00:00:00nginx:masterprocess/home/nginx/sbin/nginx
nobody2371523712021:21?00:00:00nginx:workerprocess
#發送熱部署信號,這里masterpid替換為自己查詢到的
kill-USR223712
#查看當前nginx進程情況,27522就是新的master進程
ps-ef|grepnginx
root237121021:21?00:00:00nginx:masterprocess/home/nginx/sbin/nginx
nobody2371523712021:21?00:00:00nginx:workerprocess
root2752223712021:41?00:00:00nginx:masterprocess/home/nginx/sbin/nginx
nobody2752427522021:41?00:00:00nginx:workerprocess
#關閉舊的worker
kill-WINCH23712
#再次查看進程,可以發現舊的worker進程關閉了
ps-ef|grepnginx
root237121021:21?00:00:00nginx:masterprocess/home/nginx/sbin/nginx
root2752223712021:41?00:00:00nginx:masterprocess/home/nginx/sbin/nginx
nobody2752427522021:41?00:00:00nginx:workerprocess
保留舊的master進程是為了在新的版本存在問題時,可以快速回退到原版本。如果發現問題要緊急回滾呢?
cp-fnginx.oldnginx
#拉起舊版本的worker進程(-HUP相當于-sreload)
kill-HUPold_master_pid
#讓新版本的worker不再接受請求
kill-USR2new_master_pid
#關閉新版本的woker進程
kill-WINCHnew_master_pid
如果確認無誤要退出老版本的nginx,可以執行命令
kill-QUITold_master_pid
windows怎么重啟nginx
從nginx官網下載相應的安裝包2建議下載下載穩定版3解壓到相應的目錄,比如我是e盤然后修改目錄名字為nginx4進入nginx目錄雙擊nginx.exe來啟動nginx5此時直接在瀏覽器地址欄輸入:localhost便能看到歡迎頁面,說明你虛擬主機已經搭建好了6但是有時候我們需要配置路徑在默認情況下他的root是nginx目錄下的html文件夾如若修改則打開conf目錄下的nginx.conf7找到server選項修改咯location中的root選項。8比如我修改到D:/webroot則修改為