Nginx是一款高性能的代理、轉發伺服器,目前已經支援4層和7層代理。
OpenResty則是基于Nginx增加Lua的功能,可以友善的實作緩存功能。
1、Nginx不同安裝形式分析
安裝形式 | 安裝難度 | 優點 | 缺點 | 推薦排名 | 官網 |
---|---|---|---|---|---|
OpenResty | Centos一鍵安裝 | 自帶Https、Lua擴充 | 不帶開機啟動 | 1 | OpenResty Download Centos |
OpenResty | Windows一鍵安裝 | 開機重新開機有難度 | 不帶開機啟動 | 2 | OpenResty Windows |
Nginx | Centos yum一鍵安裝 | 簡單,自帶https,開機啟動 | 定制麻煩 | 3 | nginx: download Stable |
Nginx | Centos 手工編譯 | 麻煩,慢;編譯時候可以自己把子產品如:https編譯進去 | 定制友善 | 4 | |
Nginx | Centos 手工編譯(簡化版本) | 簡單,慢;編譯時候可以自己把子產品如:https編譯進去 | 定制友善 | 5 | |
Nginx | Windows版本 | 簡單,直接解壓;開機自動動麻煩 | 6 |
2.Nginx各種形式安裝
2.0 nginx前置使用者建立
我們安裝nginx、tomcat等,建議使用自己賬号建立,不推薦使用root使用者;
尤其是tomcat
- 新增tomcat使用者
useradd tomcat
- 将tomcat目錄owner改為tomcat
chown -R tomcat:tomcat /usr/local/tomcat9 #把已有的目錄變成tomcat的權限
2.1 OpenResty Centos7 yum安裝
直接檢視官網最新的安裝指令。http://openresty.org/cn/linux-packages.html
搜尋Centos
你可以在你的 CentOS 系統中添加
openresty
倉庫,這樣就可以便于未來安裝或更新我們的軟體包
(通過
yum check-update
指令)。
運作下面的指令就可以添加我們的倉庫(對于 CentOS 8 或以上版本,應将下面的
yum
都替換成
dnf
):
2.1.1 add the yum repo
# add the yum repo:
wget https://openresty.org/package/centos/openresty.repo
sudo mv openresty.repo /etc/yum.repos.d/
# update the yum index:
sudo yum check-update
2.1.2 yum install
然後就可以像下面這樣安裝軟體包,比如
openresty
:
sudo yum install -y openresty
如果你想安裝指令行工具
resty
,那麼可以像下面這樣安裝
openresty-resty
包:
sudo yum install -y openresty-resty
指令行工具
opm
在
openresty-opm
包裡,而
restydoc
工具在
openresty-doc
包裡頭。
列出所有
openresty
倉庫裡頭的軟體包:
2.1.3 檢視openresty的軟體包
sudo yum --disablerepo="*" --enablerepo="openresty" list available
2.1.4 設定開機自動啟動
指令1編輯啟動檔案
vim /etc/rc.d/rc.local
,敲入下面腳本
#編輯開機啟動檔案,加入對應的指令
nohup bash /usr/local/tomcat9/bin/startup.sh &>/dev//null & #tomcat開機啟動
nohup ntpdate stdtime.gov.hk #開機自動校準時間,首先自己要在指令行執行一次,試一下。看是否OK
/usr/local/redis-5.0.8/src/redis-server /usr/local/redis-5.0.8/redis.conf #redis 開機
/usr/local/openresty/nginx/sbin/nginx &>/dev//null & #啟動openresty
必須記得給rc.local權限
chmod +x /etc/rc.d/rc.local
檢視rc-local:
systemctl status rc-local
、
systemctl restart rc-local
2.1.5 更細指令
openresty -t #valid
openresty -s reload #reload
2.2 Windows 安裝 nginx/OpenResty
下載下傳直接解壓就可以使用,也不需要安裝其他插件。
主要點:預設不帶開機啟動,需要自己進行配置開機啟動。
參考,親測可以-推薦 使用windows 任務計劃 ui界面操作:Nginx伺服器 & windows 設定自動(開機 or 定時)啟動
參考,親測可以執行-有點麻煩:window 怎麼樣讓nginx開機自啟動
2.3 Centos7自動使用yum安裝
參考:CentOS7中使用yum安裝Nginx的方法,直接一鍵安裝nginx.
安裝完畢,通過
where nginx
或者
find -name nginx
檢視配置conf檔案目錄、日志目錄等
2.4 Centos7自己編譯安裝
參考:Centos7安裝Nginx實戰
參考2: CentOS7安裝Nginx及配置
2.4.1 下載下傳nginx for linux軟體包
到Nginx官網下載下傳最新的nginx包,zip 或者 tar.gz 都可以.
wget --no-check-certificate https://nginx.org/download/nginx-1.23.1.tar.gz
#https://nginx.org/download/nginx-1.20.2.tar.gz
#wget https://nginx.org/download/nginx-1.18.0.tar.gz
#wget https://nginx.org/download/nginx-1.16.1.tar.gz
#wget https://nginx.org/download/nginx-1.14.2.tar.gz
## 下載下傳要使用:https,不要使用 http
#老版本,之前自己用的最多的,目前不用了;
#目前更新使用用1.16 (環普東r 項目使用);
#最新更新使用1.18 (yulin B環境) 有漏洞
#最新更新使用1.20 (baoj)
#最新更新使用1.22 (jiankang xi an)
然後解壓,
tar -xvzf nginx-1.23.1.tar.gz
或者 `unzip nginx-1.23.1.zip
2.4.2 前置1 C++編譯環境
前置安裝1:C++
ububtu平台編譯環境可以使用以下指令
apt-get install build-essential
apt-get install libtool
centos平台編譯環境使用如下指令
安裝make:
yum -y install gcc automake autoconf libtool make
安裝g++:
yum install gcc gcc-c++
2.4.2 前置2 PCRE庫
$ cd /usr/local/
$ wget --no-check-certificate http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz
$ tar -zxvf pcre-8.33.tar.gz
$ cd pcre-8.33
$ ./configure
$ make && make install
#如報錯:configure: error: You need a C++ compiler for C++ support
#解決:yum install -y gcc gcc-c++
2.4.3 前置3: openssl
$ cd /usr/local/
$ #wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz --no-check-certificate ### 不驗證證書, nginx1.18和之前用的這個版本。
$ wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz --no-check-certificate ### 不驗證證書, nginx.1.20 需要最新的這個班;
$ tar -zxvf openssl-1.1.1k.tar.gz
$ cd openssl-1.1.1k
$ ./config 【這個一步完成一定看一下是否有報錯】
$ make && make install 【這一步很慢的,慢慢等】
#按照完成我們檢視一下版本:openssl version ,如果報錯,我們繼續下面
#檢測指令是否有軟連接配接:dd $(which /usr/local/nginx/sbin/nginx)
#我們建立軟連接配接:
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
ln -s /lib64/libpcre.so.0.0.1 /lib64/libpcre.so.1
#執行完,我們再次檢視版本
openssl version ## OpenSSL 1.1.1k 25 Mar 2021
2.4.4 前置4 zlib庫安裝
#安裝zlib庫存
$ cd /usr/local/
$ wget https://zlib.net/zlib-1.2.11.tar.gz
$ tar -zxvf zlib-1.2.11.tar.gz
$ ./configure
$ make && make install
2.4.5 編譯nginx
cd /usr/local/nginx/nginx-1.20.2/
進入目錄
–prefix: 是編譯後nginx放置的根目錄,自己選擇
./configure \
--user=nobody \
--group=nobody \
--prefix=/usr/local/nginx/ \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_sub_module \
--with-openssl=/usr/local/openssl-1.1.1k \
--with-http_ssl_module \
--with-stream \
--with-mail \
--with-mail_ssl_module
###這裡編譯環境總是找不到openssl,這裡手工指定一下位置
### 後面的參數都是, 可以删除 或者 添加的
(--with-http-ssl-module 這個不加後面在nginx.conf配置ssl:on後,啟動會報,是為了支援https,
不添加報錯:nginx: [emerg] unknown directive "ssl" in /opt/nginx/conf/nginx.conf 異常 )
(--with-stream是為了支援4層基于端口的代理; 平時用都是7層的。可選)
(--with-mail #該選項用于啟用mail子產品,該子產品預設沒有被激活。可選)
(--with-mail_ssl_module \ #為了代理任何一種類型的使用SSL/TLS的mail,激活該子產品。可選)
【這裡是指定編譯的時候把相關的子產品安裝到nginx裡面。】
編譯參數說明: Nginx:編譯安裝/動态添加子產品 https://www.cnblogs.com/Dy1an/p/11227796.html
【編譯這一步必須不能報錯,如果報錯,檢查完成】
make & make install
【這步完成會從新生成一個目錄/usr/local/nginx】 make挺慢的,一般make指令最後會卡頓,提示:#這裡經常出現這樣的提示 make[1]: 離開目錄“/usr/local/nginx/nginx-1.20/nginx-1.20.2” #不用理睬 就可以
make install 最後我們再次執行一下這個指令,就OK了
--------------------------------
--------------------------------
安裝完成, 會重新産生一個目錄 /usr/local/nginx,并生成 sbin、conf等目錄。
裡面就是 nginx可執行檔案; 以前的 /usr/local/nginx-1.16.1可以删除了
2.4.6 開機啟動配置
手工安裝就是麻煩,還得自己設定開機啟動配置。
開機啟動腳本方式1: centos7.x設定nginx開機自啟動
開啟啟動腳本方式2: CentOS下設定nginx開機自動啟動和chkconfig管理
開啟啟動腳本方式3:同openResty開機自動,
rc.local
寫入啟動指令
原來
systemctl status nginx.service
和
service nginx.service status
這兩種指令是等價的
在這三種都已經使用過
2.5 Centos7自己編譯安裝 (簡化版本)
liang哥提供
2.5.1 yum 一鍵安裝nginx 所有依賴
yum -y install make gcc gcc-c++ zlib zlib-devel pcre pcre-devel openssl openssl-devel
2.5.2 編譯安裝nginx
-
解壓Nginx程式包
到Nginx官網下載下傳最新的nginx包,zip 或者 tar.gz 都可以.
放到:
/usr/local/nginx/
wget --no-check-certificate https://nginx.org/download/nginx-1.22.0.tar.gz
#wget --no-check-certificate https://nginx.org/download/nginx-1.20.2.tar.gz
#wget https://nginx.org/download/nginx-1.18.0.tar.gz
#wget https://nginx.org/download/nginx-1.16.1.tar.gz
#wget https://nginx.org/download/nginx-1.14.2.tar.gz
## 下載下傳要使用:https,不要使用 http
#老版本,之前自己用的最多的,目前不用了;
#目前更新使用用1.16 (環普東r 項目使用);
#最新更新使用1.18 (yulin B環境)
#最新更新使用1.20 (baoj)
然後解壓,
tar -xvzf nginx-1.22.0.tar.gz
或者
unzip nginx-1.22.0.tar.gz
- 配置
# 預設安裝在:/usr/local/nginx
./configure --with-http_ssl_module --with-http_stub_status_module
- 編譯并安裝
- 将原先的配置檔案和應用程式拖動過去
2.6 nginx完全解除安裝删除
參考:nginx完全解除安裝删除
3.Nginx進階認知
3.1 NGINX 啟動
#linux常用指令
#1: 啟動
./nginx #适合手工安裝;如果不指定-c,nginx在啟動時預設加載conf/nginx.conf檔案,此檔案的位址也可以在編譯安裝nginx時指定./configure的參數(--conf-path= 指向配置檔案(nginx.conf))
#或者
./nginx -c /usr/local/nginx/conf/nginx.conf #适合yum安裝
#2: 驗證配置檔案是否正确
nginx -t
#3: 重置加載配置檔案
nginx -s load
#4: 檢視是否啟動成功
ps -ef | grep nginx #有master和worker兩個程序證明啟動成功
#5: 檢視nginx 版本 和 安裝的子產品
nginx -v #隻檢視版本
nginx -V #檢視版本,和編輯的子產品有哪些
3.2 NGINX linux 停止
- 暴利kill(不推薦使用)
kill -9 processId
- 快速停止
此方式相當于先查出nginx程序id再使用kill指令強制殺掉程序cd /usr/local/nginx/sbin && ./nginx -s stop
- 完整停止(建議使用)
此方式停止步驟是待nginx程序處理任務完畢進行停止,更簡單:cd /usr/local/nginx/sbin && ./nginx -s quit
pkill -9 nginx
3.2 NGINX windows 停止
1: windows 殺程序
windows殺nginx程序:
taskkill /fi "imagename eq nginx.EXE" /f
windowsnginx啟動:
nginx.exe
windows重新加載配置:
nginx.exe -s reload
windows驗證配置:
nginx.exe -t
2:如何檢視日誌
windows:
Get-Content -wait "D:\server\tomcat8.5.8081\logs\hiber\hiber_business.log"
linux:
tail -f xx.log
3.3 常見報錯
-
./nginx 啟動報錯 [emerg] open() “/var/run/nginx/nginx.pid” failed (2: No such file or directory)
需要檢視下是不是在/var/run檔案夾下不存在nginx檔案夾,不存在則建立
-
nginx在reload時候報錯invalid PID number的解決方法
參考:nginx在reload時候報錯invalid PID number的解決方法
3.4 負載均衡政策
Nginx負載均衡權重,ip_hash、
nginx已經安裝好了,在安裝新的插件 nginx負載均衡fair子產品安裝和配置
3.5 nginx認知
nginx簡介:nginx主要做7層的應用層的反向代理,一般基于url 進行代理。
4層的反向代理,比如LVS或者haproxy, 當然最新版的nginx也慢慢支援4層基于端口的映射了。
nginx反向代理:平時我們用nginx都是反向代理,反向代理是代理的server端,比如server有多台局域 網 的伺服器。
nginx正向代理:正向代理代理的是client端,
eg1 伺服器在内網,需要内網要通過163郵箱伺服器進行發 送郵箱;eg2: 科學的上網
3.6 https 證書
參考:Tomcat 或者 Nginx 配置 Https ~ 域名 ssl證書
3.7 nginx 增加 4層代理
參考:nginx 4層代理配置
3.8 nginx.conf 配置檔案
配置檔案1: [QCURE.nginx.conf ]github、gitee)
配置檔案2:[Bgyiot nginx.config ]github、gitee
4 nginx 常見錯誤代碼
- 上傳檔案過大504
- 請求響應太慢導緻504
- 後端代理服務挂掉 處理不過來,導緻502
5 nginx增加lua插件/更新版本
針對已經安裝的nginx,增加:lua插件
參考:nginx 中添加 lua 子產品,支援lua腳本以及遇到的坑
nginx | openresty-luajit2 | ngx_devel_kit | lua-nginx-module |
---|---|---|---|
nginx 1.22 | openresty/luajit2 | v0.3.1 | openresty/lua-nginx-module |
5.1 下載下傳安裝openresty-luajit2
#1、下載下傳luajit2
# Github: https://github.com/openresty/luajit2/archive/refs/tags/v2.1-20220915.tar.gz
# 官網太慢,這裡使用:代理位址,根據情況後期換成其他代理位址
cd /usr/local && wget https://download.yzuu.cf/openresty/luajit2/archive/refs/tags/v2.1-20220915.tar.gz -O luajit2-v2.1-20220915.tar.gz
# 2、解壓檔案,進入檔案夾
tar xzvf luajit2*.tar.gz && cd luajit2*
# 3、安裝檔案 (大概60s),檔案按照到了 /usr/local/luajit 目錄
make install PREFIX=/usr/local/luajit
#4、添加環境變量!
export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.1
# 需要添加ln,link連結
# 否則在 ./nginx -t的時候報錯:error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
## 主要:ln 源檔案 目标文連結,源檔案必須檔案,不能是連結位址
cd /usr/local/luajit/lib/ && ls -l && ln /usr/local/luajit/lib/libluajit-5.1.so.2.1.0 /lib64/libluajit-5.1.so.2
5.2 下載下傳解壓ngx_devel_kit
# 1、下載下傳檔案
# 原始位址:https://github.com/simpl/ngx_devel_kit/archive/v0.3.1.tar.gz
# 原始github,太慢可通過代理位址下載下傳
cd /usr/local/ && wget https://download.yzuu.cf/simpl/ngx_devel_kit/archive/v0.3.1.tar.gz -O ngx_devel_kit-v0.3.1.tar.gz
# 2、解壓檔案,進入檔案夾
tar -xzvf ngx_devel_kit-*.tar.gz && cd ngx_devel_kit-*
5.3 下載下傳解壓lua-nginx-module【不要輕易更新版本】
!!!切記,切記,這裡暫時不要更新新的版本,會有問題。
# 1、下載下傳解壓檔案
# 原始Github位址:https://github.com/openresty/lua-nginx-module/archive/refs/tags/v0.10.22.tar.gz
# 原始位址太慢,這裡使用代理位址
cd /usr/local/ && wget https://download.yzuu.cf/openresty/lua-nginx-module/archive/refs/tags/v0.10.9rc7.tar.gz -O lua-nginx-module-v0.10.9rc7.tar.gz
# 2、解壓檔案
tar -xzvf lua-nginx-module-*.tar.gz
5.4 安裝lua-devel
yum install lua-devel -y
5.5 對nginx重新進行一次編譯安裝
#1、對已經安裝的nginx,對配置conf檔案夾、conf檔案夾進行備份
cd /usr/local/nginx/ && cp -rf conf/ conf_bak/ && cp -rf conf/ conf_bak/
#2、進入之前的nginx源檔案解壓目錄
cd /usr/local && wget https://nginx.org/download/nginx-1.22.0.tar.gz && tar -zxvf nginx-1.22.0.tar.gz && cd /usr/local/nginx-1.22.0
#3、進行源碼檔案目錄進行 configure,之前的安裝的插件一定要包含在配置清單中
## 執行完畢,仔細檢視有沒有報錯,有報錯必須解決,否則無法進行下一步,如:缺少xxx包
## 執行完畢,會有一個插件彙總Summery
./configure \
--prefix=/usr/local/nginx/ \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_sub_module \
--with-http_ssl_module \
--with-stream \
--with-pcre \
--add-module=/usr/local/lua-nginx-module-0.10.9rc7 \
--add-module=/usr/local/ngx_devel_kit-0.3.1
#4、進行make
make
#5. 進行make install
# 執行成功,發現多了:/usr/local/nginx/sbin/nginx.old,其他檔案并沒有丢失
# 并且發現安裝了,新版本,老版本照樣運作;
make install
5.6 驗證lua是否安裝成功
###在server子產品裡面,随便找個地方添加下面的代碼,并儲存
location /lua {
default_type 'text/plain';
content_by_lua 'ngx.say("hello, lua")';
}
# 必須殺掉nginx程序(這裡是在:已有nginx上面更新,必須要先殺掉nginx程序)
cd /usr/local/nginx/sbin && ps -ef | grep nginx && echo 'stop nginx (請觀察前後程序變化) ....' && ./nginx -s stop && ps -ef | grep nginx
## 殺死nginx程序,重新啟動
cd /usr/local/nginx/sbin/ && ./nginx -c /usr/local/nginx/conf/nginx.conf
# 重新加載配置檔案
cd /usr/local/nginx/sbin/ && ./nginx -t && ./nginx -s reload
# 測試lua腳本,正常會列印:hello,lua
curl http://localhost:80/lua/