nginx-基础知识
基礎知識
- 一 反向代理
- 二 nginx的進程模型解析
- 三 nginx處理web請求機制解析
- 四 nginx核心配置文件nginx.conf
- 4.1 user
- 4.2 worker_processes
- 4.3 nginx日志級別
- 4.4 pid
- 4.5 設置工作模式
- 4.6 http
- 4.7 include
- 4.8 設置日志格式
- 4.9 sendfile
- 4.10 keepalive_timeout
- 4.11 gzip
- 4.12 server
- 五 nginx.pid打開失敗以及失效的解決辦法
- 六 nginx常用命令解析
- 6.1 快速停止nginx
- 6.2 優雅關閉nginx
- 6.3 檢查nginx.conf配置文件是否正常
- 6.4 查看nginx當前版本號
- 6.5 幫助
- 6.6 指定一個特定的nginx核心配置文件
- 七 nginx日志切割
- 7.1 nginx日志切割-手動
- 7.2 nginx日志切割-定時
- 八 虛擬主機-nginx訪問靜態資源
- 8.1 首先將資源復制到Linux(例如在/home下)
- 8.2 然后在nginx.conf里面配置server
- 8.3 location的匹配規則
一 反向代理
正向代理和反向代理的區別
– 正向代理:用戶決定訪問哪個服務器
– 反向代理:代理決定訪問哪個服務器
二 nginx的進程模型解析
nginx采用單主進程,多子進程(nginx.conf worker_processes 默認為1)的模型,master管理worker,master接收外部請求或指令,分配給worker去執行,worker關閉時,會等待當前客戶連接釋放后,才會關閉,多進程雖然會帶來額外的內存開銷,采用多進程而不采用多線程的原因:
- 進程之間相互獨立,互不影響,某一個worker出問題不會影響其他worker
- 不需要開發人員去額外關注線程安全性
三 nginx處理web請求機制解析
nginx采用的是異步非阻塞,在Linux上默認使用epoll模型
四 nginx核心配置文件nginx.conf
4.1 user
設置worker進程的用戶,指的是Linux的用戶,會涉及到nginx操作目錄或文件的一些權限,默認為nobody
user root;4.2 worker_processes
worker進程工作數設置,一般來說CPU有幾個,就設置幾個,或者設置為N-1也行
worker_processes 1;4.3 nginx日志級別
nginx日志級別debug|info|notice|warn|error|erit|alert|emerg錯誤級別從左到右越來越大。
4.4 pid
設置nginx進程pid
pid logs/nginx.pid4.5 設置工作模式
events {# 默認使用epolluse epoll;# 每個worker允許連接的客戶端最大連接數worker_connections 10240; }4.6 http
http是指令塊,針對http網絡傳輸的一些指令配置
http { }4.7 include
include引入外部配置,提高可讀性,避免單個配置文件過大
include mime.types;4.8 設置日志格式
| $remote_addr | 客戶端IP |
| $remote_user | 遠程客戶端用戶名,一般為:’-’ |
| $time_local | 時間和時區 |
| $request | 請求的URL及method |
| $status | 響應狀態碼 |
| $body_bytes_send | 響應客戶端內容字節數 |
| $http_referer | 記錄用戶從哪個鏈接跳轉過來的 |
| $http_user_agent | 用戶所使用的代理,一般來時都是瀏覽器 |
| $http_x_forwarded_for | 通過代理服務器來記錄客戶端的IP |
4.9 sendfile
sendfile使用高效文件傳輸,提升傳輸性能。啟用后才能使用tcp_nopush,是指當數據表積累一定大小后才發送,提高了效率。
sendfile on; tcp_nopush no;4.10 keepalive_timeout
keepalive_timeout設置客戶端與服務端請求的超時時間,保證客戶端多次請求的時候不會重復建立新的連接,節約資源損耗。
keepalive_timeout 65;4.11 gzip
gzip啟用壓縮,html/js/css壓縮傳輸后會更快
gzip on; #限制最小壓縮,小于1字節的文件不會壓縮 gzip_min_length 1; #定義壓縮的級別(壓縮比取值范圍1-9,值越大,壓縮比越大,文件越大,壓縮越多,但是cpu使用會越多) gzip_comp_level 3; #定義壓縮文件的類型 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/json;4.12 server
server可以在http指令塊中設置多個虛擬主機
- listen 監聽端口
- server_name localhost,ip,域名
- location 請求路由映射,匹配攔截
- root 請求位置
- index 首頁設置
五 nginx.pid打開失敗以及失效的解決辦法
- nginx.pid讀取失敗:將目錄重新創建一下
- pid無效:./nginx -c nginx.conf (重新指定一下nginx.conf)
- nginx默認的pid是放在logs之下的;也可以在logs目錄下創建默認的pid文件
六 nginx常用命令解析
6.1 快速停止nginx
# 該命令會立刻關掉nginx,即使有客戶端在和服務器連接 ./nginx -s stop6.2 優雅關閉nginx
# 等待所有連接(http請求)都關閉后再停止nginx ./nginx -s quit6.3 檢查nginx.conf配置文件是否正常
./nginx -t6.4 查看nginx當前版本號
./nginx -v # 展示nginx當前版本號 ./nginx -V # 展示nginx更詳細的版本信息6.5 幫助
./nginx -h ./nginx -?6.6 指定一個特定的nginx核心配置文件
./nginx -c(可能會有多種不同類型配置文件, 可以使用-c 為當前切換指定配置文件 類似 dev.yml/prod.ym)
七 nginx日志切割
7.1 nginx日志切割-手動
① 創建一個shell可執行的文件cut_my_log.sh
#!/bin/bash LOG_PATH="/var/log/nginx/" RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M) PID=/var/run/nginx/nginx.pid mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log#向Nginx主進程發送信號,用于重新打開日志文件 kill -USR1 `cat $PID`② 為cut_my_log.sh添加權限
chmod +x cut_my_log.sh③ 測試日志切割后的結果
./cut_my_log.sh7.2 nginx日志切割-定時
① 安裝定時任務
yum install crontabs② crontab -e 編輯并且添加一行新的任務;
*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh③ 重啟定時任務:
service crond restart- 附:常用定時任務命令:
定時任務表達式:
cron表達式是,分為5或6個域,每個域代表一個含義,如下所示:
| 取值范圍 | 0-59 | 0-23 | 1-31 | 1-12 | 1-7 | 2019/2020/2021 |
常用表達式:
- 每分鐘執行:
- 每日凌晨(每天晚上23.59)執行
- 每日凌晨一點執行
八 虛擬主機-nginx訪問靜態資源
靜態資源分為兩類:
html/css/js
視頻,音頻,圖片
8.1 首先將資源復制到Linux(例如在/home下)
8.2 然后在nginx.conf里面配置server
server {listen 90;server_name localhost;location / {root /home/foodie-shopindex index.html}location /imooc {# root 使用時是拼接上面的,例如: /home/imoocroot /home}location /static {# alias 使用時上面的是下面的別名,例如訪問/home/imooc目錄下的內容,可以使用/staticalias /home/imooc} }8.3 location的匹配規則
- 空格,默認匹配
- “=”精準匹配
- “~*” 匹配正則表達式,不區分大小寫
- “~” 匹配正則表達式,區分大小寫
- “^~” 以某個字符路徑開頭,只能訪問這個路徑下的內容
總結
以上是生活随笔為你收集整理的nginx-基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息安全学习----渗透测试知识点
- 下一篇: 48张帮助程序员梳理知识框架结构图谱