Nginx常見問題處理及優化方案

2021-09-26 06:33:04 字數 3929 閱讀 7653

常見問題概述

1.如何自定義返回給客戶端的404錯誤頁面

2.如何檢視伺服器狀態資訊

3.如果客戶端訪問伺服器提示「too many open files」如何解決

4.如何解決客戶端訪問頭部資訊過長的問題

5.如何讓客戶端瀏覽器快取資料

6.日誌切割

7.開啟gzip壓縮功能,提高資料傳輸效率

8.開啟檔案快取功能

9.然後客戶機訪問此web伺服器驗證效果:

10.使用ab壓力測試軟體測試併發量

11.編寫測試指令碼生成長頭部資訊的訪問請求

12.客戶端訪問不存在的頁面,測試404錯誤頁面是否重定向

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf

… …charset utf-8; //僅需要中文時需要改選項,可選項

error_page 404 /404.html; //自定義錯誤頁面

… …[root@proxy ~]# vim /usr/local/nginx/html/404.html //生成錯誤頁面

oops,no no no page …

[root@proxy ~]# nginx -s reload

#請先確保nginx是啟動狀態,否則執行該命令會報錯

1)編譯安裝時使用–with-http_stub_status_module開啟狀態頁面模組

[root@proxy ~]# tar -zxvf nginx-1.12.2.tar.gz

[root@proxy ~]# cd nginx-1.12.2

[root@proxy nginx-1.12.2]# ./configure \

–with-http_ssl_module //開啟ssl加密功能

–with-stream //開啟tcp/udp**模組

–with-http_stub_status_module //開啟status狀態頁面

[root@proxy nginx-1.12.2]# make && make install //編譯並安裝

2).啟用nginx服務並檢視監聽埠狀態

ss命令可以檢視系統中啟動的埠資訊,該命令常用選項如下:

-a顯示所有埠的資訊

-n以數字格式顯示埠號

-t顯示tcp連線的埠

-u顯示udp連線的埠

-l顯示服務正在監聽的埠資訊,如httpd啟動後,會一直監聽80埠

-p顯示監聽埠的服務名稱是什麼(也就是程式名稱)

注意:在rhel7系統中可以使用ss命令替代netstat命令,功能一樣,選項一樣。

[root@proxy ~]# /usr/local/nginx/sbin/nginx

[root@proxy ~]# netstat -anptu | grep nginx

tcp 0 0 0.0.0.0:80 0.0.0.0:* listen 10441/nginx

[root@proxy ~]# ss -anptu | grep nginx

3)修改nginx配置檔案,定義狀態頁面

[root@proxy ~]# cat /usr/local/nginx/conf/nginx.conf

… …location /status

… …[root@proxy ~]# /usr/local/nginx/sbin/nginx

4)優化後,檢視狀態頁面資訊

補充:active connections:當前活動的連線數量。

accepts:已經接受客戶端的連線總數量。

handled:已經處理客戶端的連線總數量。

(一般與accepts一致,除非伺服器限制了連線數量)。

requests:客戶端傳送的請求數量。

reading:當前伺服器正在讀取客戶端請求頭的數量。

writing:當前伺服器正在寫響應資訊的數量。

waiting:當前多少客戶端在等待伺服器的響應。

1)優化前使用ab高併發測試

[root@proxy ~]# ab -n 2000 -c 2000

benchmarking 192.168.4.5 (be patient)

socket: too many open files (24) //提示開啟檔案數量過多

2)修改nginx配置檔案,增加併發量

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf

… …worker_processes 2; //與cpu核心數量一致

events

… …[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

3)優化linux核心引數(最大檔案數量)

[root@proxy ~]# ulimit -a //檢視所有屬性值

[root@proxy ~]# ulimit -hn 100000 //設定硬限制(臨時規則)

[root@proxy ~]# ulimit -sn 100000 //設定軟限制(臨時規則)

[root@proxy ~]# vim /etc/security/limits.conf

… …user / group soft nofile 100000

user / group hard nofile 100000

#該配置檔案分4列,分別如下:

#使用者或組 硬限制或軟限制 需要限制的專案 限制的值

修改nginx配置檔案,增加資料報頭部快取大小

日誌檔案越來越大怎麼辦?單個檔案10g? 如何切割?

步驟:1. 把舊的日誌重新命名 (相當於備份儲存)

2. kill usr1 pid(nginx的程序pid號)

1)手動執行

備註:/usr/local/nginx/logs/nginx.pid檔案中存放的是nginx的程序pid號。

[root@proxy ~]# mv access.log access2.log

[root@proxy ~]# kill -usr1 $(cat /usr/local/nginx/logs/nginx.pid)

2)自動完成

每週5的03點03分自動執行指令碼完成日誌切割工作。

[root@proxy ~]# vim /usr/local/nginx/logbak.sh

#!/bin/bash

date=date +%y%m%d

logpath=/usr/local/nginx/logs

mv $logpath/access.log log

path

/acc

ess−

logpath/access-

logpat

h/ac

cess

−date.log

mv $logpath/error.log log

path

/err

or

−logpath/error-

logpat

h/er

ror−

date.log

kill -usr1 $(cat $logpath/nginx.pid)

[root@proxy ~]# crontab -e

03 03 * * 5 /usr/local/nginx/logbak.sh

1)如果需要處理大量靜態檔案,可以將檔案快取在記憶體,下次訪問會更快。

常見問題及處理

常見問題及處理 問題1 時輸入醫生姓名簡碼調不出號別。原因分析或處理方法 1,可能沒設定該醫生對應的號別。2,門診 本地引數設定中 號別輸入匹配沒有設定成 按醫生簡碼 問題2 收藥品費用時不顯示藥品庫存。原因分析或處理方法 1,本地引數沒設定藥房對應關係,設定後即可。問題3 收非藥品費用時單價欄位在...

nginx常見問題

1 顯示的錯誤資訊是 413 request entity too large 原因是請求實體太長了。一般出現種情況是post請求時body內容post的資料太大了,如上傳大檔案過大 如post資料比較多 在伺服器的 etc nginx目錄中找到nginx.conf 找到http 段,修改或增加 c...

Nginx常見問題

1.在 apache 的寫法 rewritecond nginx.org rewriterule 在 nginx 可以對應寫成 server 但 nginx 作者更建議的方法是 server server f q 1.請教一下,nginx的rewrite規則怎麼寫?比如將 http rewrite為...