一.Nginx的安裝
1)準備安裝環境
yum install -y make gcc gcc-c++ pcre-devel pcre zlib zlib-devel openssl openssl-devel
- ?PERE
PCRE(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 兼容的正則表達式庫。
nginx的http模塊使用pcre來解析正則表達式,所以需要在linux上安裝pcre庫。
注:pcre-devel是使用pcre開發的一個二次開發庫。nginx也需要此庫。
- ?zlib
zlib庫提供了很多種壓縮和解壓縮的方式,nginx使用zlib對http包的內容進行gzip,所以需要在linux上安裝zlib庫。
- openssl
OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,
并提供豐富的應用程序供測試或其它目的使用。
nginx不僅支持http協議,還支持https(即在ssl協議上傳輸http),所以需要在linux安裝openssl庫。
2)下載安裝包
下載地址:nginx: download
Nginx官網提供了三個類型的版本
- Mainline version:是 Nginx 目前主力在做的版本,可以說是開發版
- Stable version:最新穩定版,生產環境上建議使用的版本
- Legacy versions:遺留的老版本的穩定版
3)上傳安裝包并解壓
tar xvf nginx-1.24.0.tar.gz -C /usr/local/
設置軟鏈接
ln -s /usr/local/nginx-1.24.0/ /usr/local/nginx
4)創建用戶和組
groupadd -r nginx
useradd nginx -u 666 -r -g nginx -c "nginx user"
-
groupadd -r nginx
: 這個命令用于創建一個名為“nginx”的用戶組,并將其添加到系統中。選項?-r
?表示創建系統組。 -
useradd nginx -u 666 -r -g nginx -c "nginx user"
: 這個命令用于創建一個名為“nginx”的用戶,并將其添加到組“nginx”中。選項?-u 666
?表示將用戶的UID設置為666。選項?-r
?表示創建系統賬戶。選項?-g nginx
?表示將用戶添加到組“nginx”中。選項?-c "nginx user"
?表示為用戶指定一個自定義的描述信息,這里是“nginx user”。
5)編譯安裝
./configure \
> --user=nginx --group=nginx \
> --prefix=/usr/local/nginx \
> --with-http_stub_status_module \
> --with-http_ssl_module
- ./confire 用于對將安裝的軟件進行配置,檢查當前的環境是否滿足安裝軟件( Nginx )的依賴關系 。
- ?--prefix 選項用于設置 Nginx 安裝目錄,默認值是 usr / local/ nginx ,因而也可以省略此選項或指定到其位置,
- --with-http_ssl_module 選項用于設置在 Nginx 中允許使用 http_ss modu 模塊的相關功能。
- 行尾的 '\'表示未結束需要換到下一行書寫。
- "--with-"選項用于添加模塊,Nginx中有很多模塊,需要安裝時只需要重新編譯在通過選項添加模塊即可
make && make install
????????"&&"符號根據前一個命令的返回值決定是否執行后一個命令,前一個成功執行就會執行后面這個命令,這樣可以減少手動操作,當然也可以一次執行命令。
6)啟動Nginx:
進入Nginx的目錄的sbin下
cd /usr/local/nginx/sbin/
./nginx
執行成功不會有任何信息返還,使用ps命令查看
ps aux | grep nginx
?7)停止Nginx:
1.立即停止服務:
./nginx -s stop
?注意:這種停止方法不管當前工作進程是否在處理工作,立即停止工作,使用這種需注意。
?2.從容停止服務:
./nginx -s quit
這種停止方法會在進程處理完后再停止服務
3.使用kill命令關閉進程
?通過ps命令獲取Nginx進程的PID,使用kill命令關閉進程或使用killall命令
kill nginx PID
killall nginx
注意:nginx啟動后會自動監聽80端口,如80端口被占用則會啟動失敗。
?netstat -tlnp查看端口占用
?Nginx 的主進程正在監聽?TCP 協議 80 端口 ,說明 Nginx目前已經啟動。另外,netstat 命令的四個選項:t、l、n、p分別表示查看tcp協議、查看監聽服務、不解析名稱以及顯示進程名和 PID。
8)添加服務腳本:
由于每次啟動nginx都需要到安裝目錄下啟動,十分麻煩所以添加服務腳本可以大大的減少這種操作。
在CentOS 7中,服務的systemctl腳本被存放在/usr/lib/systemd/目錄下。這個目錄下有system和user兩個子目錄,分別存放系統服務和用戶服務的相關腳本。
如果你想要開機就能運行的程序,即:不需要登錄即可運行的服務。最好將其作為系統服務來管理。對于系統服務,你可以將相關的腳本文件放置在/usr/lib/systemd/system目錄下。
每一個服務腳本一般包含三個部分:[Unit]、[Service]和[Install]。這些部分分別定義了服務的單位(Unit)、服務本身的配置(Service)以及服務的安裝相關設置(Install)。
- [Unit]部分包含關于服務的元數據,例如服務的描述、依賴關系等信息。
- [Service]部分定義了服務的具體配置,包括服務的運行命令、工作目錄、環境變量等。
- [Install]部分定義了服務的安裝設置,例如服務的啟動級別、所屬用戶等。
腳本如下:
[root@localhost sbin]# cat /usr/lib/systemd/system/nginx.service
[Unit]
description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
?注意:添加完畢后需運行"systemctl daemon-reload "
"systemctl daemon-reload?"是用于重新加載systemd的配置文件和單位文件的命令
[Unit]:服務的說明
Description:描述服務
After:描述服務類別
?
[Service]服務運行參數的設置
Type=forking是后臺運行的形式
ExecStart為服務的具體運行命令
ExecReload為重啟命令
ExecStop為停止命令
PrivateTmp=True表示給服務分配獨立的臨時空間
注意:啟動、重啟、停止命令全部要求使用絕對路徑
?
[Install]服務安裝的相關設置,可設置為多用戶
報錯:
[root@localhost sbin]# ./nginx
nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)
2023/08/15 19:23:23 [emerg] 22354#0: open() "/usr/local/nginx/logs/access.log" failed (2: No such file or directory)?
?原因分析:Nginx目錄下無logs文件
解決辦法:創建logs文件
#創建logs目錄
mkdir logs
#賦予權限
chmod 700 logs/
驗證:
/usr/local/nginx/sbin/nginx -t
正常情況會輸出一下信息:?
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
二.nginx的負載均衡搭建
?1)準備服務器
準備三臺虛擬機,一臺安裝了nginx,兩臺web服務器
2)修改配置文件
引入文件
?編寫配置文件
more mytest.conf upstream backend {server 192.168.136.135:80 weight=1;server 192.168.136.134:80 weight=1;
}server {listen 80;server_name www.myname.com;location / {proxy_pass http://backend;}}
[root@localhost conf]#