亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

為Yii2配置Nginx反向代理緩存提高并發(fā)支持

callmewhy / 654人閱讀

摘要:首先,在的主配置文件里先設(shè)置好與緩存相關(guān)的配置這里需要先手工建立與緩存相應(yīng)的目錄,并且把它設(shè)置為可讀寫。另外如果升級(jí)成,對(duì)不用緩存的部分性能也會(huì)有提升,這就不在本文討論的范圍之內(nèi)了。

現(xiàn)有一個(gè)系統(tǒng)是用Yii2框架開發(fā)的,Web服務(wù)器采用Nginx+php-fpm,由于沒有使用Nginx的反向代理緩存技術(shù),用Apacheab一壓就死掉了,QPS只能達(dá)到7或者8的水平,像這樣是無法支持高并發(fā)訪問的:

ab -n 500 -c 100 https://front.we.com/site/robot

htop查看主要壓力在cpu上,而占用cpu最多的是幾個(gè)php-fpm進(jìn)程,說明nginx只是簡(jiǎn)單地做了一個(gè)二傳手,把所有壓力全部轉(zhuǎn)嫁到了php身上,考慮到nginx本身有反向代理緩存技術(shù),因此直接配置好應(yīng)該就可以了。網(wǎng)上教程一般都是要再安裝一個(gè)Apache服務(wù)器,由Nginx轉(zhuǎn)Apache再轉(zhuǎn)php,考慮到我們已經(jīng)有php-fpm了,就不想再安裝一個(gè)多余的web服務(wù)器。

首先,在nginx的主配置文件里先設(shè)置好與緩存相關(guān)的配置:

proxy_connect_timeout       600;
proxy_send_timeout          600;
proxy_read_timeout          600;
send_timeout                600;
proxy_cache_path /var/run/proxy_cache levels=1:2 keys_zone=czone:10m max_size=1000m inactive=600m use_temp_path=off;
proxy_cache_key $scheme$host$request_uri;
proxy_buffers 256 16k;
proxy_buffer_size 32k;
proxy_set_header Proxy "";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

這里需要先手工建立與緩存相應(yīng)的目錄/var/run/proxy_cache,并且把它設(shè)置為可讀寫keys_zoneczone這個(gè)名字可以改成任意名字,只要和下文相對(duì)應(yīng)即可。

然后,在相應(yīng)的服務(wù)器設(shè)置里作如下配置:

先增加一個(gè)虛擬的上游服務(wù),這個(gè)front這個(gè)名字由你自己決定:

    upstream front {
        ip_hash;
        server unix:/var/run/nginx_front.sock;
    }

將原先監(jiān)聽80端口或者監(jiān)聽443端口的設(shè)置改為監(jiān)聽上述虛擬端口:

server {
    listen unix:/var/run/nginx_front.sock;
    server_name front.we.com;
    root   /var/www/we/frontend/web;

    location / {
        index  index.php index.html index.htm;
        if (!-e $request_filename) {
            rewrite ^/(.*) /index.php?r=$1 last;
        }
    }

    location ~ .php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    add_header "Referrer-Policy" "no-referrer";
}

再增加一個(gè)server監(jiān)聽80443端口:

server {
    listen       443 ssl http2;
    server_name  front.we.com;
    root   /var/www/we/frontend/web;

    ssl                  on;
    ssl_certificate      /etc/letsencrypt/live/front.we.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/front.we.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    gzip on;
    gzip_min_length 1k;
    gzip_buffers 16 64k;
    gzip_http_version 1.1;
    gzip_comp_level 5;
    gzip_proxied any;
    gzip_types text/plain application/x-javascript application/javascript application/octet-stream text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png image/svg image/svg+xml;
    gzip_vary on;

    add_header X-Cache $upstream_cache_status;

    location ~ /.well-known {
        allow all;
    }

    location ~ /. {
        return 403;
    }

    location /favicon.ico {
        root html;
    }

    location ~* .(css|js|gif|ico|jpg|png|svg)$ {
        expires 365d;
    }

    location / {
        proxy_set_header Host $host;
        proxy_redirect off;
        proxy_cache czone;
        proxy_cache_revalidate on;
        proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
        proxy_cache_valid 200 301 302 500m;
        proxy_cache_valid 404 1m;
        proxy_pass http://front;
    }
}

注意這里的兩個(gè)地方:一個(gè)是proxy_cacheczone和我們上面設(shè)置的keys_zone要對(duì)應(yīng),另一個(gè)proxy_pass和上面設(shè)置的虛擬上游服務(wù)器對(duì)應(yīng)。中間加了一個(gè)X-Cacheheader主要是為了方便我們?cè)跒g覽器端查看緩存起沒起作用而設(shè)的,因?yàn)槿绻彺婷恢械脑?,壓力還是在php上。

設(shè)置完成之后,可以先用nginx -t測(cè)試一下配置是否正確:

/usr/local/nginx/sbin/nginx -t

一切都正常的話,重新加載配置文件:

/usr/local/nginx/sbin/nginx -s reload

這時(shí)如果用瀏覽器直接訪問Yii2生成出來的網(wǎng)頁,很有可能緩存還是命不中,如下圖:

注意看這里的倒數(shù)第二行X-Cache: MISS,說明緩存沒有命中。為什么呢?注意上面第一行,Cache-Control里面有一個(gè)no-cache,Yii2缺省的所有controller都是無緩存的,所以導(dǎo)致了這里即使nginx已經(jīng)配置好緩存,也起不了作用。所以我們還需要改造Yii2,在behaviors里增加一個(gè)HttpCache的設(shè)置,注意下面的lastModified必須有,否則也不起作用,這里簡(jiǎn)單地取了user表中最后一次更新的時(shí)間作為lastModified,理論上應(yīng)該設(shè)置更符合業(yè)務(wù)應(yīng)用的方法。

public function behaviors()
{
    return [
        [
            "class" => "yiifiltersHttpCache",
            "only" => ["home", "index", "robot", "about"],
            "lastModified" => function ($action, $params) {
                $q = new yiidbQuery();
                return $q->from("user")->max("updated_at");
            },
        ],
    ];
}

現(xiàn)在,再次刷新網(wǎng)頁,你就可以看到X-Cache: HIT了。

至此,由Yii2生成的靜態(tài)網(wǎng)頁的壓力不再傳遞到php而轉(zhuǎn)交給nginx,我們?cè)俅螆?zhí)行ab壓一下看:

每秒116QPS,比我們不用緩存時(shí)性能提升接近15倍之多!而且用htop查看,壓測(cè)時(shí)CPU負(fù)擔(dān)都在nginx上,不在php上。我用的服務(wù)器比較渣,只有2核2g,如果服務(wù)器再好一些,肯定性能還會(huì)有極大提升。另外php如果升級(jí)成7.0,對(duì)不用緩存的部分性能也會(huì)有提升,這就不在本文討論的范圍之內(nèi)了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/39603.html

相關(guān)文章

  • 服務(wù)端高并發(fā)分布式架構(gòu)演進(jìn)之路

    摘要:架構(gòu)演進(jìn)單機(jī)架構(gòu)以淘寶作為例子。隨著用戶數(shù)的增長(zhǎng),并發(fā)讀寫數(shù)據(jù)庫成為瓶頸第二次演進(jìn)引入本地緩存和分布式緩存在同服務(wù)器上或同中增加本地緩存,并在外部增加分布式緩存,緩存熱門商品信息或熱門商品的頁面等。 1. 概述 本文以淘寶作為例子,介紹從一百個(gè)并發(fā)到千萬級(jí)并發(fā)情況下服務(wù)端的架構(gòu)的演進(jìn)過程,同時(shí)列舉出每個(gè)演進(jìn)階段會(huì)遇到的相關(guān)技術(shù),讓大家對(duì)架構(gòu)的演進(jìn)有一個(gè)整體的認(rèn)知,文章最后匯總了一些架構(gòu)...

    FrancisSoung 評(píng)論0 收藏0
  • 5個(gè)提高Node.js應(yīng)用性能的技巧

    摘要:如果你有一個(gè)高流量的站點(diǎn),提高性能的第一步是在你的前面放一個(gè)反向代理服務(wù)器。使用在一個(gè)已經(jīng)存在的服務(wù)器前做反向代理,作為的一個(gè)核心應(yīng)用,已經(jīng)被用于全世界成千上萬的站點(diǎn)中。 如果你的 node 服務(wù)器前面沒有 nginx, 那么你可能做錯(cuò)了?!?Bryan Hughes Node.js 是使用 最流行的語言— JavaScript 構(gòu)建服務(wù)器端應(yīng)用的領(lǐng)先工具 。由于可以同時(shí)提供 web ...

    k00baa 評(píng)論0 收藏0
  • nginx安裝配置|nginx負(fù)載均衡|nginx反向代理|gzip壓縮|expires緩存

    摘要:是一款輕量級(jí)的服務(wù)器反向代理服務(wù)器及電子郵件代理服務(wù)器,并在一個(gè)協(xié)議下發(fā)行。是以反向代理的方式進(jìn)行負(fù)載均衡的。 Nginx是一款輕量級(jí)的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,并在一個(gè)BSD-like 協(xié)議下發(fā)行。由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開發(fā),供俄國(guó)大型的入口網(wǎng)站及搜索引擎Rambler(俄文:Рамблер)使用。其特點(diǎn)是占有內(nèi)存...

    pkhope 評(píng)論0 收藏0
  • 你需要了解的 nginx 基礎(chǔ)配置

    摘要:初探今天給大家講下的基礎(chǔ)配置很多小伙伴在開發(fā)的過程中會(huì)使用到但是確對(duì)的配置其實(shí)并不了解今天我給大家講下基礎(chǔ)的配置項(xiàng)的功能很多但是說到大家最先想到的是反向代理和負(fù)載均衡負(fù)載均衡在開發(fā)環(huán)境體現(xiàn)的不太明顯主要是為了解決生產(chǎn)環(huán)境的客戶端請(qǐng)求很多的時(shí) 初探nginx 今天給大家講下nginx的基礎(chǔ)配置,很多小伙伴在開發(fā)的過程中會(huì)使用到 nginx ,但是確對(duì) nginx 的配置其實(shí)并不了解,今天...

    stormzhang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<