日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

Nginx综合介绍以及配置文件详解

發布時間:2023/12/31 Nginx 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nginx综合介绍以及配置文件详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Nginx介紹(事件驅動框架和異步處理)

Nginx是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器;同時也是一個IMAP、POP3、SMTP代理服務器;Nginx可以作為一個HTTP服務器進行網站的發布處理,另外Nginx可以作為反向代理進行負載均衡的實現。Nginx具有高性能、高并發和低內存占用的特點,成為最主流的反向代理服務器。

  • Nginx有一個主線程(Master process)和幾個工作線程(Worker process),主線程主要是加載和驗證配置文件、維護工作線程 工作線程處理實際的請求,Nginx 采用基于事件的模型和依賴操作系統的機制在工作線程之間高效地分發請求。工作線程的數量可配置,也可自動調整為服務器CPU的數量 一個請求,只可能在一個worker進程中處理,一個worker進程,不可能處理其它進程的請求。
  • Nginx的高并發,官方測試支持5萬并發連接。實際生產環境能到2-3萬并發連接數。10000個非活躍的HTTP keep-alive 連接僅占用約2.5MB內存。三萬并發連接下,10個Nginx進程,消耗內存150M。淘寶tengine團隊說測試結果是“24G內存機器上,處理并發請求可達200萬”。
  • 功能應用介紹

    Nginx由內核和模塊組成,完成工作是通過查找配置文件將客戶端請求映射到一個location block(location是用于URL匹配的命令),location配置的命令會啟動不同模塊完成工作 Nginx架構模塊介紹

    模塊分類:

    • 核心模塊:HTTP模塊、EVENT模塊(事件)、MAIL模塊。
    • 基礎模塊:HTTP Access模塊、HTTP FastCGI模塊、HTTP Proxy模塊、HTTP Rewrite模塊。
    • 第三方模塊:HTTP Upstream Request Hash模塊、Notice模塊、HTTP Access Key模塊。

    應用場景

    應用場景應用簡述實例
    靜態資源服務器Http服務器,虛擬主機, 動靜分離,讓動態網站里的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以后,我們就可以根據靜態資源的特點將其做緩存操作,這就是網站靜態化處理的核心思路root實際訪問文件路徑會拼接URL中的路徑 alias實際訪問文件路徑不會拼接URL中的路徑
    反向代理簡單來說就是真實的服務器不能直接被外部網絡訪問,所以需要一臺代理服務器,而代理服務器能被外部網絡訪問的同時又跟真實服務器在同一個網絡環境,當然也可能是同一臺服務器,端口不同而已
    正向代理意思是一個位于客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求并指定目標(原始服務器),然后代理向原始服務器轉交請求并將獲得的內容返回給客戶端 代理可解決跨域問題
    動態匹配location 后可通過正則表達式進行匹配相應的請求,并對匹配的內容進行相關操作= 表示精確匹配。只有請求的url路徑與后面的字符串完全相等時,才會命中(優先級最高)。^~ 表示如果該符號后面的字符是最佳匹配,采用該規則,不再進行后續的查找。~ 表示該規則是使用正則定義的,區分大小寫。~* 表示該規則是使用正則定義的,不區分大小寫。
    負載均衡當有2臺或以上服務器時,根據規則隨機的將請求分發到指定的服務器上處理,負載均衡配置一般都需要同時配置反向代理,通過反向代理跳轉到負載均衡(Nginx目前支持自帶3種負載均衡策略,還有2種常用的第三方策略)RR(默認,逐一分配)權重(指定輪詢幾率,weight和訪問比率成正比,用于后端服務器性能不均的情況)ip_hash(iphash的每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題)fair(按后端服務器的響應時間來分配請求,響應時間短的優先分配)url_hash(按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。)
    Gzip壓縮規定的三種標準HTTP壓縮格式之一,對于文本文件,GZip 的效果非常明顯,開啟后傳輸所需流量大約會降至 1/4 ~ 1/3
    動態匹配
    IP限制在location下結合 allow deny 指定限制IP訪問
    限流Nginx自身有的請求限制模塊ngx_http_limit_req_module、流量限制模塊ngx_stream_limit_conn_module基于令牌桶算法,可以方便的控制令牌速率,自定義調節限流,實現基本的限流控制
    適配PC或移動設備Nginx通過內置變量$http_user_agent 在location動態匹配內容內進行判斷if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {}
    自定義錯誤頁和訪問設置error_page 500 502 503 504 /50x.html; error_page 404 xxxx.com;

    配置文件

    配置文件結構如下圖:

    events { }http {server{ location path{...}location path{...}}server{...}} 復制代碼

    重點講解一下匹配規則和路徑重寫

    1. 匹配規則(location)

    location [=|~|~*|^~] /uri/ { … } 復制代碼
    • = 嚴格匹配。如果請求匹配這個location,那么將停止搜索并立即處理此請求
    • ~ 區分大小寫匹配(可用正則表達式)
    • ~* 不區分大小寫匹配(可用正則表達式)
    • ^~ 如果把這個前綴用于一個常規字符串,那么告訴nginx 如果路徑匹配那么不測試正則表達式
    • !~ 區分大小寫不匹配
    • !~* 不區分大小寫不匹配
    搜索優先級精確匹配 > 字符串匹配( 長 > 短 [ 注: ^~ 匹配則停止匹配 ]) > 正則匹配( 上 > 下 ) 使用優先級精確匹配 > (^~) > 正則匹配( 上 > 下 )>字符串(長 > 端) 復制代碼

    2. 路徑重寫(rewrite)

    可支持正則表達式 特殊關鍵字:rewrite … permanent 永久性重定向,請求日志中的狀態碼為301rewrite … redirect 臨時重定向,請求日志中的狀態碼為302last 使用了last 指令,rewrite 后會跳出location 作用域,重新開始再走一次剛才的行為break 使用了break 指令,rewrite后不會跳出location 作用域,它的生命也在這個location中終結 復制代碼

    由于文章篇幅問題就不一一列舉了,需要了解的小伙伴可參照鏈接[rewrite詳細規則],在服務器上自行測試(www.cnblogs.com/netsa/p/681…)

    具體配置文件結構或者使用的配置文件說明

    • main:nginx的全局配置,對全局生效
    #Nginx的worker進程運行用戶以及用戶組 #user nobody nobody; #Nginx開啟的進程數 worker_processes 1; #worker_processes auto; #以下參數指定了哪個cpu分配給哪個進程,一般來說不用特殊指定。如果一定要設的話,用0和1指定分配方式. #這樣設就是給1-4個進程分配單獨的核來運行,出現第5個進程是就是隨機分配了。eg: #worker_processes 4 #4核CPU #worker_cpu_affinity 0001 0010 0100 1000; nets #定義全局錯誤日志定義類型,[debug|info|notice|warn|crit] #error_log logs/error.log info; #指定進程ID存儲文件位置 #pid logs/nginx.pid; #一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與nginx進程數相除,但是nginx分配請求并不是那么均勻,所以最好與ulimit -n的值保持一致。 #vim /etc/security/limits.conf # * soft nproc 65535 # * hard nproc 65535 # * soft nofile 65535 # * hard nofile 65535 worker_rlimit_nofile 65535; 復制代碼
    • events:配置影響nginx服務器或與用戶的網絡連接
    events {#use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本內核中的高性能網絡I/O模型,如果跑在FreeBSD上面,就用kqueue模型。use epoll;#每個進程可以處理的最大連接數,理論上每臺nginx服務器的最大連接數為worker_processes*worker_connections。理論值:worker_rlimit_nofile/worker_processes#注意:最大客戶數也由系統的可用socket連接數限制(~ 64K),所以設置不切實際的高沒什么好處worker_connections 65535; #worker工作方式:串行(一定程度降低負載,但服務器吞吐量大時,關閉使用并行方式)#multi_accept on; } 復制代碼
    • http:可以嵌套多個server,配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置
    #文件擴展名與文件類型映射表include mime.types;#默認文件類型default_type application/octet-stream;#日志相關定義#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#定義日志的格式。后面定義要輸出的內容。#1.$remote_addr 與$http_x_forwarded_for 用以記錄客戶端的ip地址;#2.$remote_user :用來記錄客戶端用戶名稱;#3.$time_local :用來記錄訪問時間與時區;#4.$request :用來記錄請求的url與http協議;#5.$status :用來記錄請求狀態; #6.$body_bytes_sent :記錄發送給客戶端文件主體內容大小;#7.$http_referer :用來記錄從那個頁面鏈接訪問過來的;#8.$http_user_agent :記錄客戶端瀏覽器的相關信息#連接日志的路徑,指定的日志格式放在最后。#access_log logs/access.log main;#只記錄更為嚴重的錯誤日志,減少IO壓力error_log logs/error.log crit;#關閉日志#access_log off;#默認編碼#charset utf-8;#服務器名字的hash表大小server_names_hash_bucket_size 128;#客戶端請求單個文件的最大字節數client_max_body_size 8m;#指定來自客戶端請求頭的hearerbuffer大小client_header_buffer_size 32k;#指定客戶端請求中較大的消息頭的緩存最大數量和大小。large_client_header_buffers 4 64k;#開啟高效傳輸模式。sendfile on;#防止網絡阻塞tcp_nopush on;tcp_nodelay on; #客戶端連接超時時間,單位是秒keepalive_timeout 60;#客戶端請求頭讀取超時時間client_header_timeout 10;#設置客戶端請求主體讀取超時時間client_body_timeout 10;#響應客戶端超時時間send_timeout 10;#FastCGI相關參數是為了改善網站的性能:減少資源占用,提高訪問速度。fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;fastcgi_buffer_size 64k;fastcgi_buffers 4 64k;fastcgi_busy_buffers_size 128k;fastcgi_temp_file_write_size 128k;#gzip模塊設置#開啟gzip壓縮輸出gzip on; #最小壓縮文件大小gzip_min_length 1k; #壓縮緩沖區gzip_buffers 4 16k;#壓縮版本(默認1.1,前端如果是squid2.5請使用1.0)gzip_http_version 1.0;#壓縮等級 1-9 等級越高,壓縮效果越好,節約寬帶,但CPU消耗大gzip_comp_level 2;#壓縮類型,默認就已經包含text/html,所以下面就不用再寫了,寫上去也不會有問題,但是會有一個warn。gzip_types text/plain application/x-javascript text/css application/xml;#前端緩存服務器緩存經過壓縮的頁面gzip_vary on; 復制代碼
    • server:配置虛擬主機的相關參數,一個http中可以有多個server
    • location:配置請求的路由,以及各種頁面的處理情況
    • upstream:配置后端服務器具體地址,負載均衡配置不可或缺的部分
    虛擬主機定義server {#監聽端口listen 80;#訪問域名server_name localhost;#編碼格式,若網頁格式與此不同,將被自動轉碼#charset koi8-r;#虛擬主機訪問日志定義#access_log logs/host.access.log main;#對URL進行匹配location / {#訪問路徑,可相對也可絕對路徑root html;#首頁文件。以下按順序匹配index index.html index.htm;}#錯誤信息返回頁面#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}#訪問URL以.php結尾則自動轉交給127.0.0.1# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#} #php腳本請求全部轉發給FastCGI處理# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}#禁止訪問.ht頁面 (需ngx_http_access_module模塊)# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}} #HTTPS虛擬主機定義# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#} #vue配置server {listen 80;server_name jcsd-cdn-monitor.jdcloud.com;#charset koi8-r;#access_log logs/host.access.log main;root /root/dist;location / {try_files $uri $uri/ /index.html;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}} 復制代碼
    • Nignx狀態監控
    #Nginx運行狀態,StubStatus模塊獲取Nginx自啟動的工作狀態(編譯時要開啟對應功能)#location /NginxStatus {# #啟用StubStatus的工作訪問狀態 # stub_status on;# #指定StubStaus模塊的訪問日志文件 可off# access_log logs/Nginxstatus.log;# #Nginx認證機制(需Apache的htpasswd命令生成)# #auth_basic "NginxStatus";# #用來認證的密碼文件# #auth_basic_user_file ../htpasswd; #} 訪問:http://IP/NginxStatus(測試就不加密碼驗證相關) 復制代碼
    • 反向代理
    #以下配置追加在HTTP的全局變量中#啟動代理緩存功能 proxy_buffering on; #nginx跟后端服務器連接超時時間(代理連接超時) proxy_connect_timeout 5; #后端服務器數據回傳時間(代理發送超時) proxy_send_timeout 5; #連接成功后,后端服務器響應時間(代理接收超時) proxy_read_timeout 60; #設置代理服務器(nginx)保存用戶頭信息的緩沖區大小 proxy_buffer_size 16k; #proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置 proxy_buffers 4 32k; #高負荷下緩沖大小(proxy_buffers*2) proxy_busy_buffers_size 64k; #設定緩存文件夾大小,大于這個值,將從upstream服務器傳 proxy_temp_file_write_size 64k; #反向代理緩存目錄 proxy_cache_path /data/proxy/cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=1g; #levels=1:2 設置目錄深度,第一層目錄是1個字符,第2層是2個字符 #keys_zone:設置web緩存名稱和內存緩存空間大小 #inactive:自動清除緩存文件時間。 #max_size:硬盤空間最大可使用值。 #指定臨時緩存文件的存儲路徑(必須在同一分區) proxy_temp_path /data/proxy/temp;#服務配置 server {#偵聽的80端口listen 80;server_name localhost;location / {#反向代理緩存設置命令(proxy_cache zone|off,默認關閉所以要設置)proxy_cache cache_one;#對不同的狀態碼緩存不同時間proxy_cache_valid 200 304 12h;#設置以什么樣參數獲取緩存文件名proxy_cache_key $host$uri$is_args$args;#后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IPproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #代理設置proxy_pass http://IP; #文件過期時間控制expires 1d;}#配置手動清楚緩存(實現此功能需第三方模塊 ngx_cache_purge)#http://www.123.com/2017/0316/17.html訪問#http://www.123.com/purge/2017/0316/17.html清楚URL緩存location ~ /purge(/.*) {allow 127.0.0.1;deny all;proxy_cache_purge cache_one $host$1$is_args$args;}#設置擴展名以.jsp、.php、.jspx結尾的動態應用程序不做緩存location ~.*\.(jsp|php|jspx)?$ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://IP;} 復制代碼
    • 負載均衡
    #負載均衡服務器池 upstream my_server_pool {#調度算法#1.輪循(默認)(weight輪循權值)#2.ip_hash:根據每個請求訪問IP的hash結果分配。(會話保持)#3.fair:根據后端服務器響應時間最短請求。(upstream_fair模塊)#4.url_hash:根據訪問的url的hash結果分配。(需hash軟件包)#參數:#down:表示不參與負載均衡#backup:備份服務器#max_fails:允許最大請求錯誤次數#fail_timeout:請求失敗后暫停服務時間。server 192.168.1.109:80 weight=1 max_fails=2 fail_timeout=30;server 192.168.1.108:80 weight=2 max_fails=2 fail_timeout=30; } #負載均衡調用 server {...location / {proxy_pass http://my_server_pool;} } 復制代碼
    • URL重寫
    #根據不同的瀏覽器URL重寫 if($http_user_agent ~ Firefox){ rewrite ^(.*)$ /firefox/$1 break; } if($http_user_agent ~ MSIE){ rewrite ^(.*)$ /msie/$1 break; }#實現域名跳轉 location / {rewrite ^/(.*)$ https://web8.example.com$1 permanent; } 復制代碼
    • IP限制
    #限制IP訪問 location / {deny 192.168.0.2;allow 192.168.0.0/24;allow 192.168.1.1;deny all; } 復制代碼

    如何使用第三方模塊以及源碼編譯Nginx使用,后續再一邊實踐一邊記錄分享給大家

    養成看日志的習慣

    常見問題

    • No mapping for the Unicode character exists in the target multi-byte code page

      解壓的路徑里面包含有中文的緣故 復制代碼
    • bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

      80端口被占用,<SQL Server Reporting Services (MSSQLSERVER)>/<World Wide Web Publishing Service> 關閉SQL/IIS 復制代碼

    相關學習鏈接

    • Nginx驅動模型

    • 常用的功能詳細介紹

    • rewrite規則

    總結

    以上是生活随笔為你收集整理的Nginx综合介绍以及配置文件详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。