Nginx動靜分離的示例代碼
為了加快網(wǎng)站的解析速度,就是把動態(tài)頁面和靜態(tài)頁面由不同的服務(wù)器來解析,加快解析速度。降低原來單個服務(wù)器的壓力。
簡單來說,就是 使用正則表達(dá)式匹配過濾,然后交個不同的服務(wù)器。
1. 準(zhǔn)備環(huán)境
準(zhǔn)備一個nginx代理 兩個http 分別處理動態(tài)和靜態(tài)
| IP | 作用 | 安裝軟件 |
|---|---|---|
| 192.168.221.130 | nginx反向代理服務(wù)器 | nginx |
| 192.168.221.136 | nginx靜態(tài)資源網(wǎng)站 | nginx |
| 192.168.221.138 | nginx動態(tài)資源網(wǎng)站 | php |
2. 配置 Nginx 靜態(tài)資源服務(wù)器
expires功能說明(為客戶端配置緩存時間)
nginx緩存的設(shè)置可以提高網(wǎng)站性能,對于網(wǎng)站的圖片,尤其是新聞網(wǎng)站,圖片一旦發(fā)布,改動的可能是非常小的,為了減小對服務(wù)器請求的壓力,提高用戶瀏覽速度,我們可以通過設(shè)置nginx中的expires,讓用戶訪問一次后,將圖片緩存在用戶的瀏覽器中,且時間比較長的緩存。
原理:當(dāng)nginx設(shè)置了expires后,例如設(shè)置為:expires 10d; 那么用戶在10天內(nèi)請求的時候,都只會訪問瀏覽器中的緩存,而不會去請求nginx。
注:需要注意的是,這種緩存方式只能在用戶不對瀏覽器強(qiáng)制刷新的情況下生效,如果用戶通過url來進(jìn)行訪問,是可以訪問到緩存的。
靜態(tài)資源配置(192.168.221.136)
[root@localhost ~]# cd /etc/nginx/conf.d/
[root@localhost conf.d]# cp default.conf jingtai.conf
[root@localhost conf.d]# vim jingtai.conf
server {
listen 80; #注意修改default.conf配置文件中的默認(rèn)端口
server_name localhost;
location ~ \.(html|jpg|png|js|css) {
root /usr/share/nginx/html/jingtai;
expires 1d; #為客戶端設(shè)置靜態(tài)資源緩存時間
}
}
//創(chuàng)建圖片存放目錄
[root@localhost ~]# cd /usr/share/nginx/html/
[root@localhost html]# ls
50x.html index.html
[root@localhost html]# mkdir jingtai
//上傳一張圖片到服務(wù)器中
[root@localhost html]# cd jingtai/
[root@localhost jingtai]# mv 1.png test.jpg //隨便放一張圖片
//重啟nginx
[root@localhost conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost conf.d]# systemctl restart nginx
//測試:
[root@nginx-yum2 conf.d]# curl -I http://192.168.221.136/test.jpg
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Thu, 27 Jul 2023 07:49:14 GMT
Content-Type: image/jpeg
Content-Length: 278266
Last-Modified: Wed, 09 Jun 2021 19:59:38 GMT
Connection: keep-alive
ETag: "60c11daa-43efa"
Expires: Fri, 28 Jul 2023 07:49:14 GMT //緩存到期時間
Cache-Control: max-age=86400 //緩存持續(xù)時間秒
Accept-Ranges: bytes
3. 動態(tài)資源服務(wù)器配置
3.1. 安裝php-fpm
//動態(tài)資源配置:yum 安裝php7.1 [root@localhost ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm [root@localhost ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm [root@localhost ~]# yum install php71w-xsl php71w php71w-ldap php71w-cli php71w-common php71w-devel php71w-gd php71w-pdo php71w-mysql php71w-mbstring php71w-bcmath php71w-mcrypt -y [root@localhost ~]# yum install -y php71w-fpm
- PHP-FPM(FastCGI Process Manager:FastCGI進(jìn)程管理器)是一個PHPFastCGI管理器。
- 它提供了更好的PHP進(jìn)程管理方式,可以有效控制內(nèi)存和進(jìn)程、可以平滑重載PHP配置。
- 在日常運維中,我們主要將PHP-FPM 的配置文件分為主配置文件和 pool配置文件(每個pool配置文件通常對應(yīng)一個Nginx虛擬主機(jī))。
3.2. 修改php-fpm配置文件
- 主要是php的優(yōu)化
- 主配置文件 php-fpm.conf,常用配置如下:
//設(shè)置php-fpm最大進(jìn)程數(shù)
[root@localhost ~]# cp php-fpm.conf{,.bak}
[root@localhost ~]# vim /etc/php-fpm.conf
[global]
...
;動態(tài)方式下開啟的php-fpm進(jìn)程的最大數(shù)量(默認(rèn)是注釋的)
process.max = 2048
;設(shè)置 fpm 在后臺運行(默認(rèn)是打開的)
daemonize = yes
; 設(shè)置進(jìn)程可以打開的文件描述符數(shù)量(默認(rèn)是注釋的)
rlimit_files = 65535
; 設(shè)置FPM 的事件處理機(jī)制
events.mechanism = epoll
; 加載pool 配置
include = /etc/php-fpm.d/*.conf
//設(shè)置進(jìn)程池
[root@localhost php.d]# cp /etc/php-fpm.d/www.conf{,.bak}
[root@localhost php.d]# vim /etc/php-fpm.d/www.conf
[www]
...
; 設(shè)置動態(tài)dynamic進(jìn)程池/靜態(tài)static(默認(rèn)是打開的)
pm = dynamic
; 設(shè)置每個進(jìn)程可處理的請求數(shù),當(dāng)進(jìn)程達(dá)到這個請求數(shù)量后會自動釋放在重新生成新的進(jìn)程。避免內(nèi)存泄漏等情況
pm.max_requests = 1500
; 終止請求超時時間。一個請求若處理大于20s ,則會自動kill掉。避免進(jìn)程堆積
request_terminate_timeout = 20
; 限制 FPM 允許解析的腳本擴(kuò)展名. 這里不限制,F(xiàn)PM可以解析任何擴(kuò)展名的文件
security.limit_extensions = ""
#修改php上傳文件的大小
[root@localhost php.d]# vim /etc/php.ini
max_execution_time = 0 #默認(rèn)的該腳本最久執(zhí)行時間為30秒,就是說超過30秒嗎,該腳本就停止執(zhí)行,0為不限制時間
post_max_size = 150M #默認(rèn)POST數(shù)據(jù)大小為8M,可以按實際情況修改
upload_max_filesize = 100M #默認(rèn)上傳文件最大為2M,可以按實際情況修改。
注:另外要說明的是,post_max_size 大于 upload_max_filesize 為佳
[root@localhost php.d]# systemctl start php-fpm
[root@localhost php.d]# systemctl enable php-fpm
3.3. 配置138上的 Nginx+php
動態(tài)服務(wù)器編輯nginx連接php
編輯nginx的配置文件:
server {
listen 80; #注意將default.conf的端口改掉
server_name localhost;
location ~ \.php$ {
root /var/www; #指定網(wǎng)站目錄
fastcgi_pass 127.0.0.1:9000; #開啟fastcgi連接php地址
fastcgi_index index.php; #指定默認(rèn)文件
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #站點根目錄,取決于root配置項
include fastcgi_params; #包含fastcgi使用的常量
}
}
[root@localhost var]# mkdir www [root@localhost var]# cd www/ [root@localhost www]# vim index.php <?php phpinfo(); ?> //重啟nginx [root@localhost www]# systemctl restart nginx
瀏覽器訪問130上的php頁面,http://192.168.221.138/index.php,確保源站訪問正常
4. 配置 Nginx 動靜分離
proxy_cache和expires的介紹
通過 expires 指令設(shè)置的緩存,主要是針對客戶端瀏覽器的。如果我們能將靜態(tài)資源的緩存設(shè)置在服務(wù)器端,當(dāng)多個用戶訪問同一個資源時,緩存命中率及系統(tǒng)的性能將大大提升。
proxy_cache介紹:當(dāng)nginx作為反向代理時,通常只有動態(tài)的請求,也就是不同的用戶訪問的同一個url看到的內(nèi)容是不同的,這個時候才會交由上游服務(wù)器處理,但是有些內(nèi)容可能是一段時間內(nèi)是不會變化的,這個時候為了減輕上游服務(wù)器的壓力,那么就讓nginx把上游返回的內(nèi)容緩存一段時間,比如緩存一天,在一天之內(nèi)即是上游服務(wù)器內(nèi)容發(fā)生了變化也不管,nginx只返回緩存到的內(nèi)容給用戶。
proxy_cache:實現(xiàn)服務(wù)器端緩存,主要設(shè)置在反向代理上面
nginx動靜分離的配置
#配置nginx反向代理upstream,并實現(xiàn)服務(wù)器端緩存時間
#注意:是130上面配置
upstream static {
server 192.168.221.136:80 weight=1 max_fails=1 fail_timeout=60s;
}
upstream php {
server 192.168.221.138:80 weight=1 max_fails=1 fail_timeout=60s;
}
proxy_cache_path /tmp/proxy_cache levels=1:2 keys_zone=proxy_cache:64m inactive=1d max_size=128m;
server {
listen 80;
server_name localhost;
#動態(tài)資源加載
location ~ \.(php|jsp)$ {
proxy_pass http://php;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#靜態(tài)資源加載
location ~ .*\.(html|jpg|png|css|js)$ {
proxy_pass http://static;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache proxy_cache; #配置設(shè)置的緩存空間名稱
proxy_cache_valid 200 302 304 30d ; #根據(jù)響應(yīng)碼設(shè)置緩存時間,超過這個時間即使緩存文件中有緩存數(shù)據(jù),nginx也會回源請求新數(shù)據(jù)。
proxy_cache_key $host$uri$is_args$args; #對不用用戶的請求展示不同的內(nèi)容
}
}
#參數(shù)詳解:
proxy_cache_path 緩存文件路徑
levels 設(shè)置緩存文件目錄層次;levels=1:2 表示兩級目錄
keys_zone 設(shè)置緩存名字和共享內(nèi)存大小【在使用的地方要使用緩存名】
inactive 在指定緩存時間內(nèi)沒人訪問則被刪除
max_size 最大緩存空間,如果緩存空間滿,默認(rèn)覆蓋掉緩存時間最長的資源。
瀏覽器訪問測試:
- 當(dāng)訪問靜態(tài)頁面的時候location 匹配到 (html|jpg|png|js|css) 通過轉(zhuǎn)發(fā)到靜態(tài)服務(wù)器,靜態(tài)服務(wù)通過location的正則匹配來處理請求。
- 當(dāng)訪問動態(tài)頁面時location匹配到 .\php 結(jié)尾的文件轉(zhuǎn)發(fā)到后端php服務(wù)處理請求。
靜態(tài)資源訪問:http://192.168.221.130/test.jpg
動態(tài)資源訪問:http://192.168.221.130/index.php
到此這篇關(guān)于Nginx動靜分離的示例代碼的文章就介紹到這了,更多相關(guān)Nginx動靜分離內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nginx常見內(nèi)置變量$uri和$request_uri的使用
本文主要介紹了nginx常見內(nèi)置變量$uri和$request_uri的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
為高負(fù)載網(wǎng)絡(luò)優(yōu)化Nginx和Node.js的方法
如果不先對Nginx和Node.js的底層傳輸機(jī)制有所了解,并進(jìn)行針對性優(yōu)化,可能對兩者再細(xì)致的調(diào)優(yōu)也會徒勞無功。一般情況下,Nginx通過TCP socket來連接客戶端與上游應(yīng)用2013-02-02
Nginx出現(xiàn)403?Forbidden的幾種簡單解決方式
這篇文章主要介紹了Nginx出現(xiàn)403?Forbidden的幾種解決思路,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12

