知識點 nginx的安裝部署

nginx的相關(guān)配置文件

nginx的基本功能

nginx的虛擬主機

反向代理實現(xiàn)

如何實現(xiàn)下載限速

URL重寫機制

nginx優(yōu)化




課程目標 能" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > Nginx使用

Nginx使用

時間:2023-07-01 21:09:02 | 來源:網(wǎng)站運營

時間:2023-07-01 21:09:02 來源:網(wǎng)站運營

Nginx使用:

本章我們學(xué)習一款web服務(wù)軟件nginx




知識點

nginx的安裝部署

nginx的相關(guān)配置文件

nginx的基本功能

nginx的虛擬主機

反向代理實現(xiàn)

如何實現(xiàn)下載限速

URL重寫機制

nginx優(yōu)化




課程目標

能夠知道nginx的作用

能夠知道nginx如何安裝部署和設(shè)置

能夠說出nginx有哪些基本功能

能夠?qū)崿F(xiàn)nginx的虛擬主機,下載限速

能夠?qū)崿F(xiàn)URL重寫及優(yōu)化

一 介紹

Nginx(“engine x”)是一款是由俄羅斯的程序設(shè)計師Igor Sysoev所開發(fā)高性能的 Web和 反向代理服務(wù)器,也是一個 IMAP/POP3/SMTP 代理服務(wù)器。和apache一樣,都是web服務(wù)器軟件,因為其性能優(yōu)異,所以被廣大運維喜歡。又因為nginx是一個輕量級的web服務(wù)器,相比apache來說資源消耗更低。

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

http://www.nginx.cn/doc/index.html 中文文檔




為什么選擇nginx

Nginx 是一個高性能的 Web 和反向代理服務(wù)器, 它具有有很多非常優(yōu)越的特性:

作為 Web 服務(wù)器:相比 Apache,Nginx 使用更少的資源,支持更多的并發(fā)連接,體現(xiàn)更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。能夠支持高達 50,000 個并發(fā)連接數(shù)的響應(yīng),感謝 Nginx 為我們選擇了 epoll and kqueue 作為開發(fā)模型.

作為負載均衡服務(wù)器:Nginx 既可以在內(nèi)部直接支持 Rails 和 PHP,也可以支持作為 HTTP代理服務(wù)器 對外進行服務(wù)。Nginx 用 C 編寫, 不論是系統(tǒng)資源開銷還是 CPU 使用效率都比 Perlbal 要好的多。

Nginx 安裝非常的簡單,配置文件 非常簡潔(還能夠支持perl語法),Bugs非常少的服務(wù)器: Nginx 啟動特別容易,并且?guī)缀蹩梢宰龅?*24不間斷運行,即使運行數(shù)個月也不需要重新啟動。你還能夠在 不間斷服務(wù)的情況下進行軟件版本的升級。

nginx和apache對比

  1. 靜態(tài)文件處理能力:nginx高于apache
  2. 資源消耗:nginx優(yōu)于apache,因為nginx是異步處理模型,只需要幾個進程就能夠處理大量在線請求,而apache 2.4仍然是進程模型或者線程模型,即仍然采用大量線程來處理大量在線請求。
  3. Apache支持的模塊很多,而且也比較穩(wěn)定。而nginx由于出現(xiàn)的比較晚,所以在這方面可能比不上Apache。
  4. nginx本身就是一個反向代理服務(wù)器,而且支持7層負載均衡。
  5. nginx處理動態(tài)頁面很雞肋,一般只用與處理靜態(tài)頁面和反向代理。



二 nginx安裝部署




1 nginx源碼下載

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

源碼包:nginx-1.15.12.tar.gz

源碼包下載:wget http://nginx.org/download/nginx-1.15.12.tar.gz -P /usr/src

2 nginx安裝

dnf -y install gcc pcre-devel zlib-devel make

cd /usr/src

tar xf nginx-1.15.12.tar.gz

cd nginx-1.15.12

./configure --prefix=/usr/local/nginx

配置目的:
1)檢查環(huán)境 是否 滿足安裝條件 依賴解決
2)指定安裝方式 配置文件 命令文件 各種文件放哪里 開啟模塊功能【內(nèi)置模塊 三方模塊】
3)指定軟件安裝在那里

make -j4

make install

3 nginx相關(guān)目錄

nginx path prefix: "/usr/local/nginx"

nginx binary file: "/usr/local/nginx/sbin/nginx"

nginx modules path: "/usr/local/nginx/modules"

nginx configuration prefix: "/usr/local/nginx/conf"

nginx configuration file: "/usr/local/nginx/conf/nginx.conf"

nginx pid file: "/usr/local/nginx/logs/nginx.pid"

nginx error log file: "/usr/local/nginx/logs/error.log"

nginx http access log file: "/usr/local/nginx/logs/access.log"

4 nginx啟動管理

配置文件測試:/usr/local/nginx/sbin/nginx -t

Nginx啟動:/usr/local/nginx/sbin/nginx

Nginx關(guān)閉:killall –s QUIT nginx

5 nginx測試

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

測試頁面內(nèi)容如下







三 nginx配置文件

#啟動子進程程序默認用戶#user nobody;#一個主進程和多個工作進程。工作進程是單進程的,且不需要特殊授權(quán)即可運行;這里定義的是工作進程數(shù)量worker_processes 1;#全局錯誤日志的位置及日志格式#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events { #每個工作進程最大的并發(fā)數(shù) worker_connections 1024;}#http服務(wù)器設(shè)置http { #設(shè)定mime類型,類型由mime.type文件定義 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"'; #$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址; #$remote_user:用來記錄客戶端用戶名稱; #$time_local: 用來記錄訪問時間與時區(qū); #$request: 用來記錄請求的url與http協(xié)議; #$status: 用來記錄請求狀態(tài);成功是200, #$body_bytes_sent :記錄發(fā)送給客戶端文件主體內(nèi)容大??; #$http_referer:用來記錄從那個頁面鏈接訪問過來的; #$http_user_agent:記錄客戶瀏覽器的相關(guān)信息; #全局訪問日志路徑 #access_log logs/access.log main; #sendfile指令指定 nginx 是否調(diào)用sendfile 函數(shù)(zero copy 方式)來輸出文件,對于普通應(yīng)用,必須設(shè)為on。如果用來進行下載等應(yīng)用磁盤IO重負載應(yīng)用,可設(shè)置為off,以平衡磁盤與網(wǎng)絡(luò)IO處理速度,降低系統(tǒng)uptime。 sendfile on; #此選項可以減少網(wǎng)絡(luò)報文段的數(shù)量 #tcp_nopush on; #長連接超時時間 #keepalive_timeout 0; keepalive_timeout 65; #開啟壓縮 #gzip on; #配置虛擬主機 server { #虛擬主機使用的端口 listen 80; #虛擬主機域名 server_name localhost; #虛擬主機支持的字符集 #charset koi8-r; #虛擬主機的訪問日志路徑 #access_log logs/host.access.log main; #定義web根路徑 location / { #根目錄路徑 root html; #索引頁 index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # #根據(jù)錯誤碼 返回對應(yīng)的頁面 error_page 500 502 503 504 /50x.html; #定義頁面路徑 location = /50x.html { root html; } #定義反向代理服務(wù)器 數(shù)據(jù)服務(wù)器是lamp模型 # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ /.php$ { # proxy_pass http://127.0.0.1; #} #定義PHP為本機服務(wù)的模型 # 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; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #拒絕nginx DR目錄及子目錄下的.htaccess文件訪問 #location ~ //.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} #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; # } #}}





四 默認網(wǎng)站及設(shè)置




1 默認網(wǎng)站




server { listen 80; server_name localhost; location / { root html; index index.html index.htm; #支持目錄瀏覽 autoindex on; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }}

2 訪問控制

[root@localhost ~]# mkdir /usr/local/nginx/html/a[root@localhost html]# vim /usr/local/nginx/conf/nginx.conflocation /a { autoindex on; deny 192.168.11.116; allow all; #基于客戶端IP做過濾,符合條件的允許訪問,不符合的禁止訪問 }[root@localhost ~]# killall -s HUP nginx

3 登陸驗證

[root@localhost ~]# mkdir /usr/local/nginx/html/c[root@localhost html]# vim /usr/local/nginx/conf/nginx.conflocation /c { auth_basic "登陸驗證"; auth_basic_user_file /etc/nginx/htpasswd;}[root@localhost ~]# killall -s HUP nginx

4 日志管理

Nginx訪問日志主要有兩個參數(shù)控制

log_format #用來定義記錄日志的格式(可以定義多種日志格式,取不同名字即可)

access_log #用來指定日至文件的路徑及使用的何種日志格式記錄日志

access_log logs/access.log main;

log_format格式變量: $remote_addr #記錄訪問網(wǎng)站的客戶端地址 $remote_user #遠程客戶端用戶名 $time_local #記錄訪問時間與時區(qū) $request #用戶的http請求起始行信息 $status #http狀態(tài)碼,記錄請求返回的狀態(tài)碼,例如:200、301、404等 $body_bytes_sent #服務(wù)器發(fā)送給客戶端的響應(yīng)body字節(jié)數(shù) $http_referer #記錄此次請求是從哪個連接訪問過來的,可以根據(jù)該參數(shù)進行防盜鏈設(shè)置。 $http_user_agent #記錄客戶端訪問信息,例如:瀏覽器、手機客戶端等 $http_x_forwarded_for #當前端有代理服務(wù)器時,設(shè)置web節(jié)點記錄客戶端地址的配置,此參數(shù)生效的前提是代理服務(wù)器也要進行相關(guān)的x_forwarded_for設(shè)置自定義一個json格式的訪問日志

log_format main_json '{ "@timestamp":"$time_local", "client_ip":"$remote_addr", "request":"$request", "status":"$status", "bytes":"$body_bytes_sent", "x_forwarded":"$http_x_forwarded_for", "referer":"$http_referer" }'; access_log logs/access_json.log main_json;#重新啟動nginx服務(wù)查看訪問日志[root@localhost~]# tail -f /usr/local/nginx/logs/access_json.log


5 防盜鏈

[root@localhost html]# vim /usr/local/nginx/conf/nginx.conflocation / { root html; index index.html index.htm; } #定義訪問資源為圖片類型的location ~* /.(gif|jpg|png|bmp)$ { #定義白名單 none代表直接訪問的,blocked表示被防火墻標記過的請求最后一個是網(wǎng)址 valid_referers none blocked *.baidu.com; #如果不在白名單中則返回403 if ($invalid_referer) { return 403; } }[root@localhost ~]# killall -s HUP nginx #在另外一臺主機寫一個盜鏈測試頁面dnf install httpd -yvim /var/www/html/index.html<html> <head> <title>ce shi</title> <body> <a href="http://192.168.11.16/1.png">daolian</a> </body> </head></html>systemctl restart httpd





五 虛擬主機




1 虛擬主機介紹

就是把一臺物理服務(wù)器劃分成多個“虛擬”的服務(wù)器,每一個虛擬主機都可以有獨立的域名和獨立的目錄

同時發(fā)布兩個網(wǎng)站:

DocumentRoot /usr/local/nginx/html/web1

DocumentRoot /usr/local/nginx/html/web2

2 基于IP的虛擬主機

應(yīng)用場景:IP充足的環(huán)境

server { listen 192.168.11.251:80; location / { root html/web1; index index.html index.htm index.php; }}server { listen 192.168.11.252:80;location / { root html/web2; index index.html index.htm; }}

基于IP的虛擬主機特點

不同IP對應(yīng)不同網(wǎng)站

訪問方便,用戶直接使用默認端口即可訪問

服務(wù)器需要有多個IP地址(一個公網(wǎng)IP大概一年的費用是600左右)

維護方便,基于獨立IP的站點,便于監(jiān)控、維護。

3 基于端口的虛擬主機

#只需要一個IP

#缺點 端口你是無法告訴公網(wǎng)用戶 無法適用于公網(wǎng)客戶 適合內(nèi)部用戶

基于端口server { listen 80; #server_name www.abc.com; location / { root html/web1; index index.html index.htm index.php; }}server { listen 8080; #server_name www.abc.com; location / { root html/web2; index index.html index.htm; }}

基于端口的虛擬主機特點

不同端口對應(yīng)不同網(wǎng)站

訪問需要加端口

節(jié)省IP地址

適合私網(wǎng)運行

4 基于域名的虛擬主機

#一個網(wǎng)站必然有一個域名

基于域名server { listen 80; server_name web1.a.com; location / { root html/web1; index index.html index.htm index.php; }}server { listen 80; server_name web2.b.com; location / { root html/web2; index index.html index.htm; }}

基于域名的虛擬主機特點

不同域名對應(yīng)不同網(wǎng)站

需要多個域名 可以是二級或三級域名

每個站點使用默認端口,方便用戶訪問

只需要一個IP地址,節(jié)約成本

適合公網(wǎng)環(huán)境







六 反向代理




1 代理介紹

代理在網(wǎng)絡(luò)中使用是比較常見的,比如大家去國外網(wǎng)站查找學(xué)習資料的時候就會用到代理。其原理也比較簡單:

1)用戶將請求發(fā)給代理服務(wù)器

2)代理服務(wù)器代用戶去訪問數(shù)據(jù)

3)代理服務(wù)器將數(shù)據(jù)給用戶

正常沒有代理情況上網(wǎng)










代理服務(wù)器場景










代理服務(wù)器扮演的就是一個中間人的角色。

代理分為正向代理和反向代理兩種類型:

正向代理:代理用戶訪問其他網(wǎng)站,比如ss,藍燈。

反向代理:用來發(fā)布服務(wù)器,比如nginx

我們主要介紹的是反向代理,使用反向代理發(fā)布公司的站點。(國家嚴厲打擊私單亂建翻墻代理服務(wù)器)

2 應(yīng)用場景

1)堡壘機:堡壘機承擔所有的外部訪問,保護后端服務(wù)器的安全










2)業(yè)務(wù)發(fā)布服務(wù)器:將多個服務(wù)器通過虛擬主機的方式發(fā)布到公網(wǎng)










3)緩存服務(wù)器:CDN加速










3 反向代理原理

1)客戶端通過瀏覽器 發(fā)起請求 代理服務(wù)器

2)代理服務(wù)器 接受請求

3)代理服務(wù)器 發(fā)起請求 業(yè)務(wù)服務(wù)器

4)業(yè)務(wù)服務(wù)器 接受請求

5)業(yè)務(wù)服務(wù)器 處理請求

6)業(yè)務(wù)服務(wù)器 響應(yīng)請求 代理服務(wù)器

7)代理服務(wù)器 響應(yīng)請求 客戶端

8)客戶端通過瀏覽器渲染請求并展示給用戶

4 反向代理實現(xiàn)

proxy_pass: nginx反向代理指令

反向代理實現(xiàn)

location / {index index.php index.html index.htm; #定義首頁索引文件的名稱proxy_pass http://mysvr ;#請求轉(zhuǎn)向mysvr 定義的服務(wù)器列表}反向代理優(yōu)化

proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;client_max_body_size 10m; #允許客戶端請求的最大單文件字節(jié)數(shù)client_body_buffer_size 128k; #緩沖區(qū)代理緩沖用戶端請求的最大字節(jié)數(shù),proxy_connect_timeout 90; #nginx跟后端服務(wù)器連接超時時間(代理連接超時)proxy_send_timeout 90; #后端服務(wù)器數(shù)據(jù)回傳時間(代理發(fā)送超時)proxy_read_timeout 90; #連接成功后,后端服務(wù)器響應(yīng)時間(代理接收超時)proxy_buffer_size 4k; #設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小proxy_buffers 4 32k; #proxy_buffers緩沖區(qū),網(wǎng)頁平均在32k以下的話,這樣設(shè)置proxy_busy_buffers_size 64k; #高負荷下緩沖大?。╬roxy_buffers*2)proxy_temp_file_write_size 64k; #設(shè)定緩存文件夾大小,大于這個值,將從upstream服務(wù)器傳





七 下載限速




1 限速介紹

在生產(chǎn)環(huán)境中,為了保護WEB服務(wù)器的安全,我們都會對用戶的訪問做出一些限制,保證服務(wù)器的安全及資源的合理分配。

限流(rate limiting)是NGINX眾多特性中最有用的,也是經(jīng)常容易被誤解和錯誤配置的,特性之一訪問請求限速。該特性可以限制某個用戶在一個給定時間段內(nèi)能夠產(chǎn)生的HTTP請求數(shù)。請求可以簡單到就是一個對于主頁的GET請求或者一個登陸表格的POST請求。用于安全目的上,比如減慢暴力密碼破解攻擊。通過限制進來的請求速率,并且(結(jié)合日志)標記出目標URLs來幫助防范DDoS攻擊。一般地說,限流是用在保護上游應(yīng)用服務(wù)器不被在同一時刻的大量用戶請求湮沒

限速說的很籠統(tǒng),其實限速分為很多種限速方法:

1)下載速度限速

2)單位時間內(nèi)請求數(shù)限制

3)基于客戶端的并發(fā)連接限速

nginx限速模塊

Nginx官方版本限制IP的連接和并發(fā)分別有兩個模塊:

limit_req_zone 用來限制單位時間內(nèi)的請求數(shù),即速率限制,采用的漏桶算法 "leaky bucket"。

limit_req_conn 用來限制同一時間連接數(shù),即并發(fā)限制。

2 應(yīng)用場景

下載限速:限制下載速度及并發(fā)連接數(shù),應(yīng)用在下載服務(wù)器中,保護帶寬及服務(wù)器的IO資源。

請求限速:限制單位時間內(nèi)用戶訪問請求,防止惡意攻擊,保護服務(wù)器及資源安全。

3 限速原理

漏桶原理










算法思想是: 水(請求)從上方倒入水桶,從水桶下方流出(被處理); 來不及流出的水存在水桶中(緩沖),以固定速率流出; 水桶滿后水溢出(丟棄)。 這個算法的核心是:緩存請求、勻速處理、多余的請求直接丟棄。 相比漏桶算法,令牌桶算法不同之處在于它不但有一只“桶”,還有個隊列,這個桶是用來存放令牌的,隊列才是用來存放請求的。

4 限速實現(xiàn)

1)單位時間內(nèi)請求數(shù)限制

#基于IP對下載速率做限制 限制每秒處理1次請求,對突發(fā)超過5個以后的請求放入緩存區(qū) http { limit_req_zone $binary_remote_addr zone=test:10m rate=1r/s; server { location /abc { limit_req zone=test burst=5 nodelay; }}limit_req_zone $binary_remote_addr zone=test:10m rate=1r/s;第一個參數(shù):$binary_remote_addr 表示通過remote_addr這個標識來做限制,“binary_”的目的是縮寫內(nèi)存占用量,是限制同一客戶端ip地址。第二個參數(shù):zone=test:10m表示生成一個大小為10M,名字為test的內(nèi)存區(qū)域,用來存儲訪問的頻次信息。第三個參數(shù):rate=1r/s表示允許相同標識的客戶端的訪問頻次,這里限制的是每秒1次,還可以有比如30r/m的。limit_req zone=test burst=5 nodelay;第一個參數(shù):zone=test 設(shè)置使用哪個配置區(qū)域來做限制,與上面limit_req_zone 里的name對應(yīng)。第二個參數(shù):burst=5,重點說明一下這個配置,burst爆發(fā)的意思,這個配置的意思是設(shè)置一個大小為5的緩沖區(qū)當有大量請求(爆發(fā))過來時,超過了訪問頻次限制的請求可以先放到這個緩沖區(qū)內(nèi)。第三個參數(shù):nodelay,如果設(shè)置,超過訪問頻次而且緩沖區(qū)也滿了的時候就會直接返回503,如果沒有設(shè)置,則所有請求會等待排隊。重啟nginx服務(wù)測試機[root@slave tmp]# for i in `seq 1 10`; do (wget http://192.168.11.16/abc/bigfile -P /tmp) & done[root@slave tmp]# killall wget 會出現(xiàn)不同的狀態(tài),有的是以退出有的是已終止2)限制并發(fā)連接數(shù)

#基于IP做連接限制 限制同一IP并發(fā)為1limit_conn_zone $binary_remote_addr zone=addr:10m;server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } location /abc { limit_conn addr 1; } }}重啟nginx服務(wù)測試機[root@slave tmp]# for i in `seq 1 10`; do (wget http://192.168.11.16/abc/bigfile -P /tmp) & done#退出了9個只能開啟一個3)限制下載速度

下載速度為100kserver { listen 80; server_name localhost; location / { root html; index index.html index.htm; } location /abc { limit_rate 100k; } }}重啟nginx服務(wù)測試機使用wget命令測試4)綜合案例

限制web服務(wù)器請求處理為1秒一個,觸發(fā)值為5;

限制并發(fā)連接數(shù)為4;

限制下載速度為100.

http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65;#基于IP做連接限制 限制同一IP并發(fā)為1 下載速度為100Klimit_conn_zone $binary_remote_addr zone=addr:10m;#基于IP對下載速率做限制 限制每秒處理1次請求,對突發(fā)超過5個以后的請求放入緩存區(qū) limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } location /abc { limit_req zone=one burst=5 nodelay; limit_conn addr 4; limit_rate 100k; } }}





八 URL重寫




1 URL重寫介紹

和apache等web服務(wù)軟件一樣,rewrite的主要功能是實現(xiàn)URL地址的重定向。Nginx的rewrite功能需要PCRE軟件的支持,即通過perl兼容正則表達式語句進行規(guī)則匹配的。默認參數(shù)編譯nginx就會支持rewrite的模塊,但是也必須要PCRE的支持。

Rewrite功功能是Nginx服務(wù)器提供的一個重要功能。幾乎是所有的web產(chǎn)品必備技能,用于實現(xiàn)URL重寫。URL重寫是非常有用的功能,比如它可以在我們在改變網(wǎng)站結(jié)構(gòu)后,不需要客戶端修改原來的書簽,也不需要其他網(wǎng)站修改對我們網(wǎng)站的友情鏈接,還可以在一定程度上提高網(wǎng)站的安全性,能夠讓我們的網(wǎng)站顯得更專業(yè)。

2 應(yīng)用場景

域名變更 (京東)

用戶跳轉(zhuǎn) (從某個連接跳到另一個連接)

偽靜態(tài)場景 (便于CDN緩存動態(tài)頁面數(shù)據(jù))

3 URL重寫原理










4 URL重寫

URL 模塊語法

set指令 自定義變量

Syntax: set $variable value;

Default: —

Context: server, location, if

將http://www.a.com 重寫為 http://www.a.com/hellolocation / { set $name hello; rewrite ^(.*)$ http://www.a.com/$name; }重啟nginx服務(wù)測試機打開瀏覽器可以看到頁面跳轉(zhuǎn)if 指令 負責判斷

Syntax: if (condition) { ... }

Default: —

Context: server, location

條件匹配

#模糊匹配 ~匹配 !~不匹配 ~* 不區(qū)分大小寫的匹配

#精確匹配 = !=

location / { root html; index index.html index.htm; if ($http_user_agent ~* 'Firefox') { return 403; } }重啟nginx客戶機打開火狐瀏覽器測試,看看能否看到403return 指令 定義返回數(shù)據(jù)

Syntax: return code [text];

return code URL;

return URL;

Default: —

Context: server, location, if

location / { root html; index index.html index.htm; if ($http_user_agent ~* 'Firefox') { return 403; } }


rewrite指令 實現(xiàn)重寫url

rewrite [flag];

關(guān)鍵字 正則 替代內(nèi)容 flag標記

flag:

permanent標志:永久重定向

域名跳轉(zhuǎn)www.a.com 重寫為 www.b.comserver { listen 80; server_name www.a.com; location / { rewrite ^/$ http://www.b.com permanent; }}redirect標志:臨時重定向

域名跳轉(zhuǎn)www.a.com 重寫為 www.b.comserver { listen 80; server_name www.a.com; location / { rewrite ^/$ http://www.b.com redirect; }}break標志: 類似臨時重定向

域名跳轉(zhuǎn)www.a.com 重寫為 www.b.comserver { listen 80; server_name www.a.com; location / { rewrite ^/$ http://www.b.com break; }}last標志:

url重寫后,馬上發(fā)起一個新的請求,再次進入server塊,重試location匹配,超過10次匹配不到報500錯誤,地址欄url不變

last 一般出現(xiàn)在server或if中

根據(jù)用戶瀏覽器重寫訪問目錄

如果是firefox瀏覽器 就將 http://192.168.11.16/$URI 重寫為 http://192.168.11.16/firefox/$URI實現(xiàn) 步驟1)URL重寫2)請求轉(zhuǎn)給本機locationlocation / {.....if ($http_user_agent ~* 'firefox'){ #^ 以什么開頭 ^a #$ 以什么結(jié)尾 c$ #. 除了回車以外的任意一個字符 #* 前面的字符可以出現(xiàn)多次或者不出現(xiàn) #更多內(nèi)容看正則表達式 rewrite ^(.*)$ /firefox/$1 last; } location /firefox { root html ; index index.html; }}[root@localhost html]# pwd/usr/local/nginx/html[root@localhost html]# mkdir firefox[root@localhost html]# echo firefox > firefox/index.html[root@localhost html]# killall nginx[root@localhost html]# /usr/local/nginx/sbin/nginx 客戶機瀏覽器測試








九 nginx優(yōu)化




1 并發(fā)優(yōu)化

nginx工作模式:主進程+工作進程

啟動工作進程數(shù)量worker_processes 4;#指定運行的核的編號,采用掩碼的方式設(shè)置編號worker_cpu_affinity 0001 0010 0100 1000;events {單個工作進程維護的請求隊列長度 worker_connections 1024;}

2 長連接

減少服務(wù)器維護因為與客戶端建立http連接產(chǎn)生的大量tcp三次握手四次斷開的開銷

keepalive_timeout 0; 0代表關(guān)閉#keepalive_timeout 100;#keepalive_requests 8192;

3 壓縮

降低傳輸時間,增加用戶體驗度;降低公司帶寬費用。

gzip on;gzip_proxied any;gzip_min_length 1k;gzip_buffers 4 8k;gzip_comp_level 6;gzip_types text/plain text/css application/x-javascript application/javascript application/xml;# 開啟gzip gzip off; # 啟用gzip壓縮的最小文件,小于設(shè)置值的文件將不會壓縮 gzip_min_length 1k; # gzip 壓縮級別,1-9,數(shù)字越大壓縮的越好,也越占用CPU時間,后面會有詳細說明 gzip_comp_level 1; # 進行壓縮的文件類型。javascript有多種形式。其中的值可以在 mime.types 文件中找到。 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml; # 是否在http header中添加Vary: Accept-Encoding,建議開啟 gzip_vary on; # 禁用IE 6 gzip gzip_disable "MSIE [1-6]/."; # 設(shè)置壓縮所需要的緩沖區(qū)大小 gzip_buffers 32 4k; # 設(shè)置gzip壓縮針對的HTTP協(xié)議版本 gzip_http_version 1.0;

4 靜態(tài)緩存

將部分數(shù)據(jù)緩存在用戶本地磁盤,用戶加載時,如果本地和服務(wù)器的數(shù)據(jù)一致,則從本地加載。提升用戶訪問速度,提升體驗度。節(jié)省公司帶寬成本。

expires指令:開啟緩存并指定靜態(tài)緩存時間location ~* /.(png|gif)$ { expires 1h; }


十 LNMP

介紹

說到LNMP,我們不得不提到LAMP,我們知道,LAMP是一個多C/S架構(gòu)的平臺,在此架構(gòu)中web客戶端基于TCP/IP通過http協(xié)議發(fā)起傳送,這個請求可能是靜態(tài)的也可能是動態(tài)的。所以web服務(wù)器通過發(fā)起請求的后綴來判斷,如果是靜態(tài)的就由web服務(wù)器自行處理,然后將資源發(fā)給客戶端。如果是動態(tài)的web服務(wù)器會通過CGI(Common Gateway Interfence)協(xié)議發(fā)起給php。如果php以模塊形式與web服務(wù)器聯(lián)系,那么它們是通過內(nèi)部共享內(nèi)存的方式,如果php單獨的一臺服務(wù)器,那么它們是以sockets套接字的方式進行通信(這又是一個C/S架構(gòu)),這時php會相應(yīng)的執(zhí)行一段程序,如果在程序執(zhí)行時需要一些數(shù)據(jù),那么php就會通過 mysql協(xié)議發(fā)送給mysql服務(wù)器(這也可以看作是一個C/S架構(gòu)),由mysql服務(wù)器處理,將數(shù)據(jù)供給php程序。




LNMP

是指一組通常一起使用來運行動態(tài)網(wǎng)站或者服務(wù)器的自由軟件名稱首字母縮寫。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。LNMP架構(gòu)和LAMP架構(gòu)挺像的,只不過一個用的Apache一個用的Nginx。LNMP就是Linux+Nginx+MySQL/mairadb+PHP,Nginx和Apache一樣都是web服務(wù)器。還有一點不同的是在LNMP結(jié)構(gòu)里php會啟動一個php-fpm服務(wù),而大多數(shù)時候LANP中的php只是作為Apache的一個模塊存在(在CentOS8中LAMP架構(gòu)也啟動php-fpm服務(wù))。

Nginx會把用戶的動態(tài)頁面請求交給php服務(wù)去處理,這個php服務(wù)就會去和數(shù)據(jù)庫進行交互。用戶的靜態(tài)頁面請求Nginx會直接處理,Nginx處理靜態(tài)請求的速度要比apache快很多性能上要好,所以apache和Nginx在動態(tài)請求處理上區(qū)別不大,但如果是靜態(tài)請求處理的話就會明顯發(fā)現(xiàn)Nginx要快于apache,而且Nginx能承受的并發(fā)量要比apache大,可以承受好幾萬的并發(fā)量,所以大一些的網(wǎng)站都會使用Nginx作為web服務(wù)器。










動態(tài)頁面和靜態(tài)頁面

靜態(tài)網(wǎng)頁:

(1)靜態(tài)網(wǎng)頁不能簡單地理解成靜止不動的網(wǎng)頁,他主要指的是網(wǎng)頁中沒有程序代碼,只有HTML(即:超文本標記語言),一般后綴為.html,.htm,或者.xml等。雖然靜態(tài)網(wǎng)頁的頁面一旦做成,內(nèi)容就不會再改變了。但是,靜態(tài)網(wǎng)頁也包括一些能動的部分,這些主要是一些GIF動畫等

(2)靜態(tài)網(wǎng)頁的打開,用戶可以直接雙擊,并且不管任何人任何時間打開的頁面的內(nèi)容都是不變的。

動態(tài)網(wǎng)頁:

(1)動態(tài)網(wǎng)頁是指跟靜態(tài)網(wǎng)頁相對的一種網(wǎng)頁編程技術(shù)。動態(tài)網(wǎng)頁的網(wǎng)頁文件中除了HTML標記以外,還包括一些特定功能的程序代碼,這些代碼可以使得瀏覽器和服務(wù)器可以交互,所以服務(wù)器端根據(jù)客戶的不同請求動態(tài)的生成網(wǎng)頁內(nèi)容。即:動態(tài)網(wǎng)頁相對于靜態(tài)網(wǎng)頁來說,頁面代碼雖然沒有變,但是顯示的內(nèi)容卻是可以隨著時間、環(huán)境或者數(shù)據(jù)庫操作的結(jié)果而發(fā)生改變的。

(2)動態(tài)網(wǎng)頁,與網(wǎng)頁上的各種動畫、滾動字幕等視覺上的動態(tài)效果沒有直接關(guān)系,動態(tài)網(wǎng)頁也可以是純文字內(nèi)容的,也可以是包含各種動畫的內(nèi)容,這些只是網(wǎng)頁具體內(nèi)容的表現(xiàn)形式,無論網(wǎng)頁是否具有動態(tài)效果,只要是采用了動態(tài)網(wǎng)站技術(shù)(如PHP、ASP、JSP等)生成的網(wǎng)頁都可以稱為動態(tài)網(wǎng)頁。

動態(tài)網(wǎng)頁和靜態(tài)網(wǎng)頁的區(qū)別:

(1)更新和維護:

靜態(tài)網(wǎng)頁內(nèi)容一經(jīng)發(fā)布到網(wǎng)站服務(wù)器上,無論是否有用戶訪問,這些網(wǎng)頁內(nèi)容都是保存在網(wǎng)站服務(wù)器上的。如果要修改網(wǎng)頁的內(nèi)容,就必須修改其源代碼,然后重新上傳到服務(wù)器上。靜態(tài)網(wǎng)頁沒有數(shù)據(jù)庫的支持,當網(wǎng)站信息量很大的時候網(wǎng)頁的制作和維護都很困難

動態(tài)網(wǎng)頁可以根據(jù)不同的用戶請求,時間或者環(huán)境的需求動態(tài)的生成不同的網(wǎng)頁內(nèi)容,并且動態(tài)網(wǎng)頁一般以數(shù)據(jù)庫技術(shù)為基礎(chǔ),可以大大降低網(wǎng)站維護的工作量

(2)交互性:

靜態(tài)網(wǎng)頁由于很多內(nèi)容都是固定的,在功能方面有很大的限制,所以交互性較差

動態(tài)網(wǎng)頁則可以實現(xiàn)更多的功能,如用戶的登錄、注冊、查詢等

(3)響應(yīng)速度:

靜態(tài)網(wǎng)頁內(nèi)容相對固定,容易被搜索引擎檢索,且不需要連接數(shù)據(jù)庫,因此響應(yīng)速度較快

動態(tài)網(wǎng)頁實際上并不是獨立存在于服務(wù)器上的網(wǎng)頁文件,只有當用戶請求時服務(wù)器才返回一個完整的網(wǎng)頁,其中涉及到數(shù)據(jù)的連接訪問和查詢等一系列過程,所以響應(yīng)速度相對較慢

(4)訪問特點:

靜態(tài)網(wǎng)頁的每個網(wǎng)頁都有一個固定的URL,且網(wǎng)頁URL以.htm、.html、.shtml等常見形式為后綴,而不含有“?”,可以直接雙擊打開

動態(tài)網(wǎng)頁中的“?”對搜索引擎檢索存在一定的問題,搜索引擎一般不可能從一個網(wǎng)站的數(shù)據(jù)庫中訪問全部網(wǎng)頁,或者出于技術(shù)方面的考慮,搜索之中不去抓取網(wǎng)址中“?”后面的內(nèi)容,不能直接雙擊打開




綜上所述

如果網(wǎng)頁內(nèi)容相對的簡單,不需要頻繁的進行改動,或者只是為了展示信息等,就用靜態(tài)網(wǎng)頁,簡單易操作,不需要管理數(shù)據(jù)庫等

如果網(wǎng)頁內(nèi)容相對復(fù)雜,功能多,改動頻繁,實時性的內(nèi)容多,就用動態(tài)網(wǎng)頁




LNMP架構(gòu)工作流程













案例

利用LNMP+wordpress搭建博客網(wǎng)站

WordPress

一款使用PHP語言開發(fā)的博客平臺,用戶可以在支持PHP和MySQL數(shù)據(jù)庫的服務(wù)器上架設(shè)屬于自己的網(wǎng)站。也可以把 WordPress當作一個內(nèi)容管理系統(tǒng)來使用。WordPress以上手簡單、功能強大、擴展性與靈活性著稱,加上開源免費,主題插件極其豐富,無論作為新手學(xué)習搭建個人博客,還是專業(yè)用戶用于架設(shè)復(fù)雜的企業(yè)電商網(wǎng)站、論壇等,WP 都能完美滿足需求。你幾乎能用 WP 打造成任何類型的網(wǎng)站,只有想不到,沒有做不到。而且全球數(shù)以億計各類知名網(wǎng)站都是基于 WP 構(gòu)建,根據(jù)官方統(tǒng)計,目前全球有 32% 的網(wǎng)站都由 WP 搭建,由于它實在太過流行,因此無論插件、主題、教程、文檔等資源都極其豐富,你選都選不完。而且網(wǎng)上關(guān)于性能優(yōu)化、問題解決等討論也非常的全面?;旧蠈W(xué)習建網(wǎng)站這事,您只需玩轉(zhuǎn) WP 就夠了!所以,如果要建站或想嘗試學(xué)習建站,那 WP 絕對值得你優(yōu)先考慮。

wordpress官網(wǎng):https://cn.wordpress.org打開可能會有問題 (429錯誤),可以去https://ww.wp.xz.cn下載軟件包

環(huán)境介紹

一臺安裝CentOS8的主機

關(guān)閉SElinux和防火墻

配置好yum源

掛載光盤

可以聯(lián)網(wǎng)

wordpress軟件包下載地址:https://ww.wp.xz.cn/latest.zip




流程

step1 部署LNMP架構(gòu)

[root@client ~]# dnf -y install nginx php* mariadb-server mariadb -y


step2 設(shè)置php-fpm

[root@client ~]# vim /etc/php-fpm.d/www.conf user = nginxgroup = nginx#php-fpm服務(wù)默認以apache用戶啟動,將啟動用戶身份修改nginx


step3 啟動服務(wù)

[root@client ~]# systemctl restart nginx.service php-fpm.service mariadb.service


step4 生成php測試頁面

[root@client ~]# echo "<?php phpinfo();?>" >> /usr/share/nginx/html/index.php#系統(tǒng)自帶的nginx的頁面文件存放在/usr/share/nginx/html/目錄中


step5 打開瀏覽器測試













step6 為數(shù)據(jù)庫設(shè)置密碼并創(chuàng)建相應(yīng)的數(shù)據(jù)庫

[root@client ~]# mysqladmin -u root password 123456[root@client ~]# mysql -u root -pEnter password: MariaDB [(none)]> create database wordpress charset=utf8;Query OK, 1 row affected (0.001 sec)MariaDB [(none)]> quitBye


step7 準備wordpress

[root@client ~]# cd /usr/share/nginx/html/[root@client html]# rm -fr *#####刪除nginx自帶的頁面文件,以及剛才測試生成的php頁面[root@client ~]# unzip latest-zh_CN.zip [root@client ~]# cd wordpress/[root@client wordpress]# mv * /usr/share/nginx/html/####將wordpress文件移動到nginx頁面文件存放的目錄[root@client wordpress]# cd /usr/share/nginx/html/[root@client html]# chown -R nginx.nginx *###文件的默認所有者是root,為了避免權(quán)限的問題,將所有者改為nginx


step8 安裝wordpress




























復(fù)制提示頁面內(nèi)容,按照要求手工創(chuàng)建wp-config.php文件并將內(nèi)容粘貼[root@client html]# vim /usr/share/nginx/html/wp-config.php


切換到安裝頁面點擊現(xiàn)在安裝



















step9 登錄與用戶注冊設(shè)置































開啟用戶注冊功能









































































發(fā)送測試郵件

注意:公網(wǎng)的郵箱需要在設(shè)置里開啟SMTP/POP等功能,在按照提示操作就可以了













收到測試郵件之后,注銷管理員賬號,返回登錄界面,選擇注冊




























將郵件中的鏈接復(fù)制到瀏覽器中粘貼































如果想在其它主機可以直接訪問而不需要修改URL的話













wordpress打開速度慢

有的時候wordpress訪問的時候會非常慢,尤其是登錄進入后臺時,主要是因為wordpress應(yīng)用了一些外部的資源,如google的資源;如果你的主機沒有聯(lián)網(wǎng),那么打開的速度確實非常的慢,但有時,即便是聯(lián)網(wǎng)也會由于無法訪問這些外部資源導(dǎo)致速度慢,此時,可以在wordpress中搜索安裝一個叫“WP Acceleration for China"的加速插件并啟用,將這些無法訪問的外部資源換成國內(nèi)的相應(yīng)資源。就可以解決訪問慢的問題




總結(jié)

什么是nginx

它可以做什么

nginx有哪些優(yōu)點和缺點

如何安裝部署

配置文件的字段含義

nginx的基本使用

虛擬主機的使用

反向代理、限速

URL重寫、優(yōu)化

重點:nginx的安裝部署,配置文件字段含義,基本功能的使用,虛擬主機的使用,如何實現(xiàn)反向代理,如何實現(xiàn)URL重寫

難點:配置文件字段及格式,各種基本功能使用,虛擬主機如何去設(shè)置,反向代理如何去設(shè)置,如何實現(xiàn)URL重寫



關(guān)鍵詞:使用

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉