در مقاله قبلی ما درباره نحوه بالا بردن سرعت 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
مرحله 1 : نصب Nginx از Source
1 - برای نصب Nginx به همراه Ngx_Pagespeed از سورس نیاز است که پکیج های زیر روی سیستم تان نصب باشد.
2 - سپس فایل source آخرین ورژن Nginx (در حال حاضر ورژن 1.13.2) را با استفاده از دستور wget دانلود و سپس فایل ها را همانند زیر Extract کنید.
3 - سپس فایل های سورس ngx_pagespeed را دانلود و فایل فشرده را با استفاده از Unzip همانند زیر از حالت فشرده خارج کنید.
4 - سپس به دایرکتوری اکسترکت شده ngx_pagespeed وارد شوید و برای کامپایل انجین اکس همانند زیر library های بهینه سازی سرعت صفحه (PageSpeed optimization) را دانلود کنید.
توجه : لینک library های بهینه سازی pagespeed که در دستور زیر آمده است، فیلتر میباشد و برای دانلود باید از vpn یا فیلترشکن استفاده کنید.
مرحله 2 : کانفیگ و کامپایل Nginx به همراه Ngx_Pagespeed
5 - سپس به دایرکتوری nginx-1.13.2 وارد شوید و با استفاده از دستورات زیر سورس Nginx را کانفیگ کنید.
6 - سپس انجین اکس همانند زیر compile و نصب کنید.
7 - بعد از اینکه پروسه نصب تمام شد برای ایجاد symlink های ضروری برای nginx دستورات زیر را اجرا کنید.
مرحله 3 : ایجاد فایل Unit مربوط به Nginx برای SystemD
8 - در اینجا نیاز هست که شما به صورت دستی فایل Nginx unit را ایجاد کنید از آنجایی که در ورژن های اخیر سیستم های دبیان و اوبونتو systemd در حقیقت سیستم init است.
ابتدا فایل /lib/systemd/system/nginx.service را ایجاد کنید.
سپس فایل Nginx systemd service را دانلود و تنظیمات فایل Unit را درون این فایل paste کنید.
فایل را ذخیره و از آن خارج شوید.
9 - اکنون سرویس nginx را start کنید و استارت شدن اتوماتیک این سرویس را بهنگام Boot با استفاده از دستورات زیر فعال کنید.
نکته : بعد از استارت کردن سرویس Nginx شما ممکن است خطایی شبیه به تصویر زیر مشاهده کنید.
برای رفع این خطا، فایل کانفیگ Nginx (فایل /etc/nginx/conf/nginx.conf) را باز کنید، خط "#pid logs/nginx.pid;" را پیدا کرده و همانند زیر مسیر آنرا به "/run/nginx.pid" تغییر دهید.
سر انجام سرویس Nginx را مجددا restart کنید.
مرحله 4 : کانفیگ Nginx به همراه ماژول Pagespeed
10 - اکنون که Nginx نصب شده و روی سیستم تان در حال اجراست شما باید ماژول Ngx_pagespeed را فعال کنید. ابتدا یک دایرکتوری در جایی که ماژول فایل ها را برای وب سایت شما Catche میکند ایجاد کنید و پرمیژن های مناسب را روی این دایرکتوری همانند زیر تعریف کنید.
11 - برای فعال کردن ماژول ngx_pagespeed فایل کانفیگ Nginx را باز کنید.
خطوط زیر مربوط به کانفیگ Ngx_pagespeed را درون server block اضافه کنید.
نکته : اگر شما هر گونه ویرچوال هاست nginx ی روی سرور deploy کرده باشید برای فعال کردن Ngx_pagespeed روی هر سایت، باید خطوط بالا (pagespeed directives) را در هر server block اضافه کنید.
مثال زیر نمونه ای از فایل کانفیگ Nginx به همران Ngx_pagespeed فعال شده در virtual host پیش فرض میباشد.
فایل را ذخیره و از آن خارج شوید.
12 - سپس بررسی کنید که آیا syntax فایل کانفیگ Nginx بدون error باشد که برای این منظور دستور زیر را اجرا کنید اگر مشکلی در فایل نباشد باید خروجی زیر را مشاهده خواهید کرد.
13 - سپس سرویس Nginx را به منظور اعمال تغییرات اخیر restart کنید.
مرحله 5 : تست Nginx به همراه Ngx_Pagespeed
14 - اکنون با استفاده از دستور cURL تست کنید که آیا Ngx_pagespeed به همراه Nginx به درستی کار میکند.
اگر شما header بالا را ندیدید به مرحله 10 بازگردید و دستور العمل فعال کردن Ngx_pagespeed را با ادامه دادن مراحل بعدی دنبال کنید.
ریپازیتوری Github Ngx_Pagespeed :
اگر شما بخواهید امنیت وب سرور انجین ایکس را انجام دهید، ما به شما پیشنهاد میکنیم که مقاله مفید زیر را مطالعه بفرمایید.
آموزش امن کردن، نگهداری و بهبود عملکرد وب سرور انجین ایکس
در این مقاله نحوه نصب Nginx به همراه Ngx_pagespeed را روی دبیان و اوبونتو توضیح دادیم. اگر هر سوال یا نظری درباره این پست داشتید با ما به اشتراک بگذارید.
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
2 - سپس فایل source آخرین ورژن Nginx (در حال حاضر ورژن 1.13.2) را با استفاده از دستور wget دانلود و سپس فایل ها را همانند زیر Extract کنید.
کد PHP:
$ mkdir -p ~/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
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
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
مرحله 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}
6 - سپس انجین اکس همانند زیر compile و نصب کنید.
کد PHP:
$ make
$ sudo make install
7 - بعد از اینکه پروسه نصب تمام شد برای ایجاد symlink های ضروری برای nginx دستورات زیر را اجرا کنید.
کد PHP:
$ sudo mkdir /etc/nginx
$ sudo ln -s /usr/local/nginx/conf/ /etc/nginx
$ sudo ln -s /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
کد 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
کد PHP:
mohammad@ubuntu:~/make_nginx/nginx-1.13.2$ sudo systemctl start nginx
Job for nginx.service failed because a timeout was exceeded. See "systemctl status nginx.service" and "journalctl -xe" for details.
mohammad@ubuntu:~/make_nginx/nginx-1.13.2$
mohammad@ubuntu:~/make_nginx/nginx-1.13.2$ journalctl -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/0 ; 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.timer: Adding 7h 22min 55.685367s random time.
Sep 19 19:21:50 ubuntu systemd[1]: snapd.refresh.timer: Adding 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.
-- Subject: Unit acpid.service has finished start-up
-- Defined-By: systemd
-- Support: http://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/0 ; 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.timer: Adding 2h 32min 33.392419s random time.
Sep 19 19:22:10 ubuntu systemd[1]: snapd.refresh.timer: Adding 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.
-- Subject: Unit acpid.service has finished start-up
-- Defined-By: systemd
-- Support: http://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/0 ; 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...
-- Subject: Unit nginx.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit nginx.service has begun starting up.
Sep 19 19:22:17 ubuntu nginx[10650]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
Sep 19 19:22:17 ubuntu nginx[10650]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Sep 19 19:22:17 ubuntu systemd[1]: nginx.service: PID file /var/run/nginx.pid not readable (yet?) after start: No such file or directory
Sep 19 19:23:48 ubuntu systemd[1]: nginx.service: Start operation timed out. Terminating.
Sep 19 19:23:48 ubuntu systemd[1]: Failed to start The NGINX HTTP and reverse proxy server.
-- Subject: Unit nginx.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit nginx.service has failed.
برای رفع این خطا، فایل کانفیگ Nginx (فایل /etc/nginx/conf/nginx.conf) را باز کنید، خط "#pid logs/nginx.pid;" را پیدا کرده و همانند زیر مسیر آنرا به "/run/nginx.pid" تغییر دهید.
کد PHP:
#pid logs/nginx.pid;
to
pid /run/nginx.pid;
سر انجام سرویس Nginx را مجددا restart کنید.
کد PHP:
$ sudo systemctl daemon-reload
$ sudo systemctl start nginx
$ sudo systemctl status nginx
مرحله 4 : کانفیگ Nginx به همراه ماژول Pagespeed
10 - اکنون که Nginx نصب شده و روی سیستم تان در حال اجراست شما باید ماژول Ngx_pagespeed را فعال کنید. ابتدا یک دایرکتوری در جایی که ماژول فایل ها را برای وب سایت شما Catche میکند ایجاد کنید و پرمیژن های مناسب را روی این دایرکتوری همانند زیر تعریف کنید.
کد PHP:
$ sudo mkdir -p /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
کد 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 به همران 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 -I -p http://localhost
اگر شما header بالا را ندیدید به مرحله 10 بازگردید و دستور العمل فعال کردن Ngx_pagespeed را با ادامه دادن مراحل بعدی دنبال کنید.
ریپازیتوری Github Ngx_Pagespeed :
اگر شما بخواهید امنیت وب سرور انجین ایکس را انجام دهید، ما به شما پیشنهاد میکنیم که مقاله مفید زیر را مطالعه بفرمایید.
آموزش امن کردن، نگهداری و بهبود عملکرد وب سرور انجین ایکس
در این مقاله نحوه نصب Nginx به همراه Ngx_pagespeed را روی دبیان و اوبونتو توضیح دادیم. اگر هر سوال یا نظری درباره این پست داشتید با ما به اشتراک بگذارید.