中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

網(wǎng)站建設(shè)屬于前端還是后臺(tái)今日小說(shuō)百度搜索風(fēng)云榜

網(wǎng)站建設(shè)屬于前端還是后臺(tái),今日小說(shuō)百度搜索風(fēng)云榜,保定建設(shè)信息網(wǎng)站,北京市建設(shè)信息網(wǎng)一、nginx介紹Nginx(“engine x”)是一款是由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開(kāi)發(fā)高性能的 Web和 反向代理服務(wù)器,也是一個(gè) IMAP/POP3/SMTP 代理服務(wù)器。和apache一樣,都是web服務(wù)器軟件,因?yàn)槠湫阅軆?yōu)異,所以被廣大運(yùn)維喜歡。又因…

一、nginx介紹

Nginx(“engine x”)是一款是由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開(kāi)發(fā)高性能的 Web和 反向代理服務(wù)器,也是一個(gè) IMAP/POP3/SMTP 代理服務(wù)器。和apache一樣,都是web服務(wù)器軟件,因?yàn)槠湫阅軆?yōu)異,所以被廣大運(yùn)維喜歡。又因?yàn)閚ginx是一個(gè)輕量級(jí)的web服務(wù)器,相比apache來(lái)說(shuō)資源消耗更低。

nginx官網(wǎng):http://nginx.org/

  • nginx與apache的比較,Nginx適合處理靜態(tài)頁(yè)面,apache處理動(dòng)態(tài)頁(yè)面

Web服務(wù)器

Nginx

Apache

反向代理

非常好

Rewrite規(guī)則

非常好

系統(tǒng)壓力比較

很小

內(nèi)存消耗

非常小

很大

靜態(tài)文件處理

非常好

一般

穩(wěn)定性

非常好

安全性

一般

技術(shù)資料

很少

非常多

虛擬主機(jī)

支持

支持

熱部署

支持

不支持

FastCGI

二、nginx部署

  1. 安裝部署

  • 下載nginx源碼包

wget http://nginx.org/download/nginx-1.19.3.tar.gz -P /usr/src
  • 安裝依賴包

yum -y install gcc pcre-devel zlib-devel openssl-dev
- gcc: 源碼編譯工具
- pcre-devel: nginx url_rewrite 功能提供包,支持nginx的正則表達(dá)
- zlib-devel: nginx 壓縮功能提供包
- openssl-dev:安全網(wǎng)絡(luò)功能
  • 解壓nginx源碼包

tar xf nginx-1.19.3.tar.gz 
cd nginx-1.19.3/
  • 配置nginx源碼

./configure --prefix=/usr/local/nginx
配置目的:
(1)檢查環(huán)境是否滿足安裝條件,依賴解決
(2)指定安裝方式,配置文件、命令文、各種文件放哪里
(3)開(kāi)啟模塊功能【內(nèi)置模塊 三方模塊】
(4)指定軟件安裝在那里
  • 編繹源碼

make
  • 安裝

make install
  • 相關(guān)目錄

—安裝目錄:/usr/local/nginx/
—主配置文件:conf/nginx.conf
—網(wǎng)頁(yè)目錄:html
—日志文件:logs
—啟動(dòng)腳本:sbin/nginx
—模塊目錄:modules
—進(jìn)程目錄:pid
  • nginx啟動(dòng)管理

配置文件測(cè)試:/usr/local/nginx/sbin/nginx -t
啟動(dòng):/usr/local/nginx/sbin/nginx
停止:/usr/local/nginx/sbin/nginx -s stop
關(guān)閉:/usr/local/nginx/sbin/nginx -s quit 【優(yōu)雅關(guān)閉,在退出前完成已經(jīng)接受的連接請(qǐng)求】
關(guān)閉:killall -s QUIT nginx
加載:/usr/local/nginx/sbin/nginx -s reload 【重新加載配置文件】

2.啟動(dòng)測(cè)試

nginx安裝完畢,接下來(lái)就可以啟動(dòng)nginx了,nginx啟動(dòng)后如何測(cè)試nginx的啟動(dòng)狀態(tài)呢?可以通過(guò)以下三種方式去測(cè)試,這個(gè)可以根據(jù)自己的習(xí)慣選擇一種測(cè)試就行了。

  • 使用netstat命令查看啟動(dòng)端口

netstat -ntpl
  • 使用losf命令查看啟動(dòng)端口

lsof -i :80
  • 使用文本瀏覽器訪問(wèn)nignx默認(rèn)網(wǎng)站

elinks http://192.168.65.21

3.編輯服務(wù)腳本

vim /usr/lib/systemd/system/nginx.service [Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true[Install]
WantedBy=multi-user.target
  • 重新加載系統(tǒng)服務(wù)

systemctl daemon-reload 
  • 啟動(dòng)服務(wù)

systemctl start nginx
  • 開(kāi)機(jī)自啟

systemctl enable nginx.service

三、nginx配置

  1. 最基本配置

worker_processes  1;                       # 默認(rèn)為1,表示開(kāi)戶一個(gè)業(yè)務(wù)進(jìn)程                    
events {                                   # 事件驅(qū)動(dòng)模塊worker_connections  1024;              # 單個(gè)業(yè)務(wù)進(jìn)程可接受連接數(shù)
}
http {include       mime.types;              # 引入http mime類型default_type  application/octet-stream;# 如果mime類型沒(méi)匹配上,默認(rèn)使用二進(jìn)制流的方式傳輸sendfile        on;                    # 使用linux的sendfile(socket,file,len)高效網(wǎng)絡(luò)傳輸,也就是數(shù)據(jù)0拷貝。未開(kāi)戶senfilekeepalive_timeout  65;                 # 保持連接配置server {                               # 虛擬主機(jī) listen       80;                   # 監(jiān)聽(tīng)的端口號(hào)server_name  localhost;            # 主機(jī)名、域名location / {                       # location是匹配用戶輸入的路徑,urlroot   html;                   # 默認(rèn)存放網(wǎng)頁(yè)的目錄路徑index  index.html index.htm;   # 默認(rèn)網(wǎng)頁(yè)}error_page   500 502 503 504  /50x.html;    # 發(fā)生錯(cuò)誤展示的頁(yè)面location = /50x.html {root   html;}}
}

nginx默認(rèn)配置文件大概分為幾個(gè)區(qū)域:

  1. 沒(méi)有被 {} 包裹的部分為全局配置:

—如worker_processes 1; 設(shè)置工作進(jìn)程(子進(jìn)程)數(shù)為 1

  1. events {} 為 nginx 連接配置的模塊:

—如worker_connections 1024; 設(shè)置每一個(gè)子進(jìn)程最大允許連 接 1024 個(gè)連接

  1. http {} 為 nginxhttp 核心配置模塊

—而 http {} 中還有 server {},以及 server {} 中的 location {}

  1. server {} 為虛擬主機(jī)配置模塊,包括監(jiān)聽(tīng)端口、監(jiān)聽(tīng)域名、IP等內(nèi)容

—在一個(gè) Nginx 的配置文件里面,我們是可以指定多個(gè) Sever 區(qū)塊的配置的。

  1. location {} URI 匹配

—細(xì)分到針對(duì)不同的路徑和請(qǐng)求而進(jìn)行的配置。一個(gè)站點(diǎn)中 URI 通常會(huì)很多,在 Location 區(qū)塊設(shè)置,可以寫多個(gè) Location 的配置的。

  1. 虛擬主機(jī)

原本一臺(tái)服務(wù)器只能對(duì)應(yīng)一個(gè)站點(diǎn),通過(guò)虛擬主機(jī)技術(shù)可以虛擬化成多個(gè)站點(diǎn)同時(shí)對(duì)外提供服務(wù)。

2.1、域名解析、端口監(jiān)聽(tīng)

  • 基于域名的虛擬主機(jī),實(shí)現(xiàn)兩個(gè)基于域名的虛擬主機(jī),可以在server_name匹配多個(gè)域名

  • 基于端口的虛擬主機(jī),實(shí)現(xiàn)兩個(gè)基于端口的虛擬主機(jī),可以listen監(jiān)聽(tīng)多個(gè)端口

  • http框架是定義與nginx網(wǎng)站相關(guān)的配置

server:虛擬主機(jī)
listen:端口
server_name:主機(jī),可以填I(lǐng)P或域名
location:網(wǎng)頁(yè)地址
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {                        # 第一個(gè)虛擬主機(jī)             listen       80;            # 端口      server_name  www.s.com;     # 主機(jī)、域名location / {root   /www/www;index  index.html index.htm;}}server {                       # 第二個(gè)虛擬主機(jī)listen       88;           # 端口server_name  vod.s.com;    # 主機(jī)、域名location / {root   /www/vod;index  index.html index.htm;}}
  • ServerName匹配規(guī)則

ServerName匹配是從上往下的順序,前面匹配成功了,就不會(huì)向下匹配了。

  • 完整匹配:可以在同一個(gè)servername中匹配多個(gè)域名

server_name  vod.s.com vod1.s.com;
  • 通配符匹配

server_name  *.s.com;   # *通配符匹配,*.s.com域名匹配同一個(gè)網(wǎng)頁(yè)
  • 通配符結(jié)束匹配

server_name  vod.*;   # *通配符匹配,不管vod.*域名訪問(wèn)都是同一個(gè)網(wǎng)頁(yè)
  • 正則匹配:比較適用于二級(jí)域名系統(tǒng),符合哪些規(guī)則就進(jìn)入到對(duì)應(yīng)的server里面進(jìn)行轉(zhuǎn)發(fā)。

server_name  ~^[0-9]+\.s\.com$;

2.2、location

相同類型的表達(dá)式,字符串長(zhǎng)的會(huì)優(yōu)先匹配

  • 按優(yōu)先級(jí)排列

① = 類型
② ^~類型表達(dá)式
③ 正則表達(dá)式 (~和 ~*) 類型
④常規(guī)字符串匹配類型,按前綴匹配
⑤ 通用匹配(/),如果沒(méi)有其他匹配,任何請(qǐng)求都會(huì)匹配到
  • location優(yōu)先級(jí)規(guī)則

①匹配某個(gè)具體文件:(location=完整路徑) >(location ~ 完整路徑) > (location ~ *完整路徑) >(location~完整路徑) > (location完整路徑) > (location /)
②用目錄做匹配訪問(wèn)某個(gè)文件:(location=目錄) >(location ^ ~ 目錄/) > (location ~ 目錄 ) > (location~*目錄) > (location目錄) > (location /)
  1. 反向代理

  • 正向代理:搭建一個(gè)屬于自己的代理服務(wù)器

①用戶發(fā)送請(qǐng)求到自己的代理服務(wù)器
②自己的代理服務(wù)器發(fā)送請(qǐng)求到服務(wù)器
③服務(wù)器將數(shù)據(jù)返回到自己的代理服務(wù)器
④自己的代理服務(wù)器再將數(shù)據(jù)返回給用戶
  • 反向代理:七層代理,調(diào)度作用,該功能可以通過(guò)組建后臺(tái)集群提高網(wǎng)站性能

①用戶發(fā)送請(qǐng)求到服務(wù)器(訪問(wèn)的其實(shí)是反向代理服務(wù)器,但用戶不知道)
②反向代理服務(wù)器發(fā)送請(qǐng)求到真正的服務(wù)器
③真正的服務(wù)器將數(shù)據(jù)返回給反向代理服務(wù)器
④反向代理服務(wù)器再將數(shù)據(jù)返回給用戶

3.1、代理服務(wù)器

proxy_pass:location模塊內(nèi)配置,和網(wǎng)頁(yè)目錄同級(jí)別,定義的服務(wù)器列表,可以填寫域名、IP。不支持代理https服務(wù)器

location / {proxy_pass http://www.baidu.com;        # 請(qǐng)求轉(zhuǎn)向baidu,proxy_pass和root目錄二選一 
}
  • 集群代理

upstream:http模塊內(nèi)配置,模塊內(nèi)的server是服務(wù)器列表,和server模塊同級(jí)別。

proxy_pass:調(diào)用集群,在location模塊內(nèi)配置,和upstream集群名保持一致。

    upstream jiangying {                 # 創(chuàng)建集群,定義代理的服務(wù)器列表server 192.168.65.22:80;             # 是IP、端口、狀態(tài)的配置server 192.168.65.10:80;}server {listen       80;server_name  localhost;location / {proxy_pass http://jiangying;      # 請(qǐng)求轉(zhuǎn)向到j(luò)iangying定義的服務(wù)器列表          }error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}

3.2、UpStream

3.2.1、上游服務(wù)器

  • UpStream工作流程:proxy_pass 向上游服務(wù)器請(qǐng)求數(shù)據(jù)共有6個(gè)階段

- 初始化
- 與上游服務(wù)器建立連接
- 向上游服務(wù)器發(fā)送請(qǐng)求
- 處理響應(yīng)頭
- 處理響應(yīng)體
- 結(jié)束
  • 配置說(shuō)明

參 數(shù)

作 用

案 例

set_header

設(shè)置header

proxy_connect_timeout

與上游服務(wù)器連接超時(shí)時(shí)間、快速失敗

proxy_send_timeout

定義nginx向后端服務(wù)發(fā)送請(qǐng)求的間隔時(shí)間(不是耗時(shí))。默認(rèn)60秒,超過(guò)這個(gè)時(shí)間會(huì)關(guān)閉連接

proxy_read_timeout

后端服務(wù)給nginx響應(yīng)的時(shí)間,規(guī)定時(shí)間內(nèi)后端服務(wù)沒(méi)有給nginx響應(yīng),連接會(huì)被關(guān)閉,nginx返回504 Gateway Time-out。默認(rèn)60秒

proxy_requset_buffering

緩沖區(qū),是否完全讀到請(qǐng)求體之后再向上游服務(wù)器發(fā)送請(qǐng)求,on打開(kāi),off關(guān)閉

proxy_buffering

是否緩沖上游服務(wù)器數(shù)據(jù),on打開(kāi),off關(guān)閉

proxy_buffers

緩沖區(qū)大小 32個(gè)128k大小內(nèi)存緩沖塊

proxy_buffers 32 128k;

proxy_buffer_size

header緩沖區(qū)大小

proxy_buffer_size 64k;

proxy_busy_buffers_size

proxy_max_temp_file_size

臨時(shí)文件最大值

proxy_max_temp_file_size 1024m;

proxy_temp_file_write_size

當(dāng)啟用從代理服務(wù)器到臨時(shí)文件的響應(yīng)的緩沖時(shí),一次限制寫入臨時(shí)文件的數(shù)據(jù)的大小。默認(rèn)情況下,大小由proxy_buffer_size和proxy_buffers指令設(shè)置的兩個(gè)緩沖區(qū)限制。臨時(shí)文件的最大大小由proxy_max_temp_file_size指令設(shè)置。

3.2.1、負(fù)載均衡策略

  • 輪詢

最基本的配置方法,它是upstream模塊默認(rèn)的負(fù)載均衡默認(rèn)策略。每個(gè)請(qǐng)求會(huì)按時(shí)間順序逐一分配到不同的后端服務(wù)器。在輪詢中,如果服務(wù)器down掉了,會(huì)自動(dòng)剔除該服務(wù)器。此策略適合服務(wù)器配置相當(dāng),無(wú)狀態(tài)且短平快的服務(wù)使用。

  • weight:權(quán)重方式,在輪詢策略的基礎(chǔ)上指定輪詢的幾率。權(quán)重越高分配到需要處理的請(qǐng)求越多,此策略可以與least_conn和ip_hash結(jié)合使用,適合服務(wù)器的硬件配置差別比較大的情況。

upstream jiangying {
server 192.168.65.22:80 weight=8;        
server 192.168.65.10:80 weight=2;
}
  • down:標(biāo)記服務(wù)器永久停機(jī)了。

upstream jiangying {
server 192.168.65.22:80 down;
server 192.168.65.10:80;
}
  • backup:標(biāo)記該服務(wù)器為備用服務(wù)器。當(dāng)主服務(wù)器停止時(shí),請(qǐng)求會(huì)被發(fā)送到它這里。

upstream jiangying {
server 192.168.65.22:80;
server 192.168.65.10:80 backup;
}
  • 健康檢查

max_fails:允許失敗的次數(shù)

fail_timeout:與max_fails結(jié)合使用。檢查失敗后,需要等30s,再重新連接

fail_time:失敗后,暫停服務(wù)的時(shí)間,服務(wù)器會(huì)被認(rèn)為停機(jī)的時(shí)間長(zhǎng)度,默認(rèn)為10s。

upstream jiangying {
server 192.168.65.22:80;
server 192.168.65.10:80 max_fails=2 fail_timeout=30;
}

3.2.3、least_conn

  最少連接訪問(wèn)。輪詢算法是把請(qǐng)求平均的轉(zhuǎn)發(fā)給各個(gè)后端,使它們的負(fù)載大致相同;但是,有些請(qǐng)求占用的時(shí)間很長(zhǎng),會(huì)導(dǎo)致其所在的后端負(fù)載較高。這種情況下,least_conn這種方式就可以達(dá)到更好的負(fù)載均衡效果。此負(fù)載均衡策略適合請(qǐng)求處理時(shí)間長(zhǎng)短不一造成服務(wù)器過(guò)載的情況。

    upstream jiangying {least_conn;server 192.168.65.22:80;server 192.168.65.10:80;}

3.2.4、第三方策略

  第三方的負(fù)載均衡策略的實(shí)現(xiàn)需要安裝第三方插件。

  • fair:根據(jù)后端服務(wù)器響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。

  • url_hash:按訪問(wèn)url的hash結(jié)果來(lái)分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,要配合緩存命中來(lái)使用。同一個(gè)資源多次請(qǐng)求,可能會(huì)到達(dá)不同的服務(wù)器上,導(dǎo)致不必要的多次下載,緩存命中率不高,以及一些資源時(shí)間的浪費(fèi)。而使用url_hash,可以使得同一個(gè)url(也就是同一個(gè)資源請(qǐng)求)會(huì)到達(dá)同一臺(tái)服務(wù)器,一旦緩存住了資源,再此收到請(qǐng)求,就可以從緩存中讀取?!?/span>

總結(jié):以上便是6種負(fù)載均衡策略的實(shí)現(xiàn)方式,其中除了輪詢和輪詢權(quán)重外,都是Nginx根據(jù)不同的算法實(shí)現(xiàn)的。在實(shí)際運(yùn)用中,需要根據(jù)不同的場(chǎng)景選擇性運(yùn)用,大都是多種策略結(jié)合使用以達(dá)到實(shí)際需求。

3.4、四層代理

其他業(yè)務(wù)集群:nginx四層代理(TCP/UDP高度),nginx從1.9版本才開(kāi)始支持該功能

  • 模塊查詢

./configure --help
  • 配置四層代理模塊--with-stream

./configure --with-stream         
make && make install
  • http之外配置集群

stream {                   # 四層代理模塊
upstream backend {         # 創(chuàng)建集群
server 192.168.65.22:22;
server 192.168.65.10:22;
}server {  
listen 12345;
proxy_pass backend;       # 調(diào)用集群
}
}
  • 驗(yàn)證:遠(yuǎn)程業(yè)務(wù),可以輪詢登錄到后方集群的服務(wù)器

ssh 192.168.65.21 -p 12345
  1. 動(dòng)靜分離

因nginx的靜態(tài)處理能力很強(qiáng),但動(dòng)態(tài)處理能力不足,所以在企業(yè)中常采用動(dòng)靜分離技術(shù),針對(duì)PHP,將靜態(tài)頁(yè)面交給nginx處理,動(dòng)態(tài)頁(yè)面交給PHP-FPM模塊或Apache處理。在nginx的配置文件中,是通過(guò)location配置段配合正則匹配來(lái)實(shí)現(xiàn)靜態(tài)與動(dòng)態(tài)頁(yè)面的不同處理方式。在企業(yè)信息化應(yīng)用環(huán)境中,服務(wù)器的安全性和響應(yīng)速度需要根據(jù)實(shí)際情況進(jìn)行相應(yīng)參數(shù)配置,以達(dá)到最優(yōu)的用戶體驗(yàn)。默認(rèn)的nginx安裝參數(shù)只能供最基本的服務(wù),還需要調(diào)整如網(wǎng)頁(yè)緩存時(shí)間,連接超時(shí),網(wǎng)頁(yè)壓縮等相應(yīng)參數(shù),餐能發(fā)揮出服務(wù)器的最大作用。

4.1、動(dòng)靜分離原理

  • Nginx動(dòng)靜分離概述

Nginx的靜態(tài)處理能力很強(qiáng),但是動(dòng)態(tài)處理能力不足,因此,在企業(yè)中常用動(dòng)靜分離技術(shù)
針對(duì)PHP的動(dòng)靜分離
靜態(tài)頁(yè)面交給 Nginx處理
動(dòng)態(tài)頁(yè)面交給 PHP-FPM模塊或 Apache處理
在 Nginx的配置中,是通過(guò) ocation配置段配合正則匹配實(shí)現(xiàn)靜態(tài)與動(dòng)態(tài)頁(yè)面的不同處理方式
  • Nginx實(shí)現(xiàn)動(dòng)靜分離配置

我們根據(jù)需要,將配置Nginx實(shí)現(xiàn)動(dòng)靜分離,對(duì)php頁(yè)面的請(qǐng)求轉(zhuǎn)發(fā)給LAMP或LNMP處理,而靜態(tài)頁(yè)面交給Nginx處理,從而實(shí)現(xiàn)動(dòng)靜分離。

  • 部署 LNMP環(huán)境任務(wù)要求

— 安裝Linux(操作系統(tǒng))、Nginx(網(wǎng)站服務(wù))、Mysql(數(shù)據(jù)庫(kù))、PhP( 編寫動(dòng)態(tài)網(wǎng)站的語(yǔ)言工具,pythen也可以)環(huán)— 境啟動(dòng)Nginx、MySQL、PHP服務(wù)
— 測(cè)試Nginx及MySQL、PHP是否工作正常
  • LNMP常見(jiàn)問(wèn)題

Nginx的默認(rèn)訪問(wèn)日志文件為/usr/local/nginx/logs/access.log
Nginx的默認(rèn)錯(cuò)誤日志文件為/usr/local/nginx/logs/error.log
PHP默認(rèn)錯(cuò)誤日志文件為/var/log/php-fpm/www-error.log

4.2、動(dòng)靜分離部署(LNMP)

4.2.1、環(huán)境配置

  • 安裝相關(guān)軟件,軟件倉(cāng)庫(kù)沒(méi)有mysql,安裝mariadb

yum -y install mariadb mariadb-server mariadb-devel php php-mysql php-fpm
  • 動(dòng)態(tài)網(wǎng)站創(chuàng)建需要安裝的軟件

mariadb:數(shù)據(jù)庫(kù)包
mariadb-server:客戶端數(shù)據(jù)庫(kù)包
mariadb-devel:數(shù)據(jù)庫(kù)的依賴包,開(kāi)發(fā)環(huán)境軟件包
php(FastCGI):開(kāi)發(fā)語(yǔ)言解釋器
php-fpm:關(guān)聯(lián)nginx與php的服務(wù)
php-mysql:關(guān)聯(lián)php與數(shù)據(jù)庫(kù)的服務(wù)
  • 啟動(dòng)服務(wù)

systemctl start php-fpm
systemctl start mariadb
  • 修改Nginx配置文件并啟動(dòng)服務(wù)

vim /usr/local/nginx/conf/nginx.confserver {listen       80;server_name  localhost;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.conf;}}

注:

~ \.php$:~是開(kāi)啟正則表達(dá)式,\轉(zhuǎn)義作用,匹配.php結(jié)尾的文件,動(dòng)態(tài)網(wǎng)頁(yè)設(shè)置
fastCGI:快速公共網(wǎng)關(guān)接口,可以連接網(wǎng)站程序(nginx)到網(wǎng)站的語(yǔ)言解釋器(如php),php-fpm為fastCGI的管理者。fastcgi.conf:fastcgi_params改成fastcgi.conf,更改擴(kuò)展名稱,安裝php-fpm生成的文件,要比原有文件可靠。

4.2.2、案例1:php網(wǎng)頁(yè)配置

  • 查看php-fpm配置文件

vim /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000                # PHP端口號(hào)
listen.allowed_clients = 127.0.0.1
group = apache
pm = dynamic
pm.max_children = 50                   # 最大進(jìn)程數(shù)量
pm.start_servers = 5                   # 最小進(jìn)程數(shù)量
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
  • 創(chuàng)建PHP頁(yè)面

vim /usr/local/nginx/html/test.php
<html>
<body>
This is HTML message
</br>
<?php 
$c = 12;
$d = 2;
if($c > $d){echo "c is bigger";}
else{ echo "d is bigger";}
?>
</body>
</html>
  • 瀏覽器驗(yàn)證php網(wǎng)頁(yè):IP/test.php

4.2.3、案例2:動(dòng)態(tài)網(wǎng)站調(diào)用數(shù)據(jù)庫(kù)

  • 創(chuàng)建PHP測(cè)試頁(yè)面,連接并查詢MariaDB數(shù)據(jù)庫(kù)。

vim /usr/local/nginx/html/mysql.php
<?php
$mysqli = new mysqli('localhost','root','','mysql');
#注意:root為mysql數(shù)據(jù)庫(kù)的賬戶名稱,密碼需要修改為實(shí)際mysql密碼,無(wú)密碼則留空即可
#localhost是數(shù)據(jù)庫(kù)的域名或IP,mysql是數(shù)據(jù)庫(kù)的名稱
if (mysqli_connect_errno()){die('Unable to connect!'). mysqli_connect_error();
}
$sql = "select * from user";
$result = $mysqli->query($sql);
while($row = $result->fetch_array()){printf("Host:%s",$row[0]);printf("</br>");printf("Name:%s",$row[1]);printf("</br>");
}
?>
  • 進(jìn)入數(shù)據(jù)庫(kù),創(chuàng)建新的用戶‘jy’

systemctl restart mariadb.service
mysql                             
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.68-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> create user jy@localhost identified by '123';
Query OK, 0 rows affected (0.00 sec)
  • 驗(yàn)證:瀏覽器訪問(wèn)IP/mysql.php,會(huì)看到Name:jy

  1. 安全配置

5.1、登錄認(rèn)證

在HTTP中,HttpAuthBasic模塊可以使用用戶名和密碼基于 HTTP 基本認(rèn)證(Basic access authentication),這是一種用來(lái)允許網(wǎng)頁(yè)瀏覽器或其他客戶端程序在請(qǐng)求時(shí)提供用戶名和口令形式的身份憑證的一種登錄驗(yàn)證方式。

默認(rèn)值: auth_basic off 作用域: http, server, location, limit_except 該指令包含用于 HTTP 基本認(rèn)證 的測(cè)試名和密碼

  • 在server模塊中添加以下配置信息,開(kāi)啟認(rèn)證提示

vim /usr/local/nginx/conf/nginx.conf
auth_basic  "password";                            # 自定義提示語(yǔ)句,開(kāi)啟認(rèn)證提示
auth_basic_user_file   "/usr/local/nginx/pass";    # 密碼文件存放位置在pass文件中

注:

auth_basic 可設(shè)置為off或其它字符串,為off時(shí)表示不開(kāi)啟密碼驗(yàn)證,或者#注釋效果一樣
auth_basic_user_file 為包含用戶名和密碼的文件,具體位置就是htpasswd生成賬號(hào)及密碼的存放路徑
  • 安裝創(chuàng)建加密文件軟件

yum -y install httpd-tools
  • 首次創(chuàng)建加密文件、用戶,增加用戶不用-c

htpasswd -c /usr/local/nginx/pass tom        # pass是加密文件,tom是用戶,提示輸入密碼
  • 驗(yàn)證:瀏覽器登錄網(wǎng)頁(yè),輸入用戶和密碼

5.2、https證書(shū)配置

--with-http_ssl_module是安全網(wǎng)站模塊,源碼安裝Nginx時(shí)必須使用–with-http_ssl_module參數(shù),啟用加密模塊,對(duì)于需要進(jìn)行SSL加密處理的站點(diǎn)添加ssl相關(guān)指令(設(shè)置網(wǎng)站需要的私鑰和證書(shū))。

openssl:包含SSL協(xié)議庫(kù)、應(yīng)用程序以及密碼處法庫(kù),自簽名openssl系統(tǒng)內(nèi)置

  • 加密算法

對(duì)稱算法:AES、DES,使用相同的字符串加密和解密,主要應(yīng)用在單機(jī)數(shù)據(jù)加密。應(yīng)用案例 :RAR、ZIP壓縮加密
非對(duì)稱算法:RSA、DSA,利用公鑰(鎖)加密,私鑰(鑰匙)解密,主要應(yīng)用在網(wǎng)絡(luò)數(shù)據(jù)加密。應(yīng)用案例:https、ssh
信息摘要:MD5、sha256、sha512,數(shù)據(jù)校驗(yàn),主要應(yīng)用在數(shù)據(jù)完整性校驗(yàn)。

5.2.1、加密網(wǎng)站設(shè)置

  • 更改配置文件

vim /usr/local/nginx/conf/nginx.confserver {listen       443 ssl;server_name  localhost;           # IP或域名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;}}
  • 創(chuàng)建私鑰,用來(lái)解密的

openssl genrsa > /usr/local/nginx/conf/cert.key  # genrsa使用rsa非對(duì)稱算法
  • 創(chuàng)建證書(shū)(正式的證書(shū)需要花費(fèi),證明https是合規(guī)的),里面包含公鑰

openssl req -x509 -key /usr/local/nginx/conf/cert.key > /usr/local/nginx/conf/cert.pemYou 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]:JY                         # 國(guó)家
State or Province Name (full name) []:JY                     # 省份
Locality Name (eg, city) [Default City]:JY                   # 城市 
Organization Name (eg, company) [Default Company Ltd]:JY     # 公司
Organizational Unit Name (eg, section) []:JY                 # 部門
Common Name (eg, your name or your server's hostname) []:JY  # 服務(wù)器
Email Address []:JY@163.com                                  # 郵箱

注:

req -x509:請(qǐng)求創(chuàng)建-x509格式的證書(shū),-x509證書(shū)是國(guó)際通用標(biāo)準(zhǔn)。
-key /usr/local/nginx/conf/cert.key:指定私鑰創(chuàng)建公鑰
  • 重新加載文件

 systemctl reload nginx.service 
  • 驗(yàn)證

mkdir /usr/local/nginx/html_c
echo "nginx-c~~~~" > /usr/local/nginx/html_c/index.html
curl -k https://www.jiangying.com           # -k忽略風(fēng)險(xiǎn)提示

6.地址重寫

6.1、URL重寫介紹

和apache等web服務(wù)軟件一樣,rewrite的主要功能是實(shí)現(xiàn)URL地址的重定向。Nginx的rewrite功能需要PCRE軟件的支持,即通過(guò)perl兼容正則表達(dá)式語(yǔ)句進(jìn)行規(guī)則匹配的。默認(rèn)參數(shù)編譯nginx就會(huì)支持rewrite的模塊,但是也必須要PCRE的支持。
Rewrite功功能是Nginx服務(wù)器提供的一個(gè)重要功能。幾乎是所有的web產(chǎn)品必備技能,用于實(shí)現(xiàn)URL重寫。URL重寫是非常有用的功能,比如它可以在我們?cè)诟淖兙W(wǎng)站結(jié)構(gòu)后,不需要客戶端修改原來(lái)的書(shū)簽,也不需要其他網(wǎng)站修改對(duì)我們網(wǎng)站的友情鏈接,還可以在一定程度上提高網(wǎng)站的安全性,能夠讓我們的網(wǎng)站顯得更專業(yè)。

6.2、應(yīng)用場(chǎng)景

域名變更(京東)
用戶跳轉(zhuǎn) (從某個(gè)連接跳到另一個(gè)連接)
偽靜態(tài)場(chǎng)景 (便于CDN緩存動(dòng)態(tài)頁(yè)面數(shù)據(jù))
  • rewrite地址重寫

可以定義用戶的訪問(wèn)路徑可以看到的實(shí)際內(nèi)容。相同網(wǎng)站間的調(diào)轉(zhuǎn),獲得一個(gè)來(lái)訪的URL請(qǐng)求,然后改寫成服務(wù)器可以的另一個(gè)URL的過(guò)程。地址重寫可以是網(wǎng)頁(yè)、域名、瀏覽器。

重寫優(yōu)點(diǎn):縮短URL,隱藏實(shí)際路徑提高安全性,易于用戶記錄和鍵入,易于被搜索引擎收錄

正則表達(dá)式:區(qū)分大小寫匹配~;不區(qū)分大小寫匹配~*;區(qū)分大小寫不區(qū)配!~;不區(qū)分大小寫不匹配~!*。


語(yǔ)法格式:

— 寬松匹配:rewrite 匹配路徑(A) 實(shí)際頁(yè)面(B) 選項(xiàng) # 瀏覽器輸入路徑A,看到頁(yè)面B,網(wǎng)頁(yè)名前后可以加?xùn)|西
— 精確匹配:rewrite ^匹配路徑$(A) 實(shí)際頁(yè)面(B) 選項(xiàng) # 網(wǎng)頁(yè)名前后不可以加?xùn)|西
— 條件判斷:if(條件){任務(wù)} # 滿足什么條件,就執(zhí)行重定向到哪個(gè)地址

—選項(xiàng)有:

last:本條規(guī)則匹配完成后,繼續(xù)向下匹配新的location url規(guī)則
Break:本條規(guī)則匹配完成既終止,不再匹配后面的任何規(guī)則
redirect:臨時(shí)重定向,狀態(tài)碼302,爬蟲(chóng)不敢興趣
permanent:永久重定向,狀態(tài)碼301,爬蟲(chóng)感興趣

6.2.1、相同網(wǎng)站不同頁(yè)面

rewrite ^/a.html$ /b.html  redirect;    # 臨時(shí),打開(kāi)a網(wǎng)站轉(zhuǎn)到b網(wǎng)站,加上^和$符號(hào)嚴(yán)格匹配,否則可以在前后加字符符號(hào)。
rewrite ^/a.html$ /b.html  permanent;   # 永久,但是redirect為臨時(shí)重定向,permanent為永久重定向

6.2.2、不同網(wǎng)站之間的跳轉(zhuǎn)

rewrite /(.*)   新網(wǎng)站網(wǎng)址/$1 ;         # 將舊網(wǎng)站調(diào)轉(zhuǎn)到新網(wǎng)站,()保留/理解為復(fù)制,(.*)保留/復(fù)制任意值,$1相當(dāng)于將前面保留的內(nèi)容粘貼/復(fù)制到新網(wǎng)站之后

6.2.3、不同瀏覽器或訪問(wèn)端之間的調(diào)轉(zhuǎn)

if ($http_user_agent ~* firefox){rewrite /(.*) /firefox/$1;}

注:條件判斷,如果用戶使用了火狐瀏覽器,就進(jìn)行地址重寫操作,讓用戶看到火狐專屬頁(yè)面。

if:判斷語(yǔ)句
():放條件
$http_user_agent:是nginx的內(nèi)置變量,存儲(chǔ)了用戶的信息,比如用的什么瀏覽器
~* firefox:~匹配正則,*忽略大小寫,包含有firefox字樣;
{}:放的任務(wù)

6.2.4、針對(duì)同一個(gè)范圍

同一個(gè)范圍有多個(gè)rewrite之后,系統(tǒng)會(huì)整體分析跳轉(zhuǎn)最終位置,需要在語(yǔ)句結(jié)尾添加last,同一個(gè)范圍的rewrite不發(fā)生混淆。

rewrite ^/a.html$ /b.html  last;       
rewrite ^/b.html$ /c.html  ;

6.2.5、針對(duì)不同范圍

在不同的location下面有多個(gè)rewrite之后,地址重寫B(tài)reak:不再讀其他的語(yǔ)句結(jié)束請(qǐng)求,不同范圍的rewrite不發(fā)生混淆。

rewrite ^/a.html$ /b.html  break;

7.錯(cuò)誤頁(yè)面

  • HTTP常見(jiàn)錯(cuò)誤代碼列表

200:一切正常
301:表示網(wǎng)址的重定向,臨時(shí)重定向
302:臨時(shí)重定向
400:請(qǐng)求語(yǔ)法錯(cuò)誤,客戶端方面的問(wèn)題
401:訪問(wèn)被拒絕(賬戶或密碼錯(cuò)誤)
403:資源不可用,通常由于服務(wù)器上文件或目錄的權(quán)限設(shè)置導(dǎo)致,禁止訪問(wèn)(客戶端額IP地址被拒絕)
404:無(wú)法找到指定位置的資源(Not Found),服務(wù)端不知道客戶端請(qǐng)求的資源有哪個(gè)
410:服務(wù)端知道客戶端請(qǐng)求的資源曾經(jīng)存在但是現(xiàn)在不存在了
414:請(qǐng)示UIR頭部太長(zhǎng)
500:服務(wù)器內(nèi)部錯(cuò)誤
502:web服務(wù)器沒(méi)有回應(yīng),沒(méi)有接受到有效信息。服務(wù)器作為網(wǎng)關(guān)或者代理時(shí),為了完成請(qǐng)求訪問(wèn)下一個(gè)服務(wù)器,但該服務(wù)器返回了非法的應(yīng)
  • 更改nginx404報(bào)錯(cuò)的頁(yè)面顯示

error_page  404              /test.jpg;      # 配置錯(cuò)誤頁(yè)面,然后存儲(chǔ)一個(gè)test.jpg圖片到/usr/local/nginx/html/目錄下。

8.狀態(tài)頁(yè)面

status模塊,可以查看網(wǎng)站后臺(tái)數(shù)據(jù),如Nginx連接數(shù)等信息,--with-http_stub_status_module開(kāi)啟模塊功能。

  • 安裝模塊--with-http_stub_status_module

./configure --with-http_stub_status_module
make && make install
  • 狀態(tài)頁(yè)面設(shè)置

location /status {
stub_status on;           # 顯示后臺(tái)數(shù)據(jù)
allow 192.168.65.21;      # 允許查看的數(shù)據(jù)的服務(wù)器
deny all;                 # 禁止其他服務(wù)器查看
}
  • 訪問(wèn)狀態(tài)status頁(yè)面:curl http://IP/status

Activeconnections:當(dāng)前活動(dòng)的連接數(shù)量(當(dāng)前有多少用戶訪問(wèn)該網(wǎng)站)。
Accepts:已經(jīng)接受客戶端的連接總數(shù)量。
Handled:已經(jīng)處理客戶端的連接總數(shù)量。
Requests:客戶端發(fā)送的請(qǐng)求數(shù)量。
Reading:當(dāng)前服務(wù)器正在讀取客戶端請(qǐng)求頭的數(shù)量。
Writing:當(dāng)前服務(wù)器正在寫響應(yīng)信息的數(shù)量。
Waiting:當(dāng)前多少客戶端在等待服務(wù)器的響應(yīng)。

9.優(yōu)化配置

9.1、緩存優(yōu)化

解決客戶端訪問(wèn)頭部信息過(guò)長(zhǎng)的問(wèn)題,還要以緩存文件到客戶,緩存服務(wù)器,還可以通過(guò)varnish,squid緩存文件,搭建緩存服務(wù)器。增加用戶訪問(wèn)速度 。當(dāng)客戶端在訪問(wèn)服務(wù)器時(shí),由服務(wù)器決定將生么文件緩存在客戶端。

  • 緩存優(yōu)化配置

location ~* \.(jpg|html|txt)$ {         # 緩存文件類型
expires 30d;                            # 緩存時(shí)長(zhǎng)
}
  • 訪問(wèn)網(wǎng)站,通過(guò)瀏覽器緩存(Expires)過(guò)期時(shí)間是一個(gè)月,說(shuō)明緩存成功。

9.2、超長(zhǎng)地址

nginx是一個(gè)強(qiáng)大的http服務(wù)器,但是在使用過(guò)程中發(fā)現(xiàn),當(dāng)遇到超長(zhǎng)的post請(qǐng)求或者get請(qǐng)求時(shí),nginx會(huì)返回413、400、414等狀態(tài)碼,這是因?yàn)檎?qǐng)求串長(zhǎng)度超過(guò)了nginx默認(rèn)的緩存大小或者請(qǐng)求串大小。

  • 超長(zhǎng)地址訪問(wèn)設(shè)置,在主配置文件中server之外,http之內(nèi)。

client_header_buffer_size 200k;        # 改為200K
large_client_header_buffers 4 200k;    # 如果200k不夠用,再添加4個(gè)200k
  • 注:

client_header_buffer_size:可以定義將識(shí)別的頭部信息(包含地址欄)的大小
large_client_header_buffers:定義個(gè)數(shù)

9.2、并發(fā)優(yōu)化

9.2.1、開(kāi)發(fā)和并行的區(qū)別

「并發(fā)」強(qiáng)調(diào)的是可以一起「出『發(fā)』」,「并行」強(qiáng)調(diào)的是可以一起「執(zhí)『行』」。

  • 并發(fā):與可以一起出發(fā)的并發(fā)(concurrent)相對(duì)的是不可以一起出發(fā)的順序(sequential)

順序:上一個(gè)開(kāi)始執(zhí)行的任務(wù)完成后,當(dāng)前任務(wù)才能開(kāi)始執(zhí)行
并發(fā):無(wú)論上一個(gè)開(kāi)始執(zhí)行的任務(wù)是否完成,當(dāng)前任務(wù)都可以開(kāi)始執(zhí)行
(也就是說(shuō),A B 順序執(zhí)行的話,A 一定會(huì)比 B 先完成,而并發(fā)執(zhí)行則不一定。)
  • 并行:與可以一起執(zhí)行的并行(parallel)相對(duì)的是不可以一起執(zhí)行的串行(serial)

串行:有一個(gè)任務(wù)執(zhí)行單元,從物理上就只能一個(gè)任務(wù)、一個(gè)任務(wù)地執(zhí)行
并行:有多個(gè)任務(wù)執(zhí)行單元,從物理上就可以多個(gè)任務(wù)一起執(zhí)行
(也就是說(shuō),在任意時(shí)間點(diǎn)上,串行執(zhí)行時(shí)必然只有一個(gè)任務(wù)在執(zhí)行,而并行則不一定。)
  • 總結(jié)

綜上,并發(fā)與并行并不是互斥的概念,只是前者關(guān)注的是任務(wù)的抽象調(diào)度、后者關(guān)注的是任務(wù)的實(shí)際執(zhí)行。而它們又是相關(guān)的,比如并行一定會(huì)允許并發(fā)。
單核 CPU 多任務(wù):并發(fā)(不必等上一個(gè)任務(wù)完成才開(kāi)始下一個(gè)任務(wù))、串行(只有一個(gè)實(shí)際執(zhí)執(zhí)行任務(wù)的 CPU 核)
多線程:并發(fā)、串行(所有線程都在同一個(gè)核上執(zhí)行);并發(fā)、并行(不同線程在不同的核上執(zhí)行)

9.2.2、優(yōu)化nginx并發(fā)

worker_processes  2;
events {worker_connections  500000;
}
  • 注:

worker_processes:定義后臺(tái)開(kāi)啟nginx的進(jìn)程數(shù)量,與CPU數(shù)量一致
worker_connections:限制訪問(wèn)用戶,一個(gè)nginx可以允許訪問(wèn)的用戶數(shù)

9.2.3、文件訪問(wèn)

Linux系統(tǒng)默認(rèn)打開(kāi)文件的個(gè)數(shù)最大不得超過(guò)1024,客戶端訪問(wèn)一個(gè)頁(yè)面,相當(dāng)于打開(kāi)了一個(gè)文件,需要改動(dòng)linux的配置文件。

  • 臨時(shí)配置

ulimit -n            # 查看同時(shí)打開(kāi)文件的數(shù)量
ulimit -n 100000     # 配置同時(shí)打開(kāi)文件的數(shù)量
  • 永久配置

vim /etc/security/limits.conf
*               soft    nofile         10000
*               hard    nofile         10000
  • 注:

*:服務(wù)器
nofile:打開(kāi)文件的限制
soft:軟限制達(dá)到之,想要打開(kāi)設(shè)置。
hard:硬限制,最多打開(kāi)限制,后有硬限制報(bào)警。

9.2.4、壓測(cè)

ab -c 2000 -n 2000 http://192.168.65.21/   # -c訪問(wèn)人數(shù),-n訪問(wèn)次數(shù),100%證明測(cè)試成功 

9.3、會(huì)話管理

9.3.1、hash

根據(jù)客戶端的IP地址轉(zhuǎn)發(fā)同一臺(tái)服務(wù)器,可以保持回話。這個(gè)方法確保了相同的客戶端的請(qǐng)求一直發(fā)送到相同的服務(wù)器,以保證session會(huì)話。這樣每個(gè)訪客都固定訪問(wèn)一個(gè)后端服務(wù)器,可以解決session不能跨服務(wù)器的問(wèn)題。

upstream jiangying {
ip_hash;
server 192.168.65.22:80;
server 192.168.65.10:80;
}

其他:

【hash $cookie_jsessionid; 】:根據(jù)jsessionid地址轉(zhuǎn)發(fā)同一臺(tái)服務(wù)器;
【hash $request_uri;】:根據(jù)uri地址轉(zhuǎn)發(fā)同一臺(tái)服務(wù)器,適用于訪問(wèn)不同的服務(wù)器資源;

注意:

在nginx版本1.3.1之前,不能在ip_hash中使用權(quán)重(weight)。
ip_hash不能與backup同時(shí)使用。
此策略適合有狀態(tài)服務(wù),比如session。
當(dāng)有服務(wù)器需要剔除,必須手動(dòng)down掉。
9.3.2、緩存

客戶登錄:session與Cookie,作用避免客戶重復(fù)登錄??蛻舳说顷憰r(shí)由服務(wù)器端的session與客戶端的cookies的id作對(duì)比。

—Session:【服務(wù)端】存儲(chǔ)在服務(wù)器端,保存用戶名、登陸狀態(tài)等信息,
—Cookies:【客戶端】由服務(wù)器下發(fā)給客戶端,保存在客戶端/var/lib/php/session。保存的內(nèi)容主要包括:SessionID

memcached簡(jiǎn)介:可以利用內(nèi)存讀寫數(shù)據(jù)的數(shù)據(jù)庫(kù)服務(wù),創(chuàng)建分布式緩存服務(wù)器,高性能的分布式緩存服務(wù)器,集中緩存數(shù)據(jù)庫(kù)查詢結(jié)果,減少數(shù)據(jù)庫(kù)訪問(wèn)次數(shù),以提高動(dòng)態(tài)web應(yīng)用的響應(yīng)速度;官方網(wǎng)站:http://memcached.org/

9.3.2.1、環(huán)境配置

  • 關(guān)閉防火墻和selinux

  • 部署有登錄界面的LNMP動(dòng)態(tài)網(wǎng)站,配置代理集群

  • 在后端服務(wù)器 /usr/local/nginx/html/存儲(chǔ)PHP網(wǎng)頁(yè)

  • 部署memcached(存儲(chǔ)服務(wù)器)、telnet(遠(yuǎn)程登錄工具)

yum -y install memcached telnet
systemctl start memcached.service 
systemctl enable memcached.service
  • 查看memcached的端口

cat /etc/sysconfig/memcached 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
  • telnet測(cè)試memcached

telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
  • memcached常用指令

set name 0 180 10       # 添加或替換變量,創(chuàng)建變量name,0不壓縮,存活190s,存放10個(gè)字符
get name                # 讀取變量
delete name             # 刪除變量
add name 0 180 10       # 變量不存在則添加
replace name 0 180 10   # 替換
flush_all               # 清空所有
quit                    # 退出登記

9.3.2.2、session共享配置

  • 安裝php-pecl-memcache工具,關(guān)聯(lián)PHP和memcache

yum -y install php-pecl-memcache
systemctl start php-fpm
  • 登錄后端服務(wù)器節(jié)點(diǎn),配置session存儲(chǔ)

vim /etc/php-fpm.d/www.conf
php_value[session.save_handler] = memcache                 # 存儲(chǔ)的方式
php_value[session.save_path] = tcp://192.168.65.21:11211   # 存儲(chǔ)的地址
  • 測(cè)試session共享

瀏覽器訪問(wèn)服務(wù)器,刷新頁(yè)面后,登錄賬戶會(huì)被記錄在memcached服務(wù)器,再次刷新頁(yè)面,調(diào)度器切換服務(wù)器后,賬戶信息還在,兩臺(tái)后端服務(wù)器使用的是同一個(gè)帳戶。

9.3.2、sticky模塊

Sticky是nginx的一個(gè)模塊,它是基于cookie的一種nginx的負(fù)載均衡解決方案,通過(guò)分發(fā)和識(shí)別cookie,來(lái)使同一個(gè)客戶端的請(qǐng)求落在同一臺(tái)服務(wù)器上,默認(rèn)標(biāo)識(shí)名為route。

官網(wǎng):https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src/master/

工作原理:

1.客戶端首次發(fā)起訪問(wèn)請(qǐng)求,nginx接收后,發(fā)現(xiàn)請(qǐng)求頭沒(méi)有cookie,則以輪詢方式將請(qǐng)求分發(fā)給后端服務(wù)器。
2.后端服務(wù)器處理完請(qǐng)求,將響應(yīng)數(shù)據(jù)返回給nginx。
3.此時(shí)nginx生成帶route的cookie,返回給客戶端。route的值與后端服務(wù)器對(duì)應(yīng),可能是明文,也可能是md5、sha1等Hash值
4.客戶端接收請(qǐng)求,并保存帶route的cookie。
5.當(dāng)客戶端下一次發(fā)送請(qǐng)求時(shí),會(huì)帶上route,nginx根據(jù)接收到的cookie中的route值,轉(zhuǎn)發(fā)給對(duì)應(yīng)的后端服務(wù)器。
  • 安裝依賴

yum -y install openssl
  • 上傳解壓

unzip nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.zip
  • 進(jìn)到源碼目錄重新編譯

./configure --prefix=/usr/local/nginx --add-module=/root/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d

備注:

--add-module:添加第三方模塊
  • 錯(cuò)誤:make報(bào)錯(cuò)

解決:修改源碼,修改后重新執(zhí)行編譯

vim /root/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d/ngx_http_sticky_misc.h
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
#include <ngx_string.h>
#include <openssl/sha.h> 
#include <openssl/md5.h>
  • 備份之前的程序

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
  • 編譯好的Nginx程序替換到原來(lái)的目錄里

cp nginx-1.19.3/objs/nginx /usr/local/nginx/sbin/
  • 升級(jí)檢測(cè)

make upgrade
  • 檢查程序

/usr/local/nginx/sbin/nginx -V
  • 配置sticky模塊的使用

upstream jiangying {
sticky;
server 192.168.65.21;
server 192.168.65.22;
}

備注:

每臺(tái)后端真實(shí)服務(wù)器都會(huì)有一個(gè)唯一的route值,所以不管你真實(shí)服務(wù)器前端有幾個(gè)裝了sticky的nginx代理,他都是不會(huì)變化的。

參數(shù):

sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback] [secure] [httponly];

[name=route]:設(shè)置用來(lái)記錄會(huì)話的cookie名稱
[domain=.foo.bar]:設(shè)置cookie作用的域名
[path=/]:設(shè)置cookie作用的URL路徑,默認(rèn)根目錄
[expires=1h]:設(shè)置cookie的生存期,默認(rèn)不設(shè)置,瀏覽器關(guān)閉即失效,需要是大于1秒的值
[hash=index|md5|sha1]:設(shè)置cookie中服務(wù)器的標(biāo)識(shí)是用明文還是使用md5值,默認(rèn)使用md5
[no_fallback]:設(shè)置該項(xiàng),當(dāng)sticky的后端機(jī)器掛了以后,nginx返回502 (Bad Gateway or Proxy Error) ,而不轉(zhuǎn)發(fā)到其他服務(wù)器,不建議設(shè)置
[secure]:設(shè)置啟用安全的cookie,需要HTTPS支持
[httponly]:允許cookie不通過(guò)JS泄漏,沒(méi)用過(guò)

9.4、防盜鏈

防盜鏈簡(jiǎn)單來(lái)說(shuō)就是存在我們服務(wù)中的一些資源,只有我們規(guī)定的合法的一類人才能去訪問(wèn),其他人就不能去訪問(wèn)的資源

(如css,js,img等資源)。

具體點(diǎn)就是用戶發(fā)送請(qǐng)求給nginx服務(wù)器,nginx服務(wù)器根據(jù)請(qǐng)求去尋找資源,請(qǐng)求的比如說(shuō)是有個(gè)index.html文件,這個(gè)文件中會(huì)包含很多js,css,img等資源,這些文件在這個(gè)骨架中會(huì)被二次請(qǐng)求,在第二次請(qǐng)求時(shí),會(huì)在請(qǐng)求頭部上加上有個(gè)referer,這個(gè)referer只會(huì)在第二次請(qǐng)求時(shí)才會(huì)被加上。(referer表示第二次資源的來(lái)源地址)

9.4.1、防盜鏈配置

valid_referers:nginx會(huì)通過(guò)查看referer自動(dòng)和valid_referers后面的內(nèi)容進(jìn)行匹配,如果匹配到了就將$invalid_referer變量置0,如果沒(méi)有匹配到,則將$invalid_referer變量置為1,匹配的過(guò)程不區(qū)分大小寫

語(yǔ)法:valiad_referers none|blocked|server_names|string
— none:如果header中的referer為空,允許訪問(wèn)
blocked:在header中的referer不為空,但是該值被防火墻或代理服務(wù)器進(jìn)行偽裝過(guò),如不帶“http://”、“https://”等協(xié)議頭的資源允許訪問(wèn)。
server_names:指定具體的域名或者IP

默認(rèn)值:-
位置(可以書(shū)寫的地方):server,location
  • 在需要防盜鏈的location中配置

valid_referers 192.168.65.21;
if ($invalid_referer){
rewrite ^/ /image/x.png break;        # 匹配的提示頁(yè)面
return 403;                           # 返回的提示碼
}

9.5、curl

安裝curl

yum -y install curl
  • 使用curl測(cè)試,顯示head的信息

curl -I http://192.168.65.21
HTTP/1.1 200 OK
Server: nginx/1.19.3
Date: Mon, 13 Mar 2023 08:12:30 GMT
Content-Type: text/html
Content-Length: 5
Connection: keep-alive
Last-Modified: Fri, 03 Mar 2023 03:56:47 GMT
ETag: "64016fff-5"
Accept-Ranges: bytes

9.6、keepalive

HTTP協(xié)議的Keep-Alive意圖在于短時(shí)間內(nèi)連接復(fù)用,希望可以短時(shí)間內(nèi)在同一個(gè)連接上進(jìn)行多次請(qǐng)求/響應(yīng),在http協(xié)議header中可以看到當(dāng)前連接狀態(tài)。

TCP的KeepAlive機(jī)制意圖在于?;?、心跳,檢測(cè)連接錯(cuò)誤。當(dāng)一個(gè)TCP連接兩端長(zhǎng)時(shí)間沒(méi)有數(shù)據(jù)傳輸時(shí)(通常默認(rèn)配置是2小時(shí)),發(fā)送keepalive探針,探測(cè)鏈接是否存活。

應(yīng)用場(chǎng)景:明顯的預(yù)知用戶會(huì)在當(dāng)前連接上有下一步操作,復(fù)用連接,有效減少握手次數(shù),尤其是https建立一次連接開(kāi)銷會(huì)更大。

關(guān)閉場(chǎng)景: 訪問(wèn)內(nèi)聯(lián)資源一般用緩存,不需要keepalive,長(zhǎng)時(shí)間的tcp連接容易導(dǎo)致系統(tǒng)資源無(wú)效占用。

9.6.1、客戶端
  • 客戶端使用keepalive,在http區(qū)域配置。

vim /usr/local/nginx/conf/nginx.conf
keepalive_timeout  65;
keepalive_time 1h;
keepalive_request 1000;
send_timeout 60;

備注:

keepalive_timeout:超過(guò)配置時(shí)間沒(méi)有活動(dòng),會(huì)讓keepalive失效,用于設(shè)置Nginx服務(wù)器與客戶端保持連接的超時(shí)時(shí)間,0即關(guān)閉,默認(rèn)65s
keepalive_time:一個(gè)tcp連接總時(shí)長(zhǎng),超過(guò)之后強(qiáng)制失效,默認(rèn)1h
keepalive_request:單個(gè)連接中可處理的請(qǐng)求數(shù),一個(gè)tcp復(fù)用中可以并發(fā)接收的請(qǐng)求個(gè)數(shù),默認(rèn)1000
keepalive_disable:不對(duì)某些瀏覽器建立長(zhǎng)連接,默認(rèn)msie6
send_timeout:【注意:準(zhǔn)備過(guò)程中,不是傳輸過(guò)程】,系統(tǒng)中若有耗時(shí)操,超過(guò)時(shí)間強(qiáng)制斷開(kāi)連接,默認(rèn)60s
9.6.2、上游服務(wù)器
  • upstream中配置

vim /usr/local/nginx/conf/nginx.conf
keepalive 100;
keepalive_timeout 65;
keepalive_request 1000;

備注:

keepalive:向上游服務(wù)器的保留連接數(shù)
keepalive_timeout:連接保留時(shí)間
keepalive_requests:一個(gè)tcp復(fù)用中 可以并發(fā)接收的請(qǐng)求個(gè)數(shù)
  • server中配置

首先需要配置使用http1.1協(xié)議。以便建立更高效的傳輸,默認(rèn)使用http1.0,默認(rèn)使用http1.0協(xié)議,需要在request中增加”Connection: keep-alive“ header才能在Upstream中所配置的上游服務(wù)器默認(rèn)都是用短連接,即每次請(qǐng)求都會(huì)在完成之后斷開(kāi),而HTTP1.1默認(rèn)支持。

vim /usr/local/nginx/conf/nginx.conf
proxy_http_version 1.1;
proxy_set_header Connection "";     # 清除close信息
9.6.3、驗(yàn)證
  • AB安裝

yum install httpd-tools

參數(shù):

- -n 即requests,用于指定壓力測(cè)試總共的執(zhí)行次數(shù)。
- -c 即concurrency,用于指定的并發(fā)數(shù)。
- -t 即timelimit,等待響應(yīng)的最大時(shí)間(單位:秒)。
- -b 即windowsize,TCP發(fā)送/接收的緩沖大小(單位:字節(jié))。
- -p 即postfile,發(fā)送POST請(qǐng)求時(shí)需要上傳的文件,此外還必須設(shè)置-T參數(shù)。
- -u 即putfile,發(fā)送PUT請(qǐng)求時(shí)需要上傳的文件,此外還必須設(shè)置-T參數(shù)。
- -T 即content-type,用于設(shè)置Content-Type請(qǐng)求頭信息,例如:application/x-www-form-urlencoded,默認(rèn)值為text/plain。
- -v 即verbosity,指定打印幫助信息的冗余級(jí)別。
- -w 以HTML表格形式打印結(jié)果。
- -i 使用HEAD請(qǐng)求代替GET請(qǐng)求。
- -x 插入字符串作為table標(biāo)簽的屬性。
- -y 插入字符串作為tr標(biāo)簽的屬性。
- -z 插入字符串作為td標(biāo)簽的屬性。
- -C 添加cookie信息,例如:"Apache=1234"(可以重復(fù)該參數(shù)選項(xiàng)以添加多個(gè))。
- -H 添加任意的請(qǐng)求頭,例如:"Accept-Encoding:gzip",請(qǐng)求頭將會(huì)添加在現(xiàn)有的多個(gè)請(qǐng)求頭之后(可以重復(fù)該參數(shù)選項(xiàng)以添加多個(gè))。
- -A 添加一個(gè)基本的網(wǎng)絡(luò)認(rèn)證信息,用戶名和密碼之間用英文冒號(hào)隔開(kāi)。
- -P 添加一個(gè)基本的代理認(rèn)證信息,用戶名和密碼之間用英文冒號(hào)隔開(kāi)。
- -X 指定使用的和端口號(hào),例如:"126.10.10.3:88"。
- -V 打印版本號(hào)并退出。
- -k 使用HTTP的KeepAlive特性。
- -d 不顯示百分比。
- -S 不顯示預(yù)估和警告信息。
- -g 輸出結(jié)果信息到gnuplot格式的文件中。
- -e 輸出結(jié)果信息到CSV格式的文件中。
- -r 指定接收到錯(cuò)誤信息時(shí)不退出程序。
- -h 顯示用法信息,其實(shí)就是ab -help。
http://www.risenshineclean.com/news/53831.html

相關(guān)文章:

  • 自己做淘客網(wǎng)站成本大嗎廣告公司怎么找客戶資源
  • 網(wǎng)站頂部小圖標(biāo)怎么做品牌推廣與傳播方案
  • 網(wǎng)站建設(shè)管理 優(yōu)幫云東莞建設(shè)企業(yè)網(wǎng)站
  • 給別人做的網(wǎng)站涉及到詐騙投稿網(wǎng)站
  • 大良做網(wǎng)站網(wǎng)頁(yè)制作作業(yè)100例
  • 北京西站到八達(dá)嶺長(zhǎng)城最快路線上海優(yōu)化關(guān)鍵詞的公司
  • a做爰網(wǎng)站網(wǎng)店運(yùn)營(yíng)基礎(chǔ)知識(shí)
  • 廊坊哪里能夠做網(wǎng)站正規(guī)seo排名多少錢
  • 網(wǎng)站開(kāi)發(fā)語(yǔ)言查詢 蔡學(xué)鏞網(wǎng)絡(luò)營(yíng)銷方法和手段
  • 網(wǎng)站更新seo看seo
  • 建設(shè)河南分行網(wǎng)站網(wǎng)站seo快速
  • 網(wǎng)站制作主題如何檢測(cè)網(wǎng)站是否安全
  • 做網(wǎng)站要求高嗎百度手機(jī)版
  • wordpress縮略圖thumb貴州seo技術(shù)查詢
  • 貿(mào)易公司寮步網(wǎng)站建設(shè)哪家好友情鏈接出售平臺(tái)
  • 貴陽(yáng)網(wǎng)站制作策劃無(wú)錫網(wǎng)站seo
  • easyui 做的網(wǎng)站關(guān)鍵詞優(yōu)化心得
  • 手機(jī)怎么免費(fèi)建網(wǎng)站專業(yè)seo培訓(xùn)
  • 簡(jiǎn)述營(yíng)銷導(dǎo)向的企業(yè)網(wǎng)站建設(shè)的步驟seo的英文全稱是什么
  • 怎么做好網(wǎng)站開(kāi)發(fā)_設(shè)計(jì)怎么做百度網(wǎng)頁(yè)推廣
  • 網(wǎng)站開(kāi)發(fā)如何修改字體不限制內(nèi)容的搜索引擎
  • 制作app需要網(wǎng)站嗎品牌策略
  • 亦莊公司做網(wǎng)站做網(wǎng)站的軟件叫什么
  • 做網(wǎng)站的能賺多少錢shopify seo
  • 網(wǎng)站建設(shè)有名的公司自己怎么開(kāi)發(fā)app軟件
  • 做網(wǎng)站銷售水果常用網(wǎng)站推廣方法及資源
  • 做電商網(wǎng)站一般需要什么流程可以免費(fèi)推廣的網(wǎng)站
  • 菏澤做網(wǎng)站公司精準(zhǔn)客源引流平臺(tái)
  • 做網(wǎng)站使用什么語(yǔ)言寫簡(jiǎn)述網(wǎng)站內(nèi)容如何優(yōu)化
  • 網(wǎng)站排名系統(tǒng)哪個(gè)好深圳防疫措施優(yōu)化