Nginx搭建與相關配置
阿新 • • 發佈:2021-08-13
目錄
一、Nginx簡介
1.1 概述
1.Nginx是一款高效能、輕量級Web服務軟體
2.穩定性高
3.系統資源消耗低
4.對HTTP併發連線的處理能力高,單臺物理伺服器可支援30000-50000個併發請求
1.2 Nginx與Apache的差異
Nginx | Apache |
---|---|
基於事件 | 基於流程 |
所有請求由一個執行緒處理 | 單個執行緒處理單個請求 |
避免子程序 | 基於子程序 |
在記憶體消耗和連線方面更好 | 一般 |
效能和可伸縮性不依賴於硬體 | 依賴於CPU和記憶體等硬體 |
支援熱部署 | 不支援熱部署 |
對於靜態檔案處理更具效率 | 一般 |
在反向代理場景更具優勢 | 一般 |
二、編譯安裝Nginx服務
2.1 將nginx軟體包傳到主機/opt目錄下
2.2、安裝依賴包
yum install -y pcre-devel zlib-devel gcc gcc-c++ make #Nginx的配置及執行需要pcre、zlib等軟體包的支援,因此需要安裝這些安裝的開發包,以便提供相應的庫和標頭檔案
2.3、新增模組編譯安裝
cd /opt
tar zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0/
./configure \
> --prefix=/usr/local/nginx \ #指定nginx的安裝路徑
> --user=nginx \ #指定使用者名稱
> --group=nginx \ #指定組名
> --with-http_stub_status_module #啟用 http_stub_status_module模組以便持狀態線計
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #讓系統識別nginx的操作命令
2.4、建立執行使用者、組
useradd -M -s /sbin/nologin nginx #Nginx服務程式預設以nobody身份執行,建議為其建立專門的使用者賬號,以便更準確地控制其訪問許可權
2.5、檢查、啟動、重啟、停止nginx服務
nginx -t #檢查配置檔案是否配置正確
nginx #啟動
停止
cat /usr/local/nginx/logs/nginx.pid #先檢視nginx的PID號
kill -3 <PID號>
kill -s QUIT <PID號>
killall -3 nginx
killall -s QUIT nginx
過載
kill -1 <PID號>
kill -s HUP <PID號>
killall -1 nginx
killall -s HUP nginx
日誌分割,重新開啟日誌檔案
kill -USR1 <PID號>
平滑升級
kill -USR2 <PID號>
新版本升級
tar -zxvf nginx-1.xx.xX. tar.gz
cd nginx-1.xx. xx
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
cp objs/nginx /usr/local/nginx/sbin/nginx
make upgrade #或者先 killall nginx ,再/usr/local/nginx/sbin/nginx
2.6、新增nginx系統服務
方法一使用shell指令碼
vim /etc/init.d/nginx #系統服務檔案下建立指令碼
#!/bin/bash
#chkconfig: 35 99 20 #指定35級別開機自啟動 第99個開啟 第20個關閉
#description:Nginx Server Control Script
COM="/usr/local/nginx/sbin/nginx" #指定命令路徑
PID="/usr/local/nginx/logs/nginx.pid" #指定pid檔案
case "$1" in #case語句編寫
start)
$COM
;;
stop)
kill -s QUIT $(cat $PID)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PID)
;;
*)
echo "Usage:$0 {start|stop|restart|reload}"
exit 1
esac
exit 0
chmod +x /etc/init.d/nginx
chkconfig --add nginx
systemctl daemon-reload #磁碟上的ngin服務更改,執行systemctl daemon-reload重新載入單元
systemctl start nginx
systemctl stop nginx
方法二:編寫nginx系統服務檔案
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP SMAINPID
ExecrStop=/bin/kill-s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/ system/nginx.service
systemctl daemon-reload
systemctl start nginx.service
systemctl enable nginx.service
注:
1.【Unit】∶服務的說明 Description∶ 描述服務 After∶依賴, 當依賴的服務啟動之後再啟動自定義的服務
2.【Service】:服務執行引數的設定
Type=forking是後臺執行的形式,使用此啟動型別應同時指定PIDFile=,以便systemd能夠跟蹤服務的主程序
ExecStart為服務的具體執行命令 ExecReload為重啟命令 ExecStop為停止命令
PrivateTmp=True表示給服務分配獨立的臨時空間 注意∶ 啟動、重啟、停止命令全部要求使用絕對路徑
【Install】:服務安裝的相關設定,可設定為多使用者
2.7、測試nginx
三、nginx服務的主配置檔案
vim /usr/local/nginx/conf/nginx.conf
3.1、全域性配置
user nobody #執行使用者,若編譯時未指定則預設為nobody
worker_processes 1 #工作程序數量,可配置成伺服器核心數 * 2,如果網站訪問量不大,一般設為1就夠用了
error_log logs/error.log #錯誤日誌檔案的位置
pid logs/nginx.pid #PID檔案的位置
3.2、I/O事件配置
events {
use epoll #使用epoll模型,2.6及以上版本的系統核心,建議使用epoll模型以提高效能
worker_connections 4096 #每個程序處理 4096個連線
}
如提高每個程序的連線數還需執行"ulimit -n 65535"命令臨時修改本地每個程序可以同時開啟的最大檔案數
在Linux平臺上, 在進行高併發TCP連線處理時, 最高的併發數量都要受到系統對使用者 單—一程序同時可開啟檔案數量的限制(這是因為系統為每個TCP連線都要建立一個socket控制代碼,每個socket控制代碼同時也是一個檔案控制代碼)
可使用ulimit -a命令檢視系統允許當前使用者程序開啟的檔案數限制
3.3、HTTP配置
http {
include mime.types; #副檔名與檔案型別對映表
default_type application/octet-stream; #預設檔案型別
日誌格式設定
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
#'$status $body_bytes_sent "$http_referer" '
#'"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main; #日誌格式設定
sendfile on; #支援檔案傳送(下載)
#tcp_nopush on; #此選項允許或禁止使用socket的TCP_CORK的選項(傳送資料包前先快取資料),此選項僅在使用sendfile的時候使用
#keepalive_timeout 0;
#keepalive_timeout 65; #連線保持超時時間,單位是秒
#gzip on; #gzip模組設定,設定是否開啟gzip壓縮輸出
server {
listen 80; #監聽地址及埠
server_name www.gxd.com; #站點域名,可以有多個,用空格隔開
charset utf-8; #網頁的預設字符集
access_log logs/host.access.log main;
location / { #根目錄配置
root html; #網站根目錄的位置/usr/local/nginx/html
index index.html index.htm; #預設首頁檔名
}
#error_page 404 /404.html;
#redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html; #內部錯誤的反饋頁面
location = /50x.html { #錯誤頁面配置
root html;
}
日誌格式設定∶
$remote_addr與$http x forwarded for用以記錄客戶端的ip地址;
$remote user∶ 用來記錄客戶端使用者名稱稱;
$time local∶ 用來記錄訪問時間與時區;$request∶用來記錄請求的url與http協議;
$status∶ 用來記錄請求狀態;成功是200,
$body bytes sent ∶ 記錄傳送給客戶端檔案主體內容大小;
$http referer∶ 用來記錄從哪個頁面連結訪問過來的;
$http user agent∶記錄客戶瀏覽器的相關資訊;
通常web伺服器放在反向代理的後面,這樣就不能獲取到客戶的IP地址了,通過Sremote_add拿到的IP地址是反向代理伺服器的iP地址。反向代理伺服器在轉發請求的http頭資訊中,可以增加x_forwarded_for資訊,用以記錄原有客戶端的IP地址和原來客戶端的請求的伺服器地址。
location常見配置指令, root、alias、proxy_ pass
root (根路徑配置)∶ 請求ww.123.com/test/1.jpg,會返回檔案/usr/local/nginx/html/test/1.jpg
alias (別名配置)∶請求www.123.com/test/1.jpg,會返回檔案/usr/local/nginx/html/1.jpg
proxy_pass (反向代理配置)∶
proxy_pass http://127.0.0.1:8080/; ------------- 會轉發請求到http∶//127.0.0.1∶8080/1.jpg
proxy_pass http://127.0.0.1:8080; --------------會轉發請求到http∶//127.0.0.1∶8080/test/1.jpg
四、訪問狀態統計配置
4.1、操作步驟
①檢查是否安裝STUB_STATUS模組
nginx -V
②修改nginx.conf配置檔案,指定訪問位置並新增stub_status配置
cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
server {
listen 80;
server_name www.gxd.com;
charset utf-8;
location / {
root html;
index index.html index.php;
}
##新增 stub_status 配置##
location /status { #訪問位置為/status
stub_status on; #開啟狀態統計功能
access_log off; #關閉此位置的日誌記錄
}
}
}
systemctl restart nginx.service #重啟服務
③瀏覽器驗證
http://192.168.80.12/status
1.Active connections ∶ 表示當前的活動連線數
2.server accepts handled requests∶表示已經處理的連線資訊,三個數字依次表示已處理的連線數、成功的TCP握手次數已處理的請求數
3.可curl -s http∶//192.168.80.12/status 結合 awk與if 語句進行效能監控
五、基於授權的訪問控制
5.1、生成使用者密碼認證檔案
yum -y install httpd-tools
htpasswd -c /usr/local/nginx/passwd.db gxd
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db
5.2、修改主配置檔案相應的目錄,新增認證配置
vim /usr/local/nginx/conf/nginx.conf
......
server {
location / {
......
##新增認證配置##
auth_basic "secret";
auth_basic_user_file /usr/local/ngin/passwd.db;
}
}
nginx -t #驗證配置
systemctl restart nginx #重啟服務
5.3、客戶機測試
六、基於客戶端訪問控制
6.1、配置要求
訪問控制規則如下:
deny IP/IP段:拒絕某個IP或IP段的客戶端訪問 #黑名單
allow IP/IP段:允許某個IP或IP段的客戶端訪問 #白名單
規則從上往下執行,如果匹配到則停止,不會再往下繼續匹配
vim /usr/local/nginx/conf/nginx.conf
......
server {
location / {
......
##新增控制規則##
deny 192.168.80.12; #拒絕訪問的客戶端 IP
allow all; #允許其它IP客戶端訪問
}
}
systemctl restart nginx
6.2、客戶機測試
七、構建Nginx虛擬web主機
7.1、 基於域名的虛擬主機
①為虛擬主機提供域名解析
第一種:部署DNS域名解析伺服器
第二種:臨時新增
echo "192.168.80.12 www.aaa.com www.bbb.com" >> /etc/hosts
②為虛擬主機準備網頁文件
mkdir -p /var/www/html/aaa
mkdir -p /var/www/html/bbb
echo "<h1>aaaaaaa</h1>" > /var/www/html/aaa/index.html
echo "<h1>bbbbbbb</h1>" > /var/www/html/bbb/index.html
③新增虛擬主機配置
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
server {
listen 80;
server_name www.aaa.com; #設定域名www.aaa.com
charset utf-8;
access_log logs/www.aaa.access.log;
location / {
root /var/www/html/aaa; #設定www.aaa.com 的工作目錄
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
server {
listen 80;
server_name www.bbb.com; #設定域名www.bbb.com
charset utf-8;
access_log logs/www.bbb.access.log;
location / {
root /var/www/html/bbb; #設定www.bbb.com 的工作目錄
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
④驗證配置並重啟服務
nginx -t
systemctl restart nginx
⑤客戶機測試
7.2、基於IP地址的虛擬主機
①新增一張虛擬網絡卡
ifconfig ens33:0 192.168.80.100/24 #這邊新增虛擬網絡卡
②修改配置檔案
步驟和前面類似
③驗證配置並重啟服務
nginx -t
systemctl restart nginx
④客戶機測試
7.3、基於埠的虛擬主機
①修改配置檔案
步驟一樣,只是改變埠號
②驗證配置並重啟服務
nginx -t
systemctl restart nginx