1. 程式人生 > 其它 >nginx配置檔案編寫及日誌檔案相關操作

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包就可以