一、部署Nginx步驟
第一步: 連接服務(wù)器
如果你是Mac本沒有連接服務(wù)器的經(jīng)驗(yàn)?zāi)悄憧梢匀タ纯?a href="http://www.itdecent.cn/p/7cf4b2b28721" target="_blank">Mac連接遠(yuǎn)程服務(wù)器這片文章。
第二步:下載Nginx
下載Nginx有如下兩種方法(本文下載的是 nginx-1.16.1.tar.gz):
1、本地下載
去nginx download官網(wǎng)下載穩(wěn)定版的nginx,上傳到服務(wù)器的某個(gè)位置(這里的位置是 /home/admin/nginx )解壓。
2、服務(wù)器上用命令下載
在服務(wù)器 /home/admin/ 目錄下新建一個(gè) nginx 文件夾(mkdir nginx),進(jìn)入文件夾,打開命令行輸入如下命令:
wget http://nginx.org/download/nginx-1.16.1.tar.gz
查看當(dāng)前目錄就會(huì)看到 nginx-1.16.1.tar.gz ,這就說明壓縮包已經(jīng)下載完成。

第三步:安裝
繼續(xù)輸入命令tar -zxvf nginx-1.16.1.tar.gz(更多命令可以查看Linux下的解壓命令
)進(jìn)行解壓,解壓完成之后查看這個(gè)目錄就會(huì)出現(xiàn)一個(gè) nginx-1.16.1 文件夾,這就說明解壓成功了。
然后進(jìn)入 nginx-1.16.1 文件夾,依次輸入如下命令:
注意:在執(zhí)行下面命令時(shí)可能遇到權(quán)限問題,這時(shí)需要在命令前面加上sudo。
# ./configure的作用是檢測(cè)系統(tǒng)配置,生成makefile文件,以便你可以用 make 和 make install 來編譯和安裝程序。
# 執(zhí)行./configure的話要到你解壓好的目錄中去(cd 程序文件夾名稱)。
./configure
# make 編譯 (make的過程是把各種語言寫的源碼文件,變成可執(zhí)行文件和各種庫文件)
make
# make install 安裝 (make install是把這些編譯出來的可執(zhí)行文件和庫文件復(fù)制到合適的地方)
make install

1、安裝 PCRE 庫
在運(yùn)行
./configure時(shí)會(huì)看到如下報(bào)錯(cuò):
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
意思是:./configure:錯(cuò)誤:HTTP重寫模塊需要 PCRE 庫。
這個(gè)時(shí)候就說明服務(wù)器中缺少 pcre-deve 庫,需要運(yùn)行yum -y install pcre-devel命令去安裝 PCRE 源碼包。
或者運(yùn)行下面命令手動(dòng)安裝 PCRE 源碼包:
cd /home/admin/ # 回到根目錄
mkdir pcre # 創(chuàng)建 pcre 文件夾
cd pcre # 進(jìn)入 pcre 文件夾
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz # 下載源碼包
tar -zxvf pcre-8.39.tar.gz # 解壓源碼包
cd pcre-8.39 # 進(jìn)入解壓的源碼包
./configure # 檢測(cè)系統(tǒng)配置
make # 編譯
make install # 安裝
安裝完畢之后可以運(yùn)行rpm -qa pcre pcre-devel命令來檢查依賴,看 pcre-devel 包是否安裝成功。
2、安裝 zlib-devel 庫
在運(yùn)行./configure時(shí)會(huì)看到如下報(bào)錯(cuò):
./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.
意思是:./configure:錯(cuò)誤:HTTP gzip模塊需要zlib庫。
這個(gè)時(shí)候就說明服務(wù)器中缺少 zlib-devel 庫,需要運(yùn)行yum -y install zlib-devel命令去安裝 zlib-devel 源碼包。
或者運(yùn)行下面命令手動(dòng)安裝 zlib 源碼包:
cd /home/admin/ # 回到根目錄
mkdir zlib # 創(chuàng)建 zlib 文件夾
cd zlib # 進(jìn)入 zlib 文件夾
wget http://zlib.net/zlib-1.2.11.tar.gz # 下載源碼包
tar -zxvf zlib-1.2.11.tar.gz # 解壓源碼包
cd zlib-1.2.11 # 進(jìn)入解壓的源碼包
./configure # 檢測(cè)系統(tǒng)配置
make # 編譯
make install # 安裝
安裝完畢之后可以運(yùn)行rpm -qa zlib-devel命令來檢查依賴,看 zlib-devel 包是否安裝成功。
3、安裝 openssl-devel 庫(某些vps默認(rèn)沒裝ssl)
在運(yùn)行./configure時(shí)會(huì)看到如下報(bào)錯(cuò):
./configure: error: the HTTP cache module requires md5 functions
from OpenSSL library. You can either disable the module by using
--without-http-cache option, or install the OpenSSL library into the system,
or build the OpenSSL library statically from the source with nginx by using
--with-http_ssl_module --with-openssl=<path> options.
意思是:./configure:錯(cuò)誤:HTTP緩存模塊需要md5函數(shù)從OpenSSL庫。
這個(gè)時(shí)候就說明服務(wù)器中缺少 openssl-devel 庫,需要運(yùn)行yum -y install openssl openssl-devel命令去安裝 openssl-devel 源碼包。
或者運(yùn)行下面命令手動(dòng)安裝 openssl 源碼包:
cd /home/admin/ # 回到根目錄
mkdir openssl # 創(chuàng)建 openssl 文件夾
cd openssl # 進(jìn)入 openssl 文件夾
wget https://www.openssl.org/source/openssl-1.0.1t.tar.gz # 下載源碼包
tar -zxvf openssl-1.0.1t.tar.gz # 解壓源碼包
安裝完畢之后可以運(yùn)行rpm -qa openssl openssl-devel命令來檢查依賴,看 zlib-devel 包是否安裝成功。
第四步: 啟動(dòng)
如果安裝時(shí)沒有報(bào)錯(cuò),那么就說明已經(jīng)安裝成功了,接下來運(yùn)行cd /usr/local/nginx/sbin命令,進(jìn)入 /usr/local/nginx/sbin 目錄,在此目錄中會(huì)有一個(gè)名為 nginx 的文件,接著運(yùn)行./nginx -s reload(重啟命令)啟動(dòng)Nginx。
這個(gè)時(shí)候Nginx可能會(huì)報(bào)錯(cuò):
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
意思就是:/usr/local/nginx/logs/ 目錄下沒有找到nginx.pid文件。
解決方法:命令行輸入啟動(dòng)命令/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf(如果出現(xiàn)權(quán)限問題就在開頭加 sudo)
如果啟動(dòng)時(shí)Nginx報(bào)錯(cuò),那么解決了報(bào)錯(cuò)信息之后,還需要重新啟動(dòng)一下Nginx。

當(dāng)啟動(dòng)Nginx之后沒有報(bào)錯(cuò),并且在瀏覽器輸入服務(wù)器域名或IP出現(xiàn)如下頁面,那么就說明Nginx啟動(dòng)成功了。

第五步:將前端 build 好的包上傳到服務(wù)器
將前端 build 好的包放到一個(gè)文件夾內(nèi)(例如:dataops),重新打開一個(gè)終端運(yùn)行如下命令:
scp -r 上傳文件的目錄 用戶名@IP:/上傳到服務(wù)器的目錄
其他命令請(qǐng)點(diǎn)擊Linux常用命令查看

在服務(wù)器的目錄下可以看到上傳的項(xiàng)目包

第六步:配置nginx服務(wù)器
運(yùn)行cd /usr/local/nginx/conf進(jìn)入安裝的Nginx目錄,/usr/local/nginx/html 目錄下應(yīng)該放置我們前端 build好的代碼,但是因?yàn)檫@個(gè)html目錄是只讀目錄,所以我一般都不會(huì)把項(xiàng)目放到html目錄下。/usr/local/nginx/conf目錄下有個(gè)非常重要的文件nginx.conf,用來配置nginx服務(wù)器。

因?yàn)檫@里的nginx.conf是只讀文件,不允許修改,所以輸入命令編輯時(shí)需要加 sudo 。
運(yùn)行
sudo vim nginx.conf命令,打開nginx.conf文件,直接找到配置server 的地方,取消掉暫時(shí)用不到的配置,下面便是我的配置:
修改配置文件時(shí)用到的快捷鍵:
i:開始編輯
esc:編輯完退出編輯
:wq:保存編輯
server {
# 啟動(dòng)后的端口
listen 8080;
# 啟動(dòng)時(shí)的地址 可以改為你服務(wù)器的IP
server_name localhost;
# 啟動(dòng)后,地址欄輸入: localhost:8080, 默認(rèn)會(huì)在/home/admin/dataops文件夾下找 index.html文件
location / {
# 項(xiàng)目build包存放的文件夾
root /home/admin/dataops;
# 項(xiàng)目build包存放的文件夾下的主入口文件
index index.html;
# 當(dāng)用戶請(qǐng)求 http://localhost:8080/home 時(shí),這里的 $uri 就是 /home。
# try_files 會(huì)到硬盤里嘗試找這個(gè)文件。如果存在名為 /$root/home(其中 $root 是項(xiàng)目代碼安裝目錄)的文件,就直接把這個(gè)文件的內(nèi)容發(fā)送給用戶。
# 如果沒有找到這個(gè)文件,然后就看 $uri/,增加了一個(gè) /,也就是看有沒有名為 /$root/home/ 的目錄。
# 如果還找不到,就會(huì) fall back 到 try_files 的最后一個(gè)選項(xiàng) /index.html,發(fā)起一個(gè)內(nèi)部 “子請(qǐng)求”,也就是相當(dāng)于 nginx 發(fā)起一個(gè) HTTP 請(qǐng)求到 http://localhost:8080/index.html。
# try_files方法讓 Ngxin 嘗試訪問后面得 $uri 鏈接,并進(jìn)根據(jù) /index.html 配置進(jìn)行內(nèi)部重定向。
# 當(dāng)然try_files也可以以錯(cuò)誤代碼賦值,如try_files /index.php = 404 @apache,則表示當(dāng)嘗試訪問得文件返回404時(shí),根據(jù)@apache配置項(xiàng)進(jìn)行重定向。
try_files $uri $uri/ /index.html;
}
# 配置代理。由于項(xiàng)目是在本地起動(dòng)的,而我們的request需要請(qǐng)求其他ip地址。如果你的request鏈接為localhost:8080/abc/login?name=12345,那么下面配的就是location /abc
location /api/ {
proxy_pass http://192.168.0.0:8080/;
}
# 404頁面配置,頁面同樣在html文件夾中
error_page 404 /404.html;
location = /404.html {
root html;
}
# 其他錯(cuò)誤碼頁面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# 一把前端不管用vue,還是react等框架,默認(rèn)都是單頁面的,如果你的項(xiàng)目是多頁面的,則需要用到下面的配置。
# 因?yàn)榇藭r(shí)你的瀏覽器的url不是localhost:8080/#/login,而是 localhost:8080/a.html/#/login
# 所以我們需要將路徑中a.html指向具體的html文件夾中的文件,因?yàn)槟J(rèn)是index.html
location /a.html {
alias html;
index a.html;
}
location /b.html{
alias html;
index b.html;
}
}
注意事項(xiàng)
1、在修改nginx.conf文件時(shí),每行的末尾必須帶有分號(hào)
";",否則會(huì)報(bào)錯(cuò)。
當(dāng)修改好配置保存之后,需要重新回到 /usr/local/nginx/sbin 目錄下,重新啟動(dòng)Nginx,然后在瀏覽器下就可以看到你的項(xiàng)目頁面了。
二、nginx啟動(dòng)、重啟、關(guān)閉
啟動(dòng)
啟動(dòng)代碼格式:nginx安裝目錄地址 -c nginx配置文件地址
例如:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
重啟
1、驗(yàn)證nginx配置文件是否正確
方法一:進(jìn)入nginx安裝目錄 /usr/local/nginx/sbin/ 下,輸入命令./nginx -t看到如下顯示
nginx.conf syntax is ok
nginx.conf test is successful
說明配置文件正確!

方法二:在啟動(dòng)命令-c前加-t

2、重啟Nginx服務(wù)
方法一:進(jìn)入nginx可執(zhí)行目錄 /usr/local/nginx/sbin/ 下,輸入命令
./nginx -s reload即可
方法二:在 /usr/local/nginx/sbin/ 目錄下,輸入
ps -ef|grep nginx命令,查找當(dāng)前nginx進(jìn)程號(hào),然后輸入命令kill -HUP 進(jìn)程號(hào)實(shí)現(xiàn)重啟nginx服務(wù)
停止
nginx的停止有三種方式:
- 普通停止
1、查看進(jìn)程號(hào)ps -ef|grep nginx
image.png
2、殺死進(jìn)程kill -QUIT 31927
image.png - 快速停止
1、查看進(jìn)程號(hào)ps -ef|grep nginx
2、殺死進(jìn)程kill -TERM 9207或kill -INT 9388
image.png - 強(qiáng)制停止
pkill -9 nginx
image.png
三、訪問頁面遇到的問題及解決辦法
1、訪問頁面出現(xiàn)500錯(cuò)誤信息

這個(gè)時(shí)候就要在服務(wù)器 /usr/local/nginx/logs 目錄下,打開 error.log 文件查看錯(cuò)誤信息。
我的錯(cuò)誤信息如下:
2019/11/22 00:58:38 [crit] 32603#0: *3 stat() "/root/photoAlbum/reactproject/index.html" failed (13: Permission denied), client: 115.193.160.204, server: localhost, request: "GET / HTTP/1.1", host: "xxx.xxx.xxx.xxx"
意思就是:2019/11/22“root / photoAlbum / reactproject / index?!笆?13:拒絕許可)
問題一:可能是由于啟動(dòng)用戶和nginx工作用戶不一致所致
運(yùn)行ps -ef|grep nginx查看進(jìn)程,發(fā)現(xiàn)啟動(dòng)用戶是 root ,nginx工作用戶是 nobody。

解決方法是:
進(jìn)入 /usr/local/nginx/conf 目錄,編輯 nginx.conf 文件,找到 user (默認(rèn)是 nobody ),然后打開注釋將 nobody 改為我自己的用戶 root。重新進(jìn)入 /usr/local/nginx/sbin 目錄,重啟 nginx,查看端口,發(fā)現(xiàn) nginx 工作用戶變成了root。現(xiàn)在這個(gè)問題就解決了,如果你只是這個(gè)問題的原因,那么重新刷頁面就可以看到自己的項(xiàng)目了。




