اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

نصب Nginx به همراه Ngx_Pagespeed جهت بالا بردن سرعت لود صفحات روی دبیان و اوبونتو

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    نصب Nginx به همراه Ngx_Pagespeed جهت بالا بردن سرعت لود صفحات روی دبیان و اوبونتو

    در مقاله قبلی ما درباره نحوه بالا بردن سرعت Load صفحات در وب سرور انجین ایکس با استفاده از Ngx_Pagespeed روی CentOS 7 بحث کردیم در این مقاله ما نحوه نصب nginx به همراه Ngx_Pagespeed روی سیستم های Debian و Ubuntu را به منظور بهبود کارایی وب سایت های nginx شرح خواهیم داد.

    Nginx (موتور X یا engin X) یک HTTP سرور شناخته شده رایگان و Open-Source است که بسیاری از سایت ها روی اینترنت از آن استفاده میکنند. این web server به دلیل performance بالا و ثباتش بسیار معروف است. همچنین به عنوان یک revers proxy, generic mail و TCP/UDP proxy server میتوان از آن استفاده کرد و همچنین میتوان به عنوان یک load blancer استفاده شود.

    Ngx_Pagespeed یک ماژول nginx رایگان و اوپن سورس میباشد که برای بهبود سرعت سایت ها و کاهش زمان لود صفحه به کار برده میشود. این ابزار زمانیکه طول میکشد تا کاربران محتوای روی سایت شما را مشاهده کنند و یا با وب سایت شما تعامل اطلاعات داشته باشند را به شدت کاهش میدهد.



    همچنین پیشنهاد میشود مطالعه کنید :

    نصب Mod_Pagespeed برای بهبود عملکرد سرور Apache (به زودی)


    قابلیت های Ngx_Pagespeed
    • پشتیبانی از HTTPS به همراه کنترل URL
    • بهینه سازی تصویر، جداکردن meta-data، تغییر سایز dynamic، فشرده سازی مجدد
    • معادله، تلفیق، ورودی و خروجی CSS و JavaScript
    • resource پایین ورودی
    • به تاخیر انداختن لود تصویر و JavaScript
    • دوباره نویسی HTML
    • تمدید مدت زمان Cache
    • امکان config برای چندین سرور و تعداد زیاد دیگر



    مرحله 1 : نصب Nginx از Source

    1 - برای نصب Nginx به همراه Ngx_Pagespeed از سورس نیاز است که پکیج های زیر روی سیستم تان نصب باشد.
    کد PHP:
    sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip 
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	1-Install-Build-Essential-Tools-on-Ubuntu.png نمایش ها:	1 اندازه:	22.6 KB شناسه:	22155


    2 - سپس فایل source آخرین ورژن Nginx (در حال حاضر ورژن 1.13.2) را با استفاده از دستور wget دانلود و سپس فایل ها را همانند زیر Extract کنید.
    کد PHP:
    mkdir -~/make_nginx
    cd ~/make_nginx
    wget -c https://nginx.org/download/nginx-1.13.2.tar.gz
    tar -xzvf nginx-1.13.2.tar.gz 
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	2-Download-Nginx-Source-Package.png نمایش ها:	1 اندازه:	15.7 KB شناسه:	22156


    3 - سپس فایل های سورس ngx_pagespeed را دانلود و فایل فشرده را با استفاده از Unzip همانند زیر از حالت فشرده خارج کنید.
    کد PHP:
    wget -c https://github.com/pagespeed/ngx_pagespeed/archive/v1.12.34.2-stable.zip
    unzip v1.12.34.2-stable.zip 
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	3-Download-Ngx_Pagespeed-Source-Files.png نمایش ها:	1 اندازه:	19.8 KB شناسه:	22157


    4 - سپس به دایرکتوری اکسترکت شده ngx_pagespeed وارد شوید و برای کامپایل انجین اکس همانند زیر library های بهینه سازی سرعت صفحه (PageSpeed optimization) را دانلود کنید.

    توجه : لینک library های بهینه سازی pagespeed که در دستور زیر آمده است، فیلتر میباشد و برای دانلود باید از vpn یا فیلترشکن استفاده کنید.
    کد PHP:
    cd ngx_pagespeed-1.12.34.2-stable/
    wget -c https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz
    tar -xvzf 1.12.34.2-x64.tar.gz 
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	4-Download-PageSpeed-Libraries.png نمایش ها:	1 اندازه:	12.5 KB شناسه:	22158



    مرحله 2 : کانفیگ و کامپایل Nginx به همراه Ngx_Pagespeed

    5 - سپس به دایرکتوری nginx-1.13.2 وارد شوید و با استفاده از دستورات زیر سورس Nginx را کانفیگ کنید.
    کد PHP:
    cd  ~/make_nginx/nginx-1.13.2
    $ ./configure --add-module=$HOME/make_nginx/ngx_pagespeed-1.12.34.2-stable/ ${PS_NGX_EXTRA_FLAGS
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	5-Configure-Nginx-with-Ngx_Pagespeed-Module.png نمایش ها:	1 اندازه:	14.3 KB شناسه:	22159


    6 - سپس انجین اکس همانند زیر compile و نصب کنید.
    کد PHP:
    make
    sudo make install 
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	6-Install-Nginx-with-Ngx_Pagespeed.png نمایش ها:	1 اندازه:	18.3 KB شناسه:	22160


    7 - بعد از اینکه پروسه نصب تمام شد برای ایجاد symlink های ضروری برای nginx دستورات زیر را اجرا کنید.
    کد PHP:
    sudo mkdir /etc/nginx
    sudo ln -/usr/local/nginx/conf/ /etc/nginx
    sudo ln -/usr/local/nginx/sbin/nginx /usr/sbin/nginx 


    مرحله 3 : ایجاد فایل Unit مربوط به Nginx برای SystemD

    8 - در اینجا نیاز هست که شما به صورت دستی فایل Nginx unit را ایجاد کنید از آنجایی که در ورژن های اخیر سیستم های دبیان و اوبونتو systemd در حقیقت سیستم init است.

    ابتدا فایل /lib/systemd/system/nginx.service را ایجاد کنید.
    کد PHP:
    sudo vi /lib/systemd/system/nginx.service 
    سپس فایل Nginx systemd service را دانلود و تنظیمات فایل Unit را درون این فایل paste کنید.
    کد PHP:
    [Unit]
    Description=The NGINX HTTP and reverse proxy server
    After
    =syslog.target network.target remote-fs.target nss-lookup.target
    [Service]
    Type=forking
    PIDFile
    =/var/run/nginx.pid
    ExecStartPre
    =/usr/sbin/nginx -t
    ExecStart
    =/usr/sbin/nginx
    ExecReload
    =/bin/kill -s HUP $MAINPID
    ExecStop
    =/bin/kill -s QUIT $MAINPID
    PrivateTmp
    =true
    [Install]
    WantedBy=multi-user.target 
    فایل را ذخیره و از آن خارج شوید.


    9 - اکنون سرویس nginx را start کنید و استارت شدن اتوماتیک این سرویس را بهنگام Boot با استفاده از دستورات زیر فعال کنید.
    کد PHP:
    sudo systemctl start nginx
    sudo systemctl enable nginx 
    نکته : بعد از استارت کردن سرویس Nginx شما ممکن است خطایی شبیه به تصویر زیر مشاهده کنید.
    کد PHP:
    mohammad@ubuntu:~/make_nginx/nginx-1.13.2sudo systemctl start nginx
    Job 
    for nginx.service failed because a timeout was exceededSee  "systemctl status nginx.service" and "journalctl -xe" for details.
    mohammad@ubuntu:~/make_nginx/nginx-1.13.2$
    mohammad@ubuntu:~/make_nginx/nginx-1.13.2journalctl -xe
    Sep 19 19
    :18:32 ubuntu sudo[10605]: pam_unix(sudo:session): session opened for user root by mohammad(uid=0)
    Sep 19 19:18:38 ubuntu sudo[10605]: pam_unix(sudo:session): session closed for user root
    Sep 19 19
    :19:25 ubuntu dhclient[1083]: DHCPREQUEST of 192.168.10.237 on ens32 to 192.168.10.1 port 67 (xid=0x13806f3d)
    Sep 19 19:19:25 ubuntu dhclient[1083]: DHCPACK of 192.168.10.237 from 192.168.10.1
    Sep 19 19
    :19:25 ubuntu dhclient[1083]: bound to 192.168.10.237 -- renewal in 264 seconds.
    Sep 19 19:19:26 ubuntu systemd-timesyncd[1079]: Timed out waiting for reply from 4.2.2.4:123 (4.2.2.4).
    Sep 19 19:19:36 ubuntu systemd-timesyncd[1079]: Timed out waiting for reply from 4.2.2.2:123 (4.2.2.2).
    Sep 19 19:21:49 ubuntu sudo[10617]: mohammad TTY=pts/;  PWD=/home/mohammad/make_nginx/nginx-1.13.2 USER=root ;  COMMAND=/bin/systemctl daemon-reload
    Sep 19 19
    :21:49 ubuntu sudo[10617]: pam_unix(sudo:session): session opened for user root by mohammad(uid=0)
    Sep 19 19:21:49 ubuntu systemd[1]: Reloading.
    Sep 19 19:21:50 ubuntu systemd[1]: apt-daily.timerAdding 7h 22min 55.685367s random time.
    Sep 19 19:21:50 ubuntu systemd[1]: snapd.refresh.timerAdding 3h 5min 1.632861s random time.
    Sep 19 19:21:50 ubuntu sudo[10617]: pam_unix(sudo:session): session closed for user root
    Sep 19 19
    :21:50 ubuntu systemd[1]: Started ACPI event daemon.
    -- 
    SubjectUnit acpid.service has finished start-up
    -- Defined-Bysystemd
    -- Supporthttp://lists.freedesktop.org/mailman/listinfo/systemd-devel
    --
    -- 
    Unit acpid.service has finished starting up.
    --
    -- 
    The start-up result is done.
    Sep 19 19:22:10 ubuntu sudo[10632]: mohammad TTY=pts/;  PWD=/home/mohammad/make_nginx/nginx-1.13.2 USER=root ;  COMMAND=/bin/systemctl daemon-reload
    Sep 19 19
    :22:10 ubuntu sudo[10632]: pam_unix(sudo:session): session opened for user root by mohammad(uid=0)
    Sep 19 19:22:10 ubuntu systemd[1]: Reloading.
    Sep 19 19:22:10 ubuntu systemd[1]: apt-daily.timerAdding 2h 32min 33.392419s random time.
    Sep 19 19:22:10 ubuntu systemd[1]: snapd.refresh.timerAdding 3h 2min 5.739248s random time.
    Sep 19 19:22:10 ubuntu sudo[10632]: pam_unix(sudo:session): session closed for user root
    Sep 19 19
    :22:10 ubuntu systemd[1]: Started ACPI event daemon.
    -- 
    SubjectUnit acpid.service has finished start-up
    -- Defined-Bysystemd
    -- Supporthttp://lists.freedesktop.org/mailman/listinfo/systemd-devel
    --
    -- 
    Unit acpid.service has finished starting up.
    --
    -- 
    The start-up result is done.
    Sep 19 19:22:17 ubuntu sudo[10647]: mohammad TTY=pts/;  PWD=/home/mohammad/make_nginx/nginx-1.13.2 USER=root ;  COMMAND=/bin/systemctl start nginx
    Sep 19 19
    :22:17 ubuntu sudo[10647]: pam_unix(sudo:session): session opened for user root by mohammad(uid=0)
    Sep 19 19:22:17 ubuntu systemd[1]: Starting The NGINX HTTP and reverse proxy server...
    -- 
    SubjectUnit nginx.service has begun start-up
    -- Defined-Bysystemd
    -- Supporthttp://lists.freedesktop.org/mailman/listinfo/systemd-devel
    --
    -- 
    Unit nginx.service has begun starting up.
    Sep 19 19:22:17 ubuntu nginx[10650]: nginxthe configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    Sep 19 19
    :22:17 ubuntu nginx[10650]: nginxconfiguration file /usr/local/nginx/conf/nginx.conf test is successful
    Sep 19 19
    :22:17 ubuntu systemd[1]: nginx.servicePID file  /var/run/nginx.pid not readable (yet?) after startNo such file or  directory
    Sep 19 19
    :23:48 ubuntu systemd[1]: nginx.serviceStart operation timed outTerminating.
    Sep 19 19:23:48 ubuntu systemd[1]: Failed to start The NGINX HTTP and reverse proxy server.
    -- 
    SubjectUnit nginx.service has failed
    -- Defined-Bysystemd
    -- Supporthttp://lists.freedesktop.org/mailman/listinfo/systemd-devel
    --
    -- 
    Unit nginx.service has failed
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	9-Nginx-Failed-to-Start-Error.png نمایش ها:	1 اندازه:	38.4 KB شناسه:	22161


    برای رفع این خطا، فایل کانفیگ Nginx (فایل /etc/nginx/conf/nginx.conf) را باز کنید، خط "#pid logs/nginx.pid;" را پیدا کرده و همانند زیر مسیر آنرا به "/run/nginx.pid" تغییر دهید.
    کد PHP:
    #pid  logs/nginx.pid;
    to
    pid  
    /run/nginx.pid
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	9-1-Nginx-Failed-to-Start-Error.png نمایش ها:	1 اندازه:	9.2 KB شناسه:	22162

    سر انجام سرویس Nginx را مجددا restart کنید.
    کد PHP:
    sudo systemctl daemon-reload
    sudo systemctl start nginx
    sudo systemctl status nginx 
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	9-2-Nginx-Start-Service.png نمایش ها:	1 اندازه:	13.7 KB شناسه:	22163



    مرحله 4 : کانفیگ Nginx به همراه ماژول Pagespeed

    10 - اکنون که Nginx نصب شده و روی سیستم تان در حال اجراست شما باید ماژول Ngx_pagespeed را فعال کنید. ابتدا یک دایرکتوری در جایی که ماژول فایل ها را برای وب سایت شما Catche میکند ایجاد کنید و پرمیژن های مناسب را روی این دایرکتوری همانند زیر تعریف کنید.
    کد PHP:
    sudo mkdir -/var/ngx_pagespeed_cache
    sudo chown -R nobody:nogroup /var/ngx_pagespeed_cache 

    11 - برای فعال کردن ماژول ngx_pagespeed فایل کانفیگ Nginx را باز کنید.
    کد PHP:
    sudo vi /etc/nginx/conf/nginx.conf 
    خطوط زیر مربوط به کانفیگ Ngx_pagespeed را درون server block اضافه کنید.
    کد PHP:
    # Pagespeed main settings
    pagespeed on;
    pagespeed FileCachePath /var/ngx_pagespeed_cache;
    # Ensure requests for pagespeed optimized resources go to the pagespeed
    # handler and no extraneous headers get set.
    location "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" add_header "" ""; }
    location "^/ngx_pagespeed_static/" { }
    location "^/ngx_pagespeed_beacon" { } 
    نکته : اگر شما هر گونه ویرچوال هاست nginx ی روی سرور deploy کرده باشید برای فعال کردن Ngx_pagespeed روی هر سایت، باید خطوط بالا (pagespeed directives) را در هر server block اضافه کنید.

    مثال زیر نمونه ای از فایل کانفیگ Nginx به همران Ngx_pagespeed فعال شده در virtual host پیش فرض میباشد.
    کد PHP:
    #user  nobody;
    worker_processes  1;
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    pid   /run/nginx.pid;
    events {
    worker_connections  1024;
    }
    http {
    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"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #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;



    # Pagespeed main settings
    pagespeed on;
    pagespeed FileCachePath /var/ngx_pagespeed_cache;
    # Ensure requests for pagespeed optimized resources go to the pagespeed
    # handler and no extraneous headers get set.
    location "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" add_header "" ""; }
    location "^/ngx_pagespeed_static/" { }
    location "^/ngx_pagespeed_beacon" { }



    location / {
    root   html;
    index  index.html index.htm;
    }
    #error_page  404              /404.html;
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    root   html;
    }
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
    # 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
    #
    #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 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;
    #    }
    #}

    فایل را ذخیره و از آن خارج شوید.


    12 - سپس بررسی کنید که آیا syntax فایل کانفیگ Nginx بدون error باشد که برای این منظور دستور زیر را اجرا کنید اگر مشکلی در فایل نباشد باید خروجی زیر را مشاهده خواهید کرد.
    کد PHP:
    sudo nginx -t
    nginx
    the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx
    configuration file /usr/local/nginx/conf/nginx.conf test is successful 

    13 - سپس سرویس Nginx را به منظور اعمال تغییرات اخیر restart کنید.
    کد PHP:
    sudo systemctl restart nginx 


    مرحله 5 : تست Nginx به همراه Ngx_Pagespeed

    14 - اکنون با استفاده از دستور cURL تست کنید که آیا Ngx_pagespeed به همراه Nginx به درستی کار میکند.
    کد PHP:
    curl --p http://localhost 
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	10-Check-Nginx-with-Ngx_Pagespeed.png نمایش ها:	1 اندازه:	10.5 KB شناسه:	22164


    اگر شما header بالا را ندیدید به مرحله 10 بازگردید و دستور العمل فعال کردن Ngx_pagespeed را با ادامه دادن مراحل بعدی دنبال کنید.

    ریپازیتوری Github Ngx_Pagespeed :
    Automatic PageSpeed optimization module for Nginx. Contribute to apache/incubator-pagespeed-ngx development by creating an account on GitHub.



    اگر شما بخواهید امنیت وب سرور انجین ایکس را انجام دهید، ما به شما پیشنهاد میکنیم که مقاله مفید زیر را مطالعه بفرمایید.

    آموزش امن کردن، نگهداری و بهبود عملکرد وب سرور انجین ایکس


    در این مقاله نحوه نصب Nginx به همراه Ngx_pagespeed را روی دبیان و اوبونتو توضیح دادیم. اگر هر سوال یا نظری درباره این پست داشتید با ما به اشتراک بگذارید.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-20-2021, 06:30 PM.

درباره انجمن منطقه لینوکسی ها

انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

شبکه های اجتماعی
در حال انجام ...
X