内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Nginx服務(wù)講解-創(chuàng)新互聯(lián)

Nginx服務(wù)講解 1、同步與異步講解

同步與異步:

創(chuàng)新互聯(lián)致力于網(wǎng)站建設(shè),網(wǎng)站制作設(shè)計,營銷網(wǎng)頁按需策劃設(shè)計,外貿(mào)網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),小程序制作,網(wǎng)站SEO優(yōu)化,網(wǎng)站設(shè)計制作案例豐富,是成都做網(wǎng)站公司和建站公司,歡迎咨詢。

同步與異步的重點在消息通知的方式上,也就是調(diào)用結(jié)果的通知方式不同。

**同步:**當一個同步調(diào)用發(fā)出去后,調(diào)用者要一直等待調(diào)用的結(jié)果通知后,才能進行后續(xù)的執(zhí)行。

**異步:**當一個異步調(diào)用發(fā)出去后,調(diào)用者不必一直等待調(diào)用結(jié)果的返回,異步調(diào)用,要想獲得結(jié)果,

一般有兩種方式:

  • 主動輪詢異步調(diào)用的結(jié)果;
  • 被調(diào)用方通過 callback(回調(diào)通知)來通知調(diào)用方調(diào)用結(jié)果。

阻塞與非阻塞的概念

阻塞與非阻塞的重點在于進/線程等待消息時候的行為,也就是在等待消息的時候,當前進/線程是掛起狀態(tài),還是非掛起狀態(tài)。

**阻塞:**調(diào)用在發(fā)出去后,在消息返回之前,當前進/線程會被掛起,直到有消息返回,當前進/線程才會被激活

**非阻塞:**調(diào)用在發(fā)出去后,不會阻塞當前進/線程,而會立即返回。

同步與異步,重點在于消息通知的方式;阻塞與非阻塞,重點在于等消息時候的行為。

四種組合方式

  • 同步阻塞:小明收到信息后,啥都不干,等快遞;
  • 同步非阻塞:小明收到信息后,邊刷微博,邊等著取快遞;
  • 異步阻塞:小明收到信息后,啥都不干,一直等著快遞員通知他取快遞;
  • 異步非阻塞:小明收到信息后,邊刷著微博,邊等快遞員通知他取快遞。

epoll模型

當連接有 I/O 事件產(chǎn)生的時候,epoll 就會去告訴進程哪個連接有 I/O 事件產(chǎn)生,然后進程就去處理這個事件。

Nginx 采用了異步非阻塞的方式工作。我們先來先了解一下 I/O 多路復(fù)用中的 epoll 模型。

2、nginx概述

Nginx的工作原理

  • Nginx 配置 use epoll 后,以異步非阻塞方式工作,能夠輕松處理百萬級的并發(fā)連接。
  • 處理過程:
    • 每進來一個 request,會有一個 worker 進程去處理。
    • 但不是全程的處理,處理到可能發(fā)生阻塞的地方。
    • 比如向后端服務(wù)器轉(zhuǎn)發(fā) request,并等待請求返回。
    • 那么,這個處理的 worker 不會這么傻等著,他會在發(fā)送完請求后,注冊一個事件:“如果后端服務(wù)器返回了,告訴我一聲,我再接著干”。于是他就休息去了。
    • 此時,如果再有新的 request 進來,他就可以很快再按這種方式處理。
    • 而一旦后端服務(wù)器返回了,就會觸發(fā)這個事件,worker 才會來接手,這個 request 才會接著往下走。
    • 通過這種快速處理,快速釋放請求的方式,達到同樣的配置可以處理更大并發(fā)量的目的。

nginx的概述:

  • Nginx (engine x) 是一個高性能的HTTP 和反向代理web 服務(wù)器,同時也提供了IMAP/POP3/SMTP服務(wù)。
  • Nginx 是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的 Rambler.ru 站點開發(fā)的,第一個公開版本0.1.0 發(fā)布于 2004 年 10 月 4 日
  • Nginx 是一款輕量級的 Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,在BSD-like 協(xié)議下發(fā)行。其特點是占有內(nèi)存少,并發(fā)能力強

Nginx工作模式

nginx 有兩種工作模式:master-worker 模式和單進程模式;在 master-worker 模式下,有一個 master 進程和至少一個的 worker 進程,單進程模式顧名思義只有一個進程。這兩種模式有各自的特點和適用場景。

master-worker模式:

  • nginx 啟動成功后,會有一個 master 進程和至少一個的 worker 進程。master 進程負責處理系統(tǒng)信號,加載配置,管理 worker 進程(啟動,殺死,監(jiān)控,發(fā)送消息/信號等)。worker 進程負責 處理具體的業(yè)務(wù)邏輯,也就是說,對外部來說,真正提供服務(wù)的是 worker 進程。生產(chǎn)環(huán)境下一般使用 這種模式,
  • 優(yōu)點:
    • 穩(wěn)定性高,只要還有 worker 進程存活,就能夠提供服務(wù),并且一個 worker 進程掛掉 master 進程會立即啟動一個新的 worker 進程,保證 worker 進程數(shù)量不變,降低服務(wù)中斷的概率。
    • 配合 linux 的 cpu 親和性配置,可以充分利用多核 cpu 的優(yōu)勢,提升性能
    • 處理信號/配置重新加載/升級時可以做到盡可能少或者不中斷服務(wù)(熱重啟)

單進程模式:

單進程模式下,nginx 啟動后只有一個進程,nginx 的所有工作都由這個進程負責。由于只有一個進程,因此可以很方便地利用 gdb 等工具進行調(diào)試。該模式不支持 nginx 的平滑升級功能,任何的信號處理都可能造成服務(wù)中斷,并且由于是單進程,進程掛掉后,在沒有外部監(jiān)控的情況下,無法重啟服務(wù)。因此,該模式一般只在開發(fā)階段和調(diào)試時使用,生產(chǎn)環(huán)境下不會使用。

3、nginx配置文件結(jié)構(gòu)
user www www;
#程序運行用戶和組

worker_processes auto;
#啟動進程,指定 nginx 啟動的工作進程數(shù)量,建議按照 cpu 數(shù)目來指定,一般等于 cpu 核心數(shù)目

error_log /home/wwwlogs/nginx_error.log crit;
#全局錯誤日志

pid /usr/local/nginx/logs/nginx.pid;
#主進程 PID 保存文件

worker_rlimit_nofile 51200;
#文件描述符數(shù)量

events 
	{use epoll; 
#使用 epoll 模型,對于 2.6 以上的內(nèi)核,建議使用 epoll 模型以提高性能
	worker_connections 51200;
#工作進程的大連接數(shù)量
	}

http{#網(wǎng)站優(yōu)化參數(shù)
	server {#具體的某一網(wǎng)站的配置信息
		listen 80; #監(jiān)聽端口
		root html; #網(wǎng)頁根目錄(/usr/local/nginx/html)
		server_name www.atguigu.com; #服務(wù)器域名
		index index.html; #默認加載頁面
		access_log logs/access.log; #訪問日志保存位置
		......;

		location (.*)\.php$ {#用正則匹配具體的訪問對象;
				}
		location {#跳轉(zhuǎn)等規(guī)則;
				}
		}					#這個括號是到server級
	}				#這個對應(yīng)的是http這個括號
4、Nginx的實驗

注意事項:

  • 注意配置文件中的結(jié)尾都有;作為結(jié)束;這個一定要切記
  • 每次實驗修改完配置文件后需要重啟nginx才會生效;

實驗1:nginx的狀態(tài)統(tǒng)計

  • 安裝nginx時候,把–with-http_stub_status_module模塊開啟
  • 修改nginx的配置文件–>寫入要訪問的server標簽當中
#修改配置文件
[root@Node3 ~]# vim /usr/local/nginx/conf/nginx.conf
.............
	#在server中找個位置寫入這個
        location /stub_status {stub_status on;
                access_log off;
        }
#重啟nginx
[root@Node3 ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@Node3 ~]# nginx -s reload
[root@Node3 ~]# 

#瀏覽器訪問
http://192.168.75.133/stub_status


#輸出的結(jié)果詳情:
"Active connections"表示當前的活動連接數(shù);
"server accepts handled requests"表示已經(jīng)處理的連接信息
三個數(shù)字依次表示已處理的連接數(shù)、成功的 TCP 握手次數(shù)、已處理的請求數(shù)

實驗2:目錄保護

  • 原理和 apache 的目錄保護原理一樣(利用上一個實驗接著完成)
  • 在狀態(tài)統(tǒng)計的 location 中添加:
    • auth_basic “Welcome to nginx_status!”;
    • auth_basic_user_file /usr/local/nginx/html/htpasswd.nginx;
  • 使用 http 的命令 htpasswd 進行用戶密碼文件的創(chuàng)建(生成在上面指定的位置)
    • # htpasswd -c /usr/local/nginx/html/htpasswd.nginx user
  • 重啟 nginx 并再次訪問統(tǒng)計頁面
[root@Node3 ~]# vim /usr/local/nginx/conf/nginx.conf
...............
	#添加兩行
        location /stub_status {stub_status on;
                access_log off;
                auth_basic "Weclome to nginx_status";
                auth_basic_user_file /usr/local/nginx/html/htpasswd.nginx;
        }

#重啟nginx


#創(chuàng)建密碼文件
	#我們要提取這個htpasswd命令
[root@Node3 ~]# yum -y install httpd
[root@Node3 ~]# htpasswd -c /usr/local/nginx/html/htpasswd.nginx zhangsan
New password: 
Re-type new password: 
Adding password for user zhangsan

#然后瀏覽器驗證
http://192.168.75.133/stub_status
	#輸入:zhangsan
	#輸入密碼:

實驗3:基于ip的身份驗證(訪問控制)

  • 接著上一個實驗完成操作
  • 在狀態(tài)統(tǒng)計的 location 中添加:
allow 192.168.75.1
deny 192.168.75.0/24
僅允許 192.168.75.1 訪問服務(wù)器
#修改配置文件
[root@Node3 ~]# vim /usr/local/nginx/conf/nginx.conf
.....................
        location /stub_status {allow 192.168.75.1;
                deny 192.168.75.0/24;
                stub_status on;
                access_log off;
                auth_basic "Weclome to nginx_status";
                auth_basic_user_file /usr/local/nginx/html/htpasswd.nginx;
        }

#重啟驗證
[root@Node3 ~]# nginx -s reload

#瀏覽器訪問
http://192.168.75.133/stub_status
[root@Node3 ~]# curl 192.168.75.133/stub_status

實驗4:nginx的虛擬主機(基于域名)

  • 提前準備好兩個網(wǎng)站的域名,并且規(guī)劃好兩個網(wǎng)站網(wǎng)頁存放的目錄
  • 在 Nginx 主配置文件中并列編寫兩個 server 標簽,并分別寫好各自信息
#準備好兩個網(wǎng)站的頁面
[root@Node3 html]# mkdir blog bbs
[root@Node3 html]# vim blog/index.html
THis is blog.liangjiawei.net
[root@Node3 html]# vim bbs/index.html
This is BBS.LIANGJAIWEI.NET

#修改一下hosts文件-->識別兩個網(wǎng)站
[root@Node3 html]# vim /etc/hosts
192.168.75.133 blog.liangjiawei.net
192.168.75.133 bbs.liangjiawei.net

#修改nginx的配置文件
[root@Node3 nginx]# vim conf/nginx.conf
............
		#把日志文件定義打卡
    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  logs/access.log  main;
...................

	#添加下面的內(nèi)容
server {listen 80;
        server_name blog.liangjiawei.net;
        index index.html index.htm index.php;
        root html/blog;
        access_log logs/blog-access.log main;
}
server {listen 80;
        server_name bbs.liangjiawei.net;
        index index.html index.htm index.php;
        root html/bbs;
        access_log logs/blog-access.log main;
}

#重啟nginx
[root@Node3 nginx]# nginx -s reload

	#然后驗證
[root@Node3 nginx]# curl blog.liangjiawei.net
THis is blog.liangjiawei.net
[root@Node3 nginx]# curl bbs.liangjiawei.net
This is BBS.LIANGJAIWEI.NET

實驗5:nginx的發(fā)現(xiàn)代理

代理與反向代理

  • 代理:找別人代替你去完成一件你完不成的事(代購),代理的對象是客戶端
  • 反向代理:替廠家賣東西的人就叫反向代理(煙酒代理) ,代理的對象是服務(wù)器端

實驗的規(guī)劃

  • 在另外一臺機器上安裝 apache,啟動并填寫測試頁面
  • 在 nginx 服務(wù)器的配置文件中添加(寫在某一個網(wǎng)站的 server 標簽內(nèi))
location / {	proxy_pass http://192.168.75.134:80; #此處填寫 apache 服務(wù)器的 IP 地址
}
  • 重啟 nginx,并使用客戶端訪問測試
#開啟另外一臺服務(wù)器,并且安裝個apache
[root@Node4 ~]# yum -y install httpd
[root@localhost ~]# service httpd start
[root@localhost ~]# vim /var/www/html/index.html
this is Centos6


#nginx服務(wù)器配置,修改配置文件
[root@Node3 nginx]# vim conf/nginx.conf
............
	#添加這個表格,把之前的/都注釋掉
        location / {proxy_pass http://192.168.75.110:80;
        }
       # location / {   #     root   html;
       #     index  index.php index.html index.htm;
       # }

#重啟
[root@Node3 nginx]# nginx -s reload

#然后直接訪問nginx服務(wù)器-->瀏覽器訪問
http://192.168.75.133/

實驗6:負載調(diào)度(負載均衡)

負載均衡(Load Balance)其意思就是將任務(wù)分攤到多個操作單元上進行執(zhí)行,例如 Web 服務(wù)器、FTP 服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等,從而共同完成工作任務(wù)。

  • 使用默認的 rr 輪訓(xùn)算法,修改 nginx 配置文件
upstream bbs {#此標簽在 server 標簽前添加
	server 192.168.75.110:80;
	server 192.168.75.130:80;
	}
server {........;
	#修改自帶的 location / 的標簽,將原內(nèi)容刪除,添加下列兩項
	location / {proxy_pass http://bbs; #添加反向代理,代理地址填寫 upstream 聲明的名字
		proxy_set_header Host $host; #重寫請求頭部,保證網(wǎng)站所有頁面都可訪問成功
		}
	}
  • 開啟并設(shè)置兩臺75.110和75.130 的主機
    • 安裝 apache 并設(shè)置不同的 index.html 頁面內(nèi)容(設(shè)置不同頁面是為了看實驗效果)
  • 重啟 nginx,并使用客戶端訪問測試

拓展補充:rr 算法實現(xiàn)加權(quán)輪詢

upstream bbs {server 192.168.88.100:80 weight=1;
		server 192.168.88.200:80 weight=2;
	}

實驗過程

#再開一臺服務(wù)器;然后安裝httpd
[root@node0 ~]# yum -y install httpd
[root@node0 ~]# systemctl start httpd
[root@node0 ~]# vim /var/www/html/index.html
This is 130


#nginx服務(wù)器修改配置文件
[root@Node3 nginx]# vim conf/nginx.conf
........
	#在server標簽上面添加
upstream LL {server 192.168.75.110:80;
        server 192.168.75.130:80;
        }
..............
	#然后在location /這個標簽上修改
        location / {proxy_pass http://LL;
                proxy_set_header Host $host;
        }

#重啟nginx
[root@Node3 nginx]# nginx -t 
[root@Node3 nginx]# nginx  -s reload

#直接訪問本機-->可以看到輪詢了
[root@Node3 nginx]# curl 192.168.75.133
This is 130
[root@Node3 nginx]# curl 192.168.75.133
this is Centos6
[root@Node3 nginx]# curl 192.168.75.133
This is 130

實驗7:nginx實現(xiàn)https{證書+rewrite}

  • 安裝 nginx 時,需要將–with-http_ssl_module 模塊開啟
  • 在對應(yīng)要進行加密的 server 標簽中添加以下內(nèi)容開啟 SSL
server {.......;
	ssl on;
 	ssl_certificate /usr/local/nginx/conf/ssl/liangjiawei.crt;
	ssl_certificate_key /usr/local/nginx/conf/ssl/liangjiawei.key;
 	ssl_session_timeout 5m;
 	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 	ssl_prefer_server_ciphers on;
 	ssl_ciphers 
"EECDH+CHACHA20:EECDH+CHACHA20draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
}
  • 生成證書和秘鑰文件
    • 注意:在實驗環(huán)境中可以用命令生成測試,在生產(chǎn)環(huán)境中必須要在 https 證書廠商注冊
# openssl genrsa -out atguigu.key 1024 
建立服務(wù)器私鑰,生成 RSA 密鑰
# openssl req -new -key atguigu.key -out atguigu.csr 
需要依次輸入國家,地區(qū),組織,email。最重要的是有一個 common name,可以寫你的名字或者域名。如果為了 https 申請,這個必須和域名吻合,否則會引發(fā)瀏覽器警報。生成的 csr 文件交給 CA 簽名后形成服務(wù)端自己的證書
# openssl x509 -req -days 365 -sha256 -in atguigu.csr -signkey atguigu.key -out atguigu.crt

生成簽字證書
# cp atguigu.crt /usr/local/nginx/conf/ssl/atguigu.crt
# cp atguigu.key /usr/local/nginx/conf/ssl/atguigu.key
將私鑰和證書復(fù)制到指定位置
  • 設(shè)置 http 自動跳轉(zhuǎn) https 功能
    • 原有的 server 標簽修改監(jiān)聽端口
server {..........;
		listen 443;
	}
	
新增以下 server 標簽(利用虛擬主機+rewrite 的功能)
server{listen 80;
		server_name blog.liangjiawei.net;
		rewrite ^(.*)$ https://blog.liangjiawei.net permanent;
		root html;
		index index.html index.htm;
}
  • 重啟 nginx,并測試

實驗過程

#修改nginx的配置文件
[root@Node3 nginx]# vim conf/nginx.conf
	#找到之前做的blog的server標簽,添加進去
.............
server {listen 80;
        server_name blog.liangjiawei.net;
        index index.html index.htm index.php;
        root html/blog;
        access_log logs/blog-access.log main;
        ssl on;
        ssl_certificate /usr/local/nginx/conf/ssl/liangjiawei.crt;
        ssl_certificate_key /usr/local/nginx/conf/ssl/liangjiawei.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3
DES:RSA+3DES:!MD5";
}

#生成證書和密鑰文件
[root@Node3 nginx]# cd conf/
[root@Node3 conf]# mkdir ssl
[root@Node3 conf]# cd ssl

[root@Node3 ssl]# openssl genrsa -out liangjiawei.key 1024
Generating RSA private key, 1024 bit long modulus
............................................++++++
...++++++
e is 65537 (0x10001)
[root@Node3 ssl]# openssl req -new -key liangjiawei.key -out liangjiawei.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:gd
Locality Name (eg, city) [Default City]:gz
Organization Name (eg, company) [Default Company Ltd]:ns
Organizational Unit Name (eg, section) []:zjj
Common Name (eg, your name or your server's hostname) []:ja
Email Address []:liangjaiwei@123

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

[root@Node3 ssl]# openssl x509 -req -days 365 -sha256 -in liangjiawei.csr -signkey liangjiawei.key -out liangjiawei.crt
Signature ok
subject=/C=cn/ST=gd/L=gz/O=ns/OU=zjj/CN=ja/emailAddress=liangjaiwei@123
Getting Private key

#再回到nginx上調(diào)整一下端口
[root@Node3 ssl]# cd ..
[root@Node3 conf]# vim nginx.conf
.......
	#原來加密的server標簽要改為443
server {listen 443;
        server_name blog.liangjiawei.net;
        index index.html index.htm index.php;
        root html/blog;
        access_log logs/blog-access.log main;
        ssl on;
        ssl_certificate /usr/local/nginx/conf/ssl/liangjiawei.crt;
        ssl_certificate_key /usr/local/nginx/conf/ssl/liangjiawei.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3
DES:RSA+3DES:!MD5";
}
	#然后新添加一個標簽
server{listen 80;
        server_name blog.liangjiawei.net;
        rewrite ^(.*)$ https://blog.liangjiawei.net permanent;
        root html;
        index index.html index.htm;
}

#重啟驗證
[root@Node3 conf]# nginx -s reload

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

標題名稱:Nginx服務(wù)講解-創(chuàng)新互聯(lián)
本文路徑:http://m.rwnh.cn/article14/ehdde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)用戶體驗、靜態(tài)網(wǎng)站、網(wǎng)站內(nèi)鏈、網(wǎng)站建設(shè)、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
苏州市| 德安县| 久治县| 化州市| 忻州市| 上杭县| 泽普县| 北京市| 永春县| 六盘水市| 隆子县| 湾仔区| 甘洛县| 保靖县| 含山县| 吉木萨尔县| 奉化市| 墨竹工卡县| 襄汾县| 广南县| 株洲市| 湛江市| 江山市| 泰安市| 林周县| 阿荣旗| 沙田区| 安顺市| 四会市| 托里县| 册亨县| 壶关县| 新津县| 启东市| 宁波市| 库尔勒市| 革吉县| 株洲市| 枞阳县| 洛南县| 克山县|