0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Nginx的特點和作用 Nginx常用命令和核心配置

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-09-01 09:53 ? 次閱讀

Nginx 是開源、高性能、高可靠的 Web 和反向代理服務器,而且支持熱部署,幾乎可以做到 7 * 24 小時不間斷運行,即使運行幾個月也不需要重新啟動,還能在不間斷服務的情況下對軟件版本進行熱更新。性能是 Nginx 最重要的考量,其占用內(nèi)存少、并發(fā)能力強、能支持高達 5w 個并發(fā)連接數(shù),最重要的是, Nginx 是免費的并可以商業(yè)化,配置使用也比較簡單。

Nginx特點

高并發(fā)、高性能;

模塊化架構使得它的擴展性非常好;

異步非阻塞的事件驅動模型這點和 Node.js 相似;

相對于其它服務器來說它可以連續(xù)幾個月甚至更長而不需要重啟服務器使得它具有高可靠性;

熱部署、平滑升級;

完全開源,生態(tài)繁榮;

Nginx作用

Nginx 的最重要的幾個使用場景:

靜態(tài)資源服務,通過本地文件系統(tǒng)提供服務;

反向代理服務,延伸出包括緩存、負載均衡等;

API 服務, OpenResty ;

對于前端來說 Node.js 并不陌生, Nginx 和 Node.js 的很多理念類似, HTTP 服務器、事件驅動、異步非阻塞等,且 Nginx 的大部分功能使用 Node.js 也可以實現(xiàn),但 Nginx 和 Node.js 并不沖突,都有自己擅長的領域。Nginx 擅長于底層服務器端資源的處理(靜態(tài)資源處理轉發(fā)、反向代理,負載均衡等), Node.js 更擅長上層具體業(yè)務邏輯的處理,兩者可以完美組合。

用一張圖表示:

Nginx常用命令

nginx -s reload  # 向主進程發(fā)送信號,重新加載配置文件,熱重啟
nginx -s reopen   # 重啟 Nginx
nginx -s stop    # 快速關閉
nginx -s quit    # 等待工作進程處理完成后關閉
nginx -T         # 查看當前 Nginx 最終的配置
nginx -t         # 檢查配置是否有問題

Nginx核心配置

nginx.conf配置文件結構

Nginx 的典型配置示例:

# main段配置信息
user  nginx;                        # 運行用戶,默認即是nginx,可以不進行設置
worker_processes  auto;             # Nginx 進程數(shù),一般設置為和 CPU 核數(shù)一樣
error_log  /var/log/nginx/error.log warn;   # Nginx 的錯誤日志存放目錄
pid        /var/run/nginx.pid;      # Nginx 服務啟動時的 pid 存放位置


# events段配置信息
events {
    use epoll;     # 使用epoll的I/O模型(如果你不知道Nginx該使用哪種輪詢方法,會自動選擇一個最適合你操作系統(tǒng)的)
    worker_connections 1024;   # 每個進程允許最大并發(fā)數(shù)
}


# http段配置信息
# 配置使用最頻繁的部分,代理、緩存、日志定義等絕大多數(shù)功能和第三方模塊的配置都在這里設置
http { 
    # 設置日志模式
    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  /var/log/nginx/access.log  main;   # Nginx訪問日志存放位置


    sendfile            on;   # 開啟高效傳輸模式
    tcp_nopush          on;   # 減少網(wǎng)絡報文段的數(shù)量
    tcp_nodelay         on;
    keepalive_timeout   65;   # 保持連接的時間,也叫超時時間,單位秒
    types_hash_max_size 2048;


    include             /etc/nginx/mime.types;      # 文件擴展名與類型映射表
    default_type        application/octet-stream;   # 默認文件類型


    include /etc/nginx/conf.d/*.conf;   # 加載子配置項
    
    # server段配置信息
    server {
      listen       80;       # 配置監(jiān)聽的端口
      server_name  localhost;    # 配置的域名
      
      # location段配置信息
      location / {
        root   /usr/share/nginx/html;  # 網(wǎng)站根目錄
        index  index.html index.htm;   # 默認首頁文件
        deny 172.168.22.11;   # 禁止訪問的ip地址,可以為all
        allow 172.168.33.44;# 允許訪問的ip地址,可以為all
      }
      
      error_page 500 502 503 504 /50x.html;  # 默認50x對應的訪問頁面
      error_page 400 404 error.html;   # 同上
    }
}

main 全局配置,對全局生效;

events 配置影響 Nginx 服務器與用戶的網(wǎng)絡連接;

http 配置代理,緩存,日志定義等絕大多數(shù)功能和第三方模塊的配置;

server 配置虛擬主機的相關參數(shù),一個 http 塊中可以有多個 server 塊;

location 用于配置匹配的 uri ;

upstream 配置后端服務器具體地址,負載均衡配置不可或缺的部分;

用一張圖清晰的展示它的層級結構:

0930560e-480c-11ee-97a6-92fbcf53809c.png

nginx.conf 配置文件的語法規(guī)則:

配置文件由指令與指令塊構成

每條指令以 “;” 分號結尾,指令與參數(shù)間以空格符號分隔

指令塊以 {} 大括號將多條指令組織在一起

include 語句允許組合多個配置文件以提升可維護性

通過 # 符號添加注釋,提高可讀性

通過 $ 符號使用變量

部分指令的參數(shù)支持正則表達式,例如常用的 location 指令

配置文件 main 段核心參數(shù)

user

指定運行 Nginx 的 woker 子進程的屬主和屬組,其中組可以不指定。

#語法:user USERNAME [GROUP]


user nginx lion; # 用戶是nginx;組是lion

pid

指定運行 Nginx master 主進程的 pid 文件存放路徑。

pid /opt/nginx/logs/nginx.pid # master主進程的的pid存放在nginx.pid的文件

worker_rlimit_nofile_number

指定worker子進程可以打開的最大文件句柄數(shù)。

worker_rlimit_nofile 20480; # 可以理解成每個worker子進程的最大連接數(shù)量。

worker_rlimit_core

指定 worker 子進程異常終止后的 core 文件,用于記錄分析問題。

worker_rlimit_core 50M; # 存放大小限制
working_directory /opt/nginx/tmp; # 存放目錄

worker_processes_number

指定 Nginx 啟動的 worker 子進程數(shù)量。

worker_processes 4; # 指定具體子進程數(shù)量
worker_processes auto; # 與當前cpu物理核心數(shù)一致

worker_cpu_affinity

將每個 worker 子進程與我們的 cpu 物理核心綁定。

worker_cpu_affinity 0001 0010 0100 1000; # 4個物理核心,4個worker子進程

將每個 worker 子進程與特定 CPU 物理核心綁定,優(yōu)勢在于,避免同一個 worker 子進程在不同的 CPU 核心上切換,緩存失效,降低性能。但其并不能真正的避免進程切換。

worker_priority

指定 worker 子進程的 nice 值,以調整運行 Nginx 的優(yōu)先級,通常設定為負值,以優(yōu)先調用 Nginx 。

worker_priority -10; # 120-10=110,110就是最終的優(yōu)先級

Linux 默認進程的優(yōu)先級值是120,值越小越優(yōu)先;nice 值范圍為 -20 到 +19 。

備注:應用的默認優(yōu)先級值是120加上 nice 值等于它最終的值,這個值越小,優(yōu)先級越高。

worker_shutdown_timeout

指定 worker 子進程優(yōu)雅退出時的超時時間。

worker_shutdown_timeout 5s;

timer_resolution

worker 子進程內(nèi)部使用的計時器精度,調整時間間隔越大,系統(tǒng)調用越少,有利于性能提升;反之,系統(tǒng)調用越多,性能下降。

timer_resolution 100ms;

在 Linux 系統(tǒng)中,用戶需要獲取計時器時需要向操作系統(tǒng)內(nèi)核發(fā)送請求,有請求就必然會有開銷,因此這個間隔越大開銷就越小。

daemon

指定 Nginx 的運行方式,前臺還是后臺,前臺用于調試,后臺用于生產(chǎn)。

daemon off; # 默認是on,后臺運行模式

配置文件 events 段核心參數(shù)

use

Nginx 使用何種事件驅動模型。

use method; # 不推薦配置它,讓nginx自己選擇

method 可選值為:select、poll、kqueue、epoll、/dev/poll、eventport

worker_connections

worker 子進程能夠處理的最大并發(fā)連接數(shù)。

worker_connections 1024 # 每個子進程的最大連接數(shù)為1024

accept_mutex

是否打開負載均衡互斥鎖。

accept_mutex on # 默認是off關閉的,這里推薦打開

server_name 指令

指定虛擬主機域名。

#語法:server_name name1 name2 name3
# 示例:
server_name www.nginx.com;

域名匹配的四種寫法:

精確匹配:server_name http://www.nginx.com ;

左側通配:server_name *.http://nginx.com ;

右側統(tǒng)配:server_name www.nginx.* ;

正則匹配:server_name ~^www.nginx.*$ ;

匹配優(yōu)先級:精確匹配 > 左側通配符匹配 > 右側通配符匹配 > 正則表達式匹配

server_name 配置實例:

1、配置本地 DNS 解析 hosts


# 添加如下內(nèi)容,其中 121.42.11.34 是阿里云服務器IP地址


121.42.11.34 www.nginx-test.com
121.42.11.34 mail.nginx-test.com
121.42.11.34 www.nginx-test.org
121.42.11.34 doc.nginx-test.com
121.42.11.34 www.nginx-test.cn
121.42.11.34 fe.nginx-test.club

注意:這里使用的是虛擬域名進行測試,因此需要配置本地 DNS 解析,如果使用阿里云上購買的域名,則需要在阿里云上設置好域名解析。

2、配置阿里云Nginx,vim /etc/nginx/nginx.conf

# 這里只列舉了http端中的sever端配置

# 左匹配
server {
  listen  80;
  server_name  *.nginx-test.com;
  root  /usr/share/nginx/html/nginx-test/left-match/;
  location / {
    index index.html;
  }
}
# 正則匹配
server {
  listen  80;
  server_name  ~^.*.nginx-test..*$;
  root  /usr/share/nginx/html/nginx-test/reg-match/;
  location / {
    index index.html;
  }
}
# 右匹配
server {
  listen  80;
  server_name  www.nginx-test.*;
  root  /usr/share/nginx/html/nginx-test/right-match/;
  location / {
    index index.html;
  }
}
# 完全匹配
server {
  listen  80;
  server_name  www.nginx-test.com;
  root  /usr/share/nginx/html/nginx-test/all-match/;
  location / {
    index index.html;
  }
}

3、訪問分析

當訪問 http://www.nginx-test.com 時,都可以被匹配上,因此選擇優(yōu)先級最高的“完全匹配”;

當訪問 http://mail.nginx-test.com 時,會進行“左匹配”;

當訪問 http://www.nginx-test.org 時,會進行“右匹配”;

當訪問 http://doc.nginx-test.com 時,會進行“左匹配”;

當訪問 http://www.nginx-test.cn 時,會進行“右匹配”;

當訪問 fe.nginx-test.club 時,會進行“正則匹配”;

root

指定靜態(tài)資源目錄位置,它可以寫在 http 、 server 、 location 等配置中。


#root path


#例如:


location /image {
  root /opt/nginx/static;
}


#當用戶訪問 www.test.com/image/1.png 時,實際在服務器找的路徑是 /opt/nginx/static/image/1.png

注意:root 會將定義路徑與 URI 疊加, alias 則只取定義路徑。

alias

它也是指定靜態(tài)資源目錄位置,它只能寫在 location 中。

location /image {
  alias /opt/nginx/static/image/;
}


#當用戶訪問 www.test.com/image/1.png 時,實際在服務器找的路徑是 /opt/nginx/static/image/1.png

注意:使用 alias 末尾一定要添加 / ,并且它只能位于 location 中。

location

配置路徑。

location [ = | ~ | ~* | ^~ ] uri {
  ...
}

匹配規(guī)則:

= 精確匹配;

~ 正則匹配,區(qū)分大小寫;

~* 正則匹配,不區(qū)分大小寫;

^~ 匹配到即停止搜索;

匹配優(yōu)先級:=>^~>~>~*> 不帶任何字符。

實例:

server {
  listen  80;
  server_name  www.nginx-test.com;
  
  # 只有當訪問 www.nginx-test.com/match_all/ 時才會匹配到/usr/share/nginx/html/match_all/index.html
  location = /match_all/ {
      root  /usr/share/nginx/html
      index index.html
  }
  
  # 當訪問 www.nginx-test.com/1.jpg 等路徑時會去 /usr/share/nginx/images/1.jpg 找對應的資源
  location ~ .(jpeg|jpg|png|svg)$ {
    root /usr/share/nginx/images;
  }
  
  # 當訪問 www.nginx-test.com/bbs/ 時會匹配上 /usr/share/nginx/html/bbs/index.html
  location ^~ /bbs/ {
    root /usr/share/nginx/html;
    index index.html index.htm;
  }
}

location 中的反斜線

location/test{
  ...
}


location /test/ {
  ...
}

不帶 / 當訪問 http://www.nginx-test.com/test 時, Nginx 先找是否有 test 目錄,如果有則找 test 目錄下的 index.html ;如果沒有 test 目錄, nginx 則會找是否有 test 文件。

帶 / 當訪問 http://www.nginx-test.com/test 時, Nginx 先找是否有 test 目錄,如果有則找 test 目錄下的 index.html ,如果沒有它也不會去找是否存在 test 文件。

return

停止處理請求,直接返回響應碼或重定向到其他 URL ;執(zhí)行 return 指令后, location 中后續(xù)指令將不會被執(zhí)行。


#return code [text];
#return code URL;
#return URL;


#例如:


location / {
  return 404; # 直接返回狀態(tài)碼
}


location / {
  return 404 "pages not found"; # 返回狀態(tài)碼 + 一段文本
}


location / {
  return 302 /bbs ; # 返回狀態(tài)碼 + 重定向地址
}


location / {
  return https://www.baidu.com ; # 返回重定向地址
}

rewrite

根據(jù)指定正則表達式匹配規(guī)則,重寫 URL 。

#語法:rewrite 正則表達式 要替換的內(nèi)容 [flag];
#上下文(標簽):server、location、if


#示例:rewirte /images/(.*.jpg)$ /pic/$1; # $1是前面括號(.*.jpg)的反向引用

flag 可選值的含義:

last 重寫后的 URL 發(fā)起新請求,再次進入 server 段,重試 location 的中的匹配;

break 直接使用重寫后的 URL ,不再匹配其它 location 中語句;

redirect 返回302臨時重定向;

permanent 返回301永久重定向;

server{
  listen 80;
  server_name fe.lion.club; # 要在本地hosts文件進行配置
  root html;
  location /search {
    rewrite ^/(.*) https://www.baidu.com redirect;
  }
  
  location /images {
    rewrite /images/(.*) /pics/$1;
  }
  
  location /pics {
    rewrite /pics/(.*) /photos/$1;
  }
  
  location /photos {
  
  }
}

按照這個配置我們來分析:

當訪問 fe.lion.club/search 時,會自動幫我們重定向到 https://www.baidu.com。

當訪問 fe.lion.club/images/1.jpg 時,第一步重寫 URL 為 fe.lion.club/pics/1.jpg ,找到 pics 的 location ,繼續(xù)重寫 URL 為 fe.lion.club/photos/1.jpg ,找到 /photos 的 location 后,去 html/photos 目錄下尋找 1.jpg 靜態(tài)資源。

if 指令


#語法:if (condition) {...}


#上下文:server、location


#示例:


if($http_user_agent ~ Chrome){
  rewrite /(.*)/browser/$1 break;
}

condition 判斷條件:

$variable 僅為變量時,值為空或以0開頭字符串都會被當做 false 處理;

= 或 != 相等或不等;

~ 正則匹配;

! ~ 非正則匹配;

~* 正則匹配,不區(qū)分大小寫;

-f 或 ! -f 檢測文件存在或不存在;

-d 或 ! -d 檢測目錄存在或不存在;

-e 或 ! -e 檢測文件、目錄、符號鏈接等存在或不存在;

-x 或 ! -x 檢測文件可以執(zhí)行或不可執(zhí)行;

實例:

server {
  listen 8080;
  server_name localhost;
  root html;
  
  location / {
    if ( $uri = "/images/" ){
      rewrite (.*) /pics/ break;
    }
  }
}

當訪問 localhost:8080/images/ 時,會進入 if 判斷里面執(zhí)行 rewrite 命令。

autoindex

用戶請求以 / 結尾時,列出目錄結構,可以用于快速搭建靜態(tài)資源下載網(wǎng)站。

autoindex.conf 配置信息:

server {
  listen 80;
  server_name fe.lion-test.club;
  
  location /download/ {
    root /opt/source;
    
    autoindex on; # 打開 autoindex,,可選參數(shù)有 on | off
    autoindex_exact_size on; # 修改為off,以KB、MB、GB顯示文件大小,默認為on,以bytes顯示出?件的確切??
    autoindex_format html; # 以html的方式進行格式化,可選參數(shù)有 html | json | xml
    autoindex_localtime off; # 顯示的?件時間為?件的服務器時間。默認為off,顯示的?件時間為GMT時間
  }
}

當訪問 http://fe.xxx.com/download/ 時,會把服務器 /opt/source/download/ 路徑下的文件展示出來。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    12

    文章

    8958

    瀏覽量

    85081
  • 開源
    +關注

    關注

    3

    文章

    3215

    瀏覽量

    42327
  • 命令
    +關注

    關注

    5

    文章

    676

    瀏覽量

    21965
  • nginx
    +關注

    關注

    0

    文章

    142

    瀏覽量

    12154

原文標題:Nginx 常用配置與命令,必收藏~~

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux下Nginx常用命令------啟動、停止、重啟

    ~]# pkill -9 nginx 1、驗證nginx配置文件是否正確方法一:進入nginx安裝目錄***in下,輸入命令./
    發(fā)表于 07-09 07:02

    windowsxp常用命令

    windowsxp常用命令   winver---------檢查windows版本 wmimgmt.msc----打開windows管理體系結構(wmi) wupdmgr-------
    發(fā)表于 01-10 09:05 ?1268次閱讀

    Ubuntu常用命令大全

    Ubuntu常用命令大全,包括常用管理目錄,系統(tǒng)命令,硬盤相關,內(nèi)存相關,查看進程等命令
    發(fā)表于 01-06 11:16 ?0次下載

    DOS常用命令寶典

    DOS常用命令寶典,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 11-10 18:24 ?0次下載

    vim常用命令

    vim常用命令
    發(fā)表于 01-08 15:59 ?3次下載

    redis常用命令總結

    本文是對redis常用命令總結。
    發(fā)表于 02-09 11:25 ?1585次閱讀

    Linux常用命令的全拼整理

    本文整理了常用命令的全拼,好像混進了什么奇怪的東西。
    的頭像 發(fā)表于 10-10 17:19 ?4632次閱讀

    linux常用命令手冊

    linux常用命令手冊免費下載。
    發(fā)表于 06-01 14:59 ?68次下載

    Memcache系統(tǒng)常用命令講解

    Memcache系統(tǒng)常用命令講解(無線電源技術商業(yè)計劃書)-該文檔為Memcache系統(tǒng)常用命令講解文檔,是一份還算不錯的參考文檔,感興趣的可以下載看看,,,,,,,,,,,,,,,,
    發(fā)表于 09-28 11:27 ?5次下載
    Memcache系統(tǒng)<b class='flag-5'>常用命令</b>講解

    linux常用命令大全

    linux常用命令大全,一些常用命令都可以找到
    發(fā)表于 03-03 09:20 ?0次下載

    DOS系統(tǒng)常用命令

    介紹了DOS系統(tǒng)的常用命令。
    發(fā)表于 03-21 14:59 ?0次下載

    Linux常用命令

    Linux常用命令
    的頭像 發(fā)表于 01-12 11:19 ?1103次閱讀

    Linux常用命令手冊分享

    linux常用命令合集
    發(fā)表于 04-26 11:46 ?1次下載

    Nginx常用配置命令

    對于前端來說 Node.js 并不陌生, Nginx 和 Node.js 的很多理念類似, HTTP 服務器、事件驅動、異步非阻塞等,且 Nginx 的大部分功能使用 Node.js 也可以實現(xiàn),但 Nginx 和 Node.j
    發(fā)表于 10-18 10:04 ?381次閱讀
    <b class='flag-5'>Nginx</b><b class='flag-5'>常用</b><b class='flag-5'>配置</b>與<b class='flag-5'>命令</b>

    詳解kubectl常用命令

    詳解kubectl常用命令
    的頭像 發(fā)表于 11-05 15:39 ?93次閱讀
    詳解kubectl<b class='flag-5'>常用命令</b>