nginx配置檔案編寫及日誌檔案相關操作
nginx配置檔案編寫及日誌檔案相關操作
目錄nginx主配置檔案擴充套件詳解
http server location擴充套件瞭解項
http{}層下允許有多個Server{}層,一個Server{}層下又允許有多個Location
http{}標籤主要用來解決使用者的請求與響應。
server{} 標籤主要用來響應具體的某一個網站。
location{}標籤主要用於匹配網站具體URL路徑
部署nginx網站
1.編寫nginx虛擬主機配置檔案
# 建立虛擬主機配置檔案,根據主配置檔案中include{}模組指定的虛擬主機配置檔案路徑建立
[root@web02 ~]$ vim /etc/nginx/conf.d/game.wj.com.conf
server{
# 監聽80埠
listen 80;
# 指定訪問的域名
server_name game.wj.com;
# 配置URL
location / {
# 站點目錄
root /code/h5_games;
# 指定主頁面
index index.html;
}
}
2.創建出對應的站點目錄
[root@web02 ~]$ mkdir /code
3.修改站點目錄許可權
[root@web02 ~]# chown nginx.nginx /code
4.部署程式碼
# 下載程式碼至當前目錄
wget http://test.driverzeng.com/Nginx_Code/h5_games.zip
# 移動程式碼檔案至/code
mv h5_games.zip /code/
5.解壓程式碼
unzip h5_games.zip [root@web02 /code]$ ll total 18856 drwxr-xr-x 6 root root 108 May 3 2019 h5_games -rw-r--r-- 1 root root 19304923 May 3 2019 h5_games.zip
6.重新載入nginx的配置檔案
[root@web02 /code]$ systemctl reload nginx
**7.本地域名解析 **
windows開啟:C:\Windows\System32\drivers\etc\hosts檔案
寫入:10.0.0.8 game.drz.com
8.開啟瀏覽器:http://game.drz.com
注意事項
1.nginx主配置檔案的內容是從上到下進行讀取的,企業中一般都用域名訪問,以避免埠衝突
2.nginx配置檔案的讀取順序是:主配置檔案--->虛擬主機配置檔案
在/etc/nginx/conf.d/下的虛擬主機配置檔案,會按從上至下的順序進行讀取
3.nginx配置檔案編寫時必須以分號(;)表示一行的結尾
Nginx虛擬主機
nginx配置虛擬主機的三種方式
1.基於IP方式
利用多塊網絡卡(多個IP)避免埠衝突
2.基於埠方式
沒有域名時,主站點配置檔案預設80,那麼其他虛擬主機配置檔案的監聽埠號就得更改,影響使用者體驗
3.基於域名方式
多個域名不會存在埠衝突
nginx日誌管理
日誌格式詳解
# 虛擬機器主配置檔案中的日誌格式設定
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
定義了我們日誌資訊的格式
# main:日誌的格式名稱
Nginx日誌格式中允許包含的內建變數
$remote_addr # 遠端的IP地址,上一層地址(很有可能是代理IP)
$remote_user # 記錄客戶端使用者名稱
$time_local # 記錄通用的本地時間
$time_iso8601 # 記錄ISO8601標準格式下的本地時間
$request # 記錄請求的方法以及請求的http協議
$status # 記錄請求狀態碼(用於定位錯誤資訊)
$body_bytes_sent # 請求主體位元組數,不包括響應頭的大小
$bytes_sent # 傳送給客戶端的總位元組數
$msec # 日誌寫入時間。單位為秒,精度是毫秒。
$http_referer # 記錄從哪個頁面連結訪問過來的
$http_user_agent # 記錄客戶端(瀏覽器)相關資訊
$http_x_forwarded_for #記錄客戶端IP地址
$request_length # 請求的長度(包括請求行, 請求頭和請求正文)。
$request_time # 請求花費的時間,單位為秒,精度毫秒
$http_x_forwarded_for #代理伺服器將使用者IP和代理IP一併傳遞(一個使用者IP+代理IP)
# 注:如果Nginx位於負載均衡器,nginx反向代理之後, web伺服器無法直接獲取到客戶端真實的IP地址。
# $remote_addr獲取的是反向代理的IP地址。 反向代理伺服器在轉發請求的http頭資訊中,
# 增加X-Forwarded-For資訊,用來記錄客戶端IP地址和客戶端請求的伺服器地址
tail -f /var/log/nginx/access.log
10.0.0.1 - - [17/Jul/2021:15:41:26 +0800] "GET /favicon.ico HTTP/1.1" 404 555
"http://10.0.0.8/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36" "-"
自定義日誌格式
# 定義日誌格式
log_format 日誌格式名稱
# 呼叫日誌格式到哪個路徑
access_log 日誌檔案列印存放路徑 呼叫的日誌格式
# 不列印日誌,沒有指定關閉日誌列印時會列印至預設的日誌路徑,再把主配置檔案的日誌列印關閉就不會再列印日誌
log_format off;
配置的日誌格式可以都放在主配置檔案中,但是呼叫日誌格式時,最好寫在相應的虛擬主機配置檔案中
寫日誌的列印路徑時,如果寫相對路徑,就是在/var/log/nginx這個路徑中
日誌切割
使用logrotate切割日誌
logrotate是一個系統自帶的日誌切割服務,但是需要yum安裝的才自帶,原始碼安裝需要自己配置日誌切割檔案
# 檢視被切割的日誌型別
[root@web02 ~]$ ll /etc/logrotate.d
total 24
-rw-r--r--. 1 root root 91 Apr 11 2018 bootlog
-rw-r--r-- 1 root root 194 Nov 16 2020 httpd
-rw-r--r-- 1 root root 351 May 25 21:30 nginx
-rw-r--r--. 1 root root 224 Oct 30 2018 syslog
-rw-r--r--. 1 root root 100 Oct 31 2018 wpa_supplicant
-rw-r--r--. 1 root root 103 Nov 5 2018 yum
[root@web02 ~]$ vim /etc/logrotate.d/nginx
# 需要切割的日誌(這裡是所有以.log結尾的日誌檔案)
/var/log/nginx/*.log {
# 每天切割
daily
# 忽略丟失日誌
missingok
# 日誌保留52天
rotate 52
# 日誌檔案進行壓縮
compress
# 延遲壓縮
delaycompress
# 注意空日誌,出現空日誌就不切割
notifempty
# 日誌檔案的許可權 屬主 屬組
create 640 nginx adm
# 共享的指令碼
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
# 重新載入nginx配置檔案:
kill -10 nginx服務的pid號
kill -USR1 `cat /var/run/nginx.pid`
fi endscript}
true命令:只是一個執行命令動作,不會有任何輸出
date -s命令:修改系統時間,date -s '指定的時間'
使用fpm打包
需要在沒有安裝nginx時進行操作
1.獲取fpm工具
[root@web01 ~]$ wget http://test.driverzeng.com/other/fpm-1.3.3.x86_64.tar.gz
2.安裝Ruby語言環境
[root@web01 ~]$ yum -y install ruby rubygems ruby-devel
3.解壓fpm工具
[root@web01 ~]$ tar xf fpm-1.3.3.x86_64.tar.gz
[root@web01 ~]$ ll
total 2576
-rw-r--r-- 1 root root 15360 Jun 27 2016 arr-pm-0.0.10.gem
-rw-r--r-- 1 root root 88064 Jun 27 2016 backports-3.6.8.gem
-rw-r--r-- 1 root root 21504 Jun 27 2016 cabin-0.8.1.gem
-rw-r--r-- 1 root root 29184 Jun 27 2016 childprocess-0.5.9.gem
-rw-r--r-- 1 root root 24576 Jun 27 2016 clamp-0.6.5.gem
-rw-r--r-- 1 root root 881664 Jun 27 2016 ffi-1.9.10.gem
-rw-r--r-- 1 root root 114176 Jun 27 2016 fpm-1.3.3.gem
-rw-r--r-- 1 root root 1288103 Jul 14 2016 fpm-1.3.3.x86_64.tar.gz
-rw-r--r-- 1 root root 152064 Jun 27 2016 json-1.8.2.gem
4.檢視gem源
[root@web01 ~]$ gem source list
*** CURRENT SOURCES ***
# 國外網站,國外的源
https://rubygems.org/
5.追加阿里雲的gem源
[root@web01 ~]$ gem sources -a http://mirrors.aliyun.com/rubygems/
6.刪除國外源
[root@web01 ~]$ gem sources --remove https://rubygems.org/
7.安裝fpm工具
[root@web01 ~]$ gem install *.gem
PS:一次不行就再安裝一次
# 刪除fpm所有的gem包
[root@web01 ~]$ rm -rf ./*
8.儲存nginx的依賴包
# 指定下載存放至/tmp下
[root@web01 ~]$ yum install -y openssl-devel pcre-devel zlib-devel --downloadonly --downloaddir=/tmp
9.將下載到/tmp目錄下的依賴包一併壓縮打包
[root@web01 /tmp]$ cd /tmp/
[root@web01 /tmp]$ tar zcf nginx_rpm.tar.gz *.rpm
10.原始碼安裝nginx
11.編寫一個打包的指令碼檔案
vim rpm_nginx.sh
#!/bin/bash
groupadd www -g 666
useradd www -u 666 -g 666 -s /sbin/nologin -M
echo '
[Unit]
Description=nginx - high performance web server Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
ExecStart=/app/nginx/sbin/nginx
ExecReload=/app/nginx/sbin/nginx -s reload
ExecStop=/app/nginx/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target' > /usr/lib/systemd/system/nginx.service
ln -s /app/nginx-1.20.1 /app/nginx
12.執行打包命令進行打包
[root@web01 ~]$ fpm -s dir -t rpm -n nginx -v 1.20.1 -d 'pcre-devel,openssl-devel,zlib-devel' --post-install /root/rpm_nginx.sh -f /app/nginx-1.20.1
-s:指定打包的是目錄還是檔案
-t:打成什麼型別的包,這裡是rpm包
-n:指定打包後的名稱
-v:打包的版本
-d:指定依賴包有哪些
--post-install:在安裝之前需要執行的指令碼
可能需要的操作:
安裝rpmbuild命令
yum install -y rpmbuild-devel
打包完成後安裝nginx時,直接yum安裝打好的nginx的rpm包就可以