Nginx動(dòng)靜分離的示例代碼
為了加快網(wǎng)站的解析速度,就是把動(dòng)態(tài)頁(yè)面和靜態(tài)頁(yè)面由不同的服務(wù)器來(lái)解析,加快解析速度。降低原來(lái)單個(gè)服務(wù)器的壓力。
簡(jiǎn)單來(lái)說(shuō),就是 使用正則表達(dá)式匹配過(guò)濾,然后交個(gè)不同的服務(wù)器。
1. 準(zhǔn)備環(huán)境
準(zhǔn)備一個(gè)nginx代理 兩個(gè)http 分別處理動(dòng)態(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動(dòng)態(tài)資源網(wǎng)站 | php |
2. 配置 Nginx 靜態(tài)資源服務(wù)器
expires功能說(shuō)明(為客戶(hù)端配置緩存時(shí)間)
nginx緩存的設(shè)置可以提高網(wǎng)站性能,對(duì)于網(wǎng)站的圖片,尤其是新聞網(wǎng)站,圖片一旦發(fā)布,改動(dòng)的可能是非常小的,為了減小對(duì)服務(wù)器請(qǐng)求的壓力,提高用戶(hù)瀏覽速度,我們可以通過(guò)設(shè)置nginx中的expires,讓用戶(hù)訪問(wèn)一次后,將圖片緩存在用戶(hù)的瀏覽器中,且時(shí)間比較長(zhǎng)的緩存。
原理:當(dāng)nginx設(shè)置了expires后,例如設(shè)置為:expires 10d; 那么用戶(hù)在10天內(nèi)請(qǐng)求的時(shí)候,都只會(huì)訪問(wèn)瀏覽器中的緩存,而不會(huì)去請(qǐng)求nginx。
注:需要注意的是,這種緩存方式只能在用戶(hù)不對(duì)瀏覽器強(qiáng)制刷新的情況下生效,如果用戶(hù)通過(guò)url來(lái)進(jìn)行訪問(wèn),是可以訪問(wè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; #為客戶(hù)端設(shè)置靜態(tài)資源緩存時(shí)間 } } //創(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 //測(cè)試: [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 //緩存到期時(shí)間 Cache-Control: max-age=86400 //緩存持續(xù)時(shí)間秒 Accept-Ranges: bytes
3. 動(dòng)態(tài)資源服務(wù)器配置
3.1. 安裝php-fpm
//動(dòng)態(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)程管理器)是一個(gè)PHPFastCGI管理器。
- 它提供了更好的PHP進(jìn)程管理方式,可以有效控制內(nèi)存和進(jìn)程、可以平滑重載PHP配置。
- 在日常運(yùn)維中,我們主要將PHP-FPM 的配置文件分為主配置文件和 pool配置文件(每個(gè)pool配置文件通常對(duì)應(yīng)一個(gè)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] ... ;動(dòng)態(tài)方式下開(kāi)啟的php-fpm進(jìn)程的最大數(shù)量(默認(rèn)是注釋的) process.max = 2048 ;設(shè)置 fpm 在后臺(tái)運(yùn)行(默認(rèn)是打開(kāi)的) daemonize = yes ; 設(shè)置進(jìn)程可以打開(kāi)的文件描述符數(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è)置動(dòng)態(tài)dynamic進(jìn)程池/靜態(tài)static(默認(rèn)是打開(kāi)的) pm = dynamic ; 設(shè)置每個(gè)進(jìn)程可處理的請(qǐng)求數(shù),當(dāng)進(jìn)程達(dá)到這個(gè)請(qǐng)求數(shù)量后會(huì)自動(dòng)釋放在重新生成新的進(jìn)程。避免內(nèi)存泄漏等情況 pm.max_requests = 1500 ; 終止請(qǐng)求超時(shí)時(shí)間。一個(gè)請(qǐng)求若處理大于20s ,則會(huì)自動(dòng)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í)行時(shí)間為30秒,就是說(shuō)超過(guò)30秒嗎,該腳本就停止執(zhí)行,0為不限制時(shí)間 post_max_size = 150M #默認(rèn)POST數(shù)據(jù)大小為8M,可以按實(shí)際情況修改 upload_max_filesize = 100M #默認(rèn)上傳文件最大為2M,可以按實(shí)際情況修改。 注:另外要說(shuō)明的是,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
動(dòng)態(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; #開(kāi)啟fastcgi連接php地址 fastcgi_index index.php; #指定默認(rèn)文件 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #站點(diǎn)根目錄,取決于root配置項(xiàng) 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
瀏覽器訪問(wèn)130上的php頁(yè)面,http://192.168.221.138/index.php,確保源站訪問(wèn)正常
4. 配置 Nginx 動(dòng)靜分離
proxy_cache和expires的介紹
通過(guò) expires 指令設(shè)置的緩存,主要是針對(duì)客戶(hù)端瀏覽器的。如果我們能將靜態(tài)資源的緩存設(shè)置在服務(wù)器端,當(dāng)多個(gè)用戶(hù)訪問(wèn)同一個(gè)資源時(shí),緩存命中率及系統(tǒng)的性能將大大提升。
proxy_cache介紹:當(dāng)nginx作為反向代理時(shí),通常只有動(dòng)態(tài)的請(qǐng)求,也就是不同的用戶(hù)訪問(wèn)的同一個(gè)url看到的內(nèi)容是不同的,這個(gè)時(shí)候才會(huì)交由上游服務(wù)器處理,但是有些內(nèi)容可能是一段時(shí)間內(nèi)是不會(huì)變化的,這個(gè)時(shí)候?yàn)榱藴p輕上游服務(wù)器的壓力,那么就讓nginx把上游返回的內(nèi)容緩存一段時(shí)間,比如緩存一天,在一天之內(nèi)即是上游服務(wù)器內(nèi)容發(fā)生了變化也不管,nginx只返回緩存到的內(nèi)容給用戶(hù)。
proxy_cache:實(shí)現(xiàn)服務(wù)器端緩存,主要設(shè)置在反向代理上面
nginx動(dòng)靜分離的配置
#配置nginx反向代理upstream,并實(shí)現(xiàn)服務(wù)器端緩存時(shí)間 #注意:是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; #動(dòng)態(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è)置的緩存空間名稱(chēng) proxy_cache_valid 200 302 304 30d ; #根據(jù)響應(yīng)碼設(shè)置緩存時(shí)間,超過(guò)這個(gè)時(shí)間即使緩存文件中有緩存數(shù)據(jù),nginx也會(huì)回源請(qǐng)求新數(shù)據(jù)。 proxy_cache_key $host$uri$is_args$args; #對(duì)不用用戶(hù)的請(qǐng)求展示不同的內(nèi)容 } } #參數(shù)詳解: proxy_cache_path 緩存文件路徑 levels 設(shè)置緩存文件目錄層次;levels=1:2 表示兩級(jí)目錄 keys_zone 設(shè)置緩存名字和共享內(nèi)存大小【在使用的地方要使用緩存名】 inactive 在指定緩存時(shí)間內(nèi)沒(méi)人訪問(wèn)則被刪除 max_size 最大緩存空間,如果緩存空間滿(mǎn),默認(rèn)覆蓋掉緩存時(shí)間最長(zhǎng)的資源。
瀏覽器訪問(wèn)測(cè)試:
- 當(dāng)訪問(wèn)靜態(tài)頁(yè)面的時(shí)候location 匹配到 (html|jpg|png|js|css) 通過(guò)轉(zhuǎn)發(fā)到靜態(tài)服務(wù)器,靜態(tài)服務(wù)通過(guò)location的正則匹配來(lái)處理請(qǐng)求。
- 當(dāng)訪問(wèn)動(dòng)態(tài)頁(yè)面時(shí)location匹配到 .\php 結(jié)尾的文件轉(zhuǎn)發(fā)到后端php服務(wù)處理請(qǐng)求。
靜態(tài)資源訪問(wèn):http://192.168.221.130/test.jpg
動(dòng)態(tài)資源訪問(wèn):http://192.168.221.130/index.php
到此這篇關(guān)于Nginx動(dòng)靜分離的示例代碼的文章就介紹到這了,更多相關(guān)Nginx動(dòng)靜分離內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Nginx實(shí)現(xiàn)動(dòng)靜分離的示例代碼
- Nginx七層負(fù)載均衡之動(dòng)靜分離思路詳解
- nginx實(shí)現(xiàn)動(dòng)靜分離的案例詳解
- 關(guān)于Nginx動(dòng)靜分離詳解以及配置
- Nginx?Tomcat負(fù)載均衡動(dòng)靜分離原理解析
- 使用nginx實(shí)現(xiàn)動(dòng)靜分離
- Nginx動(dòng)靜分離配置實(shí)現(xiàn)與說(shuō)明
- Nginx+Tomcat負(fù)載均衡及動(dòng)靜分離群集的實(shí)現(xiàn)
- nginx實(shí)現(xiàn)動(dòng)靜分離的方法示例
- Nginx+Tomcat實(shí)現(xiàn)負(fù)載均衡、動(dòng)靜分離的原理解析
- Nginx動(dòng)靜分離實(shí)現(xiàn)案例代碼解析
相關(guān)文章
nginx 關(guān)閉默認(rèn)站點(diǎn)的方法
國(guó)內(nèi)機(jī)房一般都要求網(wǎng)站主關(guān)閉空主機(jī)頭,防止未備案的域名指向過(guò)來(lái)造成麻煩2012-09-09nginx常見(jiàn)內(nèi)置變量$uri和$request_uri的使用
本文主要介紹了nginx常見(jiàn)內(nèi)置變量$uri和$request_uri的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07為高負(fù)載網(wǎng)絡(luò)優(yōu)化Nginx和Node.js的方法
如果不先對(duì)Nginx和Node.js的底層傳輸機(jī)制有所了解,并進(jìn)行針對(duì)性?xún)?yōu)化,可能對(duì)兩者再細(xì)致的調(diào)優(yōu)也會(huì)徒勞無(wú)功。一般情況下,Nginx通過(guò)TCP socket來(lái)連接客戶(hù)端與上游應(yīng)用2013-02-02Nginx啟動(dòng)失敗:端口80被占用問(wèn)題的解決方案
在Linux服務(wù)器上部署 Nginx 時(shí),可能會(huì)遇到 Nginx 啟動(dòng)失敗的情況,尤其是錯(cuò)誤提示bind()to 0.0.0.0:80 failed,這種問(wèn)題通常是由于端口80被其他進(jìn)程占用導(dǎo)致的,本文將詳細(xì)分析這一問(wèn)題的原因,并提供多種解決方案,幫助你快速恢復(fù)Nginx的正常運(yùn)行2025-02-02Nginx出現(xiàn)403?Forbidden的幾種簡(jiǎn)單解決方式
這篇文章主要介紹了Nginx出現(xiàn)403?Forbidden的幾種解決思路,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12