中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

nginx是什么

發布時間:2020-05-29 18:42:26 來源:億速云 閱讀:337 作者:鴿子 欄目:系統運維

1)Nginx服務概述

Nginx由俄羅斯的lgor Sysoev開發,專為性能優化而開發,其最知名的優點就是它的穩定性和低系統資源消耗、以及對HTTP并發連接的高處立能力(單臺物理服務器可支持30000~50000個并發請求)。正因為如此,大量提供社交網絡、新聞資訊、電子商務及虛擬主機等服務的企業紛紛選擇Nginx來提供Web服務。

搭建Web服務如果是為了解析靜態網頁、動態網頁等、不需要太多的功能,那么Nginx絕對是首選。

2)安裝Nginx

本次案例采用yum的方式進行安裝,不過不使用epel源,因為這個nginx版本更新的太快了,導致epel根本趕不上Nginx的更新速度,所以我們采用官方的yum的yum源進行配置!

[root@nginx ~]# yum install -y gcc gcc- c++ autoconf pcre pcre-devel make automake wget httpd-tools vim tree
#由于是最小化安裝的系統,所以安裝一些必要的軟件
[root@nginx ~]# vim /etc/yum.repos.d/nginx.repo
#配置nginx的yum源,Nginx官方也有相應的配置信息
[nginx]
name=nginx_repo 
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
#該yum源默認情況下安裝的是nginx最新的、穩定版
[root@nginx ~]# yum -y install nginx              #安裝nginx
[root@nginx ~]# nginx -v             #查看nginx的版本
nginx version: nginx/1.16.1

3)Nginx安裝目錄

為了更清晰的了解 Nginx 軟件的全貌,有必要介紹下 Nginx 安裝后整體的?錄結構及?件功能。

[root@nginx ~]# rpm -ql nginx
#查看與nginx相關的目錄

下圖對nginx的安裝目錄進行詳細的解釋!
nginx是什么

4)Nginx的編譯參數

[root@nginx ~]# nginx -V
#查看nginx的編譯參數

下圖展示了Nginx編譯參數選項以及作用!
nginx是什么

5)Nginx常用模塊

Nginx模塊分為 Nginx官?模塊以及Nginx第三?模塊!如圖表:

Nginx編譯選項模塊作用
ngx_http_core_module包含?些核?的http參數配置,對應Nginx的配置區塊部分
ngx_http_access_module訪問控制模塊,?來控制?站?戶對Nginx的訪問
ngx_http_gzip_module壓縮模塊,對Nginx返回的數據壓縮,屬于性能優化模塊
ngx_http_fastcgi_modulefastci模塊,和動態應?相關的模塊,例如PHP
ngx_http_proxy_moduleproxy代理模塊
ngx_http_upstream_module負載均衡模塊,可以實現?站的負載均衡功能及節點的健康檢查
ngx_http_rewrite_moduleURL地址重寫模塊
ngx_http_limit_conn_module限制?戶并發連接數及請求數模塊
ngx_http_limit_req_module限制Nginx request processing rate根據定義的key
ngx_http_log_module訪問?志模塊,以指定的格式記錄Nginx客戶訪問?志等信息
ngx_http_auth_basic_moduleWeb認證模塊,設置Web?戶通過賬號密碼訪問Nginx
nginx_http_ssl_modulessl模塊,?于加密的http連接,如https

6)Nginx內置變量

$uri:當前請求的URI,不帶參數;
$request_uri:請求的URI,帶完整參數;
$host:http請求報文中host首部,如果沒有則以處理此請求的虛擬主機名稱名代替;
$hostname:nginx服務運行在主機的主機名;
$remote_addr:客戶端IP;
$remote_port:客戶端端口;
$remote_user:使用用戶認證時客戶端用戶輸入的用戶名;
$request_filename:用戶請求中的URI經過本地root或alias轉換后映射的本地文件路徑;
$request_method:請求方法:GET、POST、PUT
$server_addr:服務器地址;
$server_name:服務器名稱;
$server_port:服務器端口;
$server_protocol:服務器向客戶端發送響應時的協議,如http/1.1 http/1.0;
$scheme:在請求中使用scheme,作用是截取http://xxxx.com中的http;
$http_HEADER:匹配請求報文中指定的HEADER;
$http_host:匹配請求報文中的host首部;
$document_root:當前請求映射到的root配置;
$http_user_agent:從http請求的頭部信息中,獲取客戶端的訪問設備;
$status:響應報文返回的狀態碼;
$body_bytes_sent:從服務端響應給客戶端body信息大小;
$http_referer:http上一級頁面,防盜鏈、用戶行為;
$http_x_forwarded_for:http請求攜帶的http信息;
$time_local:nginx的時間;

7)Nginx的配置文件

Nginx主配置?件 /etc/nginx/nginx.conf 是?個純?本類型的?件,整個配置?件是以區塊的形式組織的。?般,每個區塊以?對?括號 {} 來表示開始與結束。

//nginx默認配置語法
user                                                                //設置nginx服務的系統使??戶
worker_processes                //?作進程, 配置和CPU個數保持?致
error_log                                           //錯誤?志, 后?接?的是路徑
pid                                                                 //Nginx服務啟動時的pid
//events事件模塊
events  {               //事件模塊                                              
                worker_connections      //每個worker進程?持的最?連接數
                use                                                                 //內核模型,select,poll,epoll
}
//?虛擬主機的配置或公共配置定義在http{}段內, server{}段外
http    {
...             
                //必須使?虛擬機配置站點,  每個虛擬機使??個server{}段
                'server'    {
                                listen  80;             //監聽端?, 默認80
                                server_name     localhost;  //提供服務的域名或主機名

                                //控制?站訪問路徑
                                'location'  /   {
                                                root            /usr/share/nginx/html;          //存放?站路徑
                                                index       index.html  index.htm;              //默認訪問???件
                                }

                                //指定錯誤代碼,   統?定義錯誤??,   錯誤代碼重定向到新的Locaiton
                                error_page          500 502 503 504     /50x.html;
                                'location'  =   /50x.html   {
                                                root            html;
                                }
                }
                ...
                //第?個虛擬主機配置
                'server'    {
                ...
                }
}

8)Nginx日志配置

//配置語法: 包括: error.log   access.log
Syntax: log_format  name    [escape=default|json]   string  ...;
Default:                log_format  combined    "...";
Context:                http
//Nginx默認配置
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

//Nginx?志變量
$remote_addr                //表示客戶端地址
$remote_user                //http客戶端請求nginx認證?戶名
$time_local                 //Nginx的時間
$request                                //Request請求?,   GET等?法、http協議版本
$status                                 //respoence返回狀態碼
$body_bytes_sent                //從服務端響應給客戶端body信息??
$http_referer                           //http上?級??,    防盜鏈、?戶?為分析
$http_user_agent                //http頭部信息, 客戶端訪問設備
$http_x_forwarded_for           //http請求攜帶的http信息

9)Nginx狀態監控

--with-http_stub_status_module 記錄 Nginx 客戶端基本訪問狀態信息!
具體配置如下:

    location    /mystatus   {
                stub_status on;
                access_log  off;
}
//Nginx_status概述
Active  connections:2               //Nginx當前活躍連接數
server  accepts handled requests
16                  16                  19
server表示Nginx處理接收握?總次數。
accepts表示Nginx處理接收總連接數。
請求丟失數=(握?數-連接數)可以看出,本次狀態顯示沒有丟失請求。
handled requests,表示總共處理了19次請求。
Reading                 Nginx讀取數據
Writing                 Nginx寫的情況
Waiting             Nginx開啟keep-alive?連接情況下,    既沒有讀也沒有寫,   建?連接情況

10)Nginx下載站點

Nginx默認是不允許列出整個目錄瀏覽下載的!

Syntax: autoindex   on  |   off;
Default:                
autoindex   off;
Context:                http,   server, location
//autoindex常?參數
autoindex_exact_size    off;
默認為on, 顯示出?件的確切??,單位是bytes。
修改為off,顯示出?件的?概??,單位是kB或者MB或者GB。
autoindex_localtime on;
默認為off,顯示的?件時間為GMT時間。
修改為on, 顯示的?件時間為?件的服務器時間。
charset utf-8,gbk;
默認中??錄亂碼,添加上解決亂碼。

配置目錄瀏覽功能

//開啟?錄瀏覽
        location /down {
                            root    /usr/share/nginx/html;
                            autoindex       on;
                            autoindex_localtime     on;
                            autoindex_exact_size    off;
        }

11)Nginx訪問限制

連接頻率限制:limit_conn_module
請求頻率限制:limit_req_module

http協議的連接與請求
HTTP是建?在TCP, 在完成HTTP請求需要先建?TCP三次握?(稱為TCP連接),在連接的基礎上在HTTP請求。
nginx是什么
HTTP協議的連接與請求

HTTP協議版本連接關系
HTTP1.0TCP不能復用
HTTP1.1順序性TCP復用
HTTP2.0多路復用TCP復用
HTTP請求建立在一次TCP連接基礎上;
一次TCP請求至少產生一次HTTP請求;
1)Nginx連接限制
//Nginx連接限制語法
Syntax:     limit_conn_zone key zone=name:size;
Default:    —
Context:    http
Syntax: limit_conn  zone    number;
Default:    —
Context:    http,   server, location
//具體配置如下:
http    {
//http段配置連接限制,  同?時刻只允許?個客戶端IP連接
limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
                ...
                server  {
                ...     
                                location    /   {
                                //同?時刻只允許?個客戶端IP連接
                                limit_conn  conn_zone   1;
                                }
//壓?測試
yum install -y  httpd-tools
ab  -n  50  -c  20      http://127.0.0.1/index.html
2)Nginx請求限制
//Nginx請求限制語法
Syntax:     limit_req_zone  key zone=name:size  rate=rate;
Default:    —
Context:    http
Syntax: limit_conn  zone    number  [burst=number]  [nodelay];
Default:    —
Context:    http,   server, location
//具體配置如下:
http    {
//http段配置請求限制,  rate限制速率,限制?秒鐘最多?個IP請求
limit_req_zone  $binary_remote_addr zone=req_zone:10m   rate=1r/s;
                ...
                server  {
                ...     
                                location    /   {
                                //1r/s只接收?個請求,其余請求拒絕處理并返回錯誤碼給客戶端
                                                limit_req   zone=req_zone;
                                //請求超過1r/s,剩下的將被延遲處理,請求數超過burst定義的數量,   多余的請求返回503
                                                #limit_req  zone=req_zone   burst=3 nodelay;
                                }
//壓?測試
yum install -y  httpd-tools
ab  -n  50  -c  20      http://127.0.0.1/index.html

連接請求沒有請求限制有效?
1)多個請求可以建?在?次的TCP連接之上, 那么我們對請求的精度限制,當然?對?個連接的限制會更加的有效;
2)因為同?時刻只允許?個連接請求進?;
3)但是同?時刻多個請求可以通過?個連接進?;
4)所以請求限制才是?較優的解決?案;

12)Nginx訪問控制

基于IP的訪問控制:http_access_module
基于?戶登陸認證:http_auth_basic_module
1)基于IP的訪問控制
//允許配置語法
Syntax: allow   address |   CIDR    |   unix:   |   all;
Default:        -
Context:    http,   server, location,   limit_except
//拒絕配置語法
Syntax: deny    address |   CIDR    |   unix:   |   all;
Default:        -
Context:    http,   server, location,   limit_except
//配置拒絕某?個IP,    其他全部允許
location    ~   ^/1.html    {
                root    /usr/share/nginx/html;
                index   index.html;
                deny    192.168.10.1;                    #注意檢查順序是從上往下
                allow   all;
}
//只允許某?個?段訪問,其它全部拒絕
location    /   {
                root            html;
                index       index.php   index.html  index.htm;
                allow           192.168.10.0/24;
                deny                all;
}

http_access_module局限性:
nginx是什么
下圖是使?http_x_forwarded_for記錄真實客戶端IP地址以及代理服務器IP
nginx是什么
解決方案:
1)采?HTTP頭信息控制訪問, 代理以及web服務開啟 http_x_forwarded_for;
2)結合geo模塊;
3)通過HTTP?動以變量傳遞;

2)基于用戶登錄認證
//配置語法
Syntax: auth_basic  string| off;
Default:    auth_basic  off;
Context: http,  server, location,   limit_except
//?戶密碼記錄配置?件
Syntax: auth_basic_user_file    file;
Default:    -
Context:    http,   server, location,   limit_except
//需要安裝依賴組件
[root@nginx ~]# yum install httpd-tools
[root@nginx ~]# htpasswd    -c  /etc/nginx/auth_conf    zhangsan     #新創建的用戶
[root@nginx ~]# htpasswd    -b  /etc/nginx/auth_conf    lisi 123456     #增加用戶需使用-b選項并指定密碼
//可在http,server,location下添加如下信息
auth_basic  "請輸入用戶名及密碼!";
auth_basic_user_file    /etc/nginx/auth_conf;

用戶認證局限性:
1)用戶信息依賴文件方式;
2)用戶管理文件過多,無法聯動;
3)操作管理機械,效率低下;

解決方法:
1)Nginx結合LUA實現高效認證;
2)Nginx結合nginx-auth-ldap模塊;

13)Nginx虛擬主機

所謂虛擬主機,在web服務器?是?個獨?的?站站點,這個站點對應獨?的域名(也可能是IP或端?),具有獨?的程序及資源?錄,可以獨?地對外提供服務供?戶訪問。

1)配置基于域名的虛擬主機
1.創建web站點?錄
[root@nginx conf]#  mkdir   /soft/code/{www,bbs}
[root@nginx conf]#  echo    "www"   >   /soft/code/www/index.html
[root@nginx conf]#  echo    "bbs"   >   /soft/code/bbs/index.html
2.配置虛擬主機
[root@nginx conf]#  cat conf.d/{www,bbs}.conf
server  {
                listen  80;
                server_name     www.nginx.com;
                root    /soft/code/www;
                ...
}
server  {
                ...
                listen 80;
                server_name     bbs.nginx.com;
                root    /soft/code/bbs;
}
2)配置不同端?訪問不同虛擬主機
//僅修改listen監聽端?即可,  但不能和系統端?發?沖突
server  {
                ...
                listen 8001;
                ...
}
server  {
                ...
                listen  8002;
                ...
}
3)配置虛擬主機別名

所謂虛擬主機別名,就是虛擬主機設置除了主域名以外的?個域名,實現?戶訪問的多個域名對應同?個虛擬主機?站的功能。
以www.nginx.com 域名的虛擬主機為例:為其增加?個別名nginx.com時,出現?站內容和訪問www.nginxi.com 是?樣的,具體配置如下:

//默認配置
[root@nginx ~]# vim /etc/nginx/nginx.conf
server  {
                listen 80;
                server_name www.nginx.com;
}
//別名配置
[root@LNMP  ~]# vim /etc/nginx/nginx.conf
server  {
                listen  80;
                server_name     www.nginx.com   nginx.com;
                ...
}
//使?Linux下curl測試結果
[root@LNMP  conf]#  curl    nginx.com
www.nginx.com
[root@LNMP  conf]#  curl    www.nginx.com
www.nginx.com
//訪問帶www和不帶www是?樣的, 除了別名實現也可以通過rewrite實現

————————本文到此結束,感謝閱讀————————————

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泾阳县| 都昌县| 垣曲县| 隆安县| 合川市| 固安县| 浪卡子县| 夏邑县| 临夏县| 大同县| 北京市| 山西省| 洪洞县| 报价| 富宁县| 黑山县| 岳阳市| 临泽县| 安义县| 内江市| 金平| 米林县| 达拉特旗| 广德县| 平遥县| 子长县| 龙里县| 威海市| 鄂尔多斯市| 中西区| 乐业县| 新兴县| 洪洞县| 泌阳县| 张北县| 铜川市| 交口县| 怀化市| 屯昌县| 南丰县| 开江县|