nginx

نحوه نصب ssl رایگان بر روی ابونتو 16.04

Let's Encrypt یک راه آسان برای داشتن TLS / SSL رایگان و امن بروی سایت ها می باشد. به وسیله این گواهینامه رایگان شما می توانید سایت خورد را بر روی HTTPS بارگذاری کنید.letsencrypt در واقع در مرحله آزمایشی می باشد . letsencrypt به واسطه اسکریپت که در پکیج آن وجود دارد این امکان را به ما می دهد که به صورت خودکار  بر روی وب سرور Apache نصب شود. حالا می خواهم نحوه نصب و چگونگی عملکرد اینTLS / SSLرایگان را بر روی وب سرور NGINX  و سیستم عامل ابونتو ۱۶.۰۴ پیش برویم.

letsencrypt یک گواهینامه رایگان به ازای هر سایت شما ایجاد خواهد کرد. که به مدت ۳ ماه فعال خواهد و بعد از ۳ ماه نیازمند بروزرسانی هست. در وب سرور Apache این گواهینامه به صورت خودکار تمدید می شود ولی متاسفانه بر روی وب سرور nginx  این امکان هنوز فراهم نشده است و نیازمند این هست که ما به صورت دستی تنظیمانی را بر روی سرور خود انجام دهیم که بعد از این مدت ۳ ماهه به صورت خودکار تمدید شود که مشکلات بعدی بر نخوریم.

 

پیش نیاز ها

 

 

شما ابتدا نیاز به دسترسی روت بر روی سرور ابونتو ۱۶.۰۴ خود دارید.

همچنین دامنه خود را ثبت کرده باشید و رکورد های DNS هم به وب سرور شما ارجاع داده شده باشد.

اگر رکورد های A Record شما به ای پی عمومی سرور شما ارجاع نشده باشد در هنگام نصب به مشکل بر خواهید خورد.

 Let's Encrypt برای اینکه دامنه شما را تایید کند و اجازه ساخت ssl رایگان را به شما بدهد نیازمند این هست که به روشی هویت شما را به عنوان مالک دامنه تایید کند. برای همین هم برای ساخت گواهینامه حتما باید بر روی وب سروری که سایت شما بر روی آن هست ،ساخته شود.

مرحله اول: نصب نسخه کلاینت Let's Encrypt

 شما برای دریافت گواهینامه نصب ssl  بر روی سرور خود، بهترین روش نصب  Let's Encrypt این هست که،  آخرین نسخه را از گیت هاب دریافت کنید. همچنین در آینده در مدیر بسته های نرم افزاری اوبونتو دردسترس خواهد بود و دیگر شما نیازی به گرفتن کپی از ریپوزتوری ها نخواهید بود.

نصب Git و bc

ابتدا مدیر بسته های خودر ار به روزرسانی کنید

 sudo apt-get update

و بعد از آن با دستور زیر git را نصب می کنیم

sudo apt-get -y install git

با نصب git بر روی سرور خود به راحتی می توانید letsencrypt بر روی سرور خود دانلود کنید.

کپی Let's Encrypt

با دستور زیر ما آخرین نسخه از Let's Encrypt را در مسیر /opt دانلود خواهیم کرد:

  • sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

حالا آخرین نسخه را در دایرکتوری  /opt/letsencrypt خواهید داشت.

 

مرحله دوم: دریافت گواهینامه SSL

Let's Encrypt  راه های مختلفی را برای دریافت گواهینامه ssl به وسیله پلاگین های مختلف ارایه می دهد.به غیر از پلاگین آپاچی بیشتر این پلاگین ها تنها شمارا یاری میکنند که به صورت دستی گواهینامه را بر روی وب سرور خود نصب نمایید.

 

چگونگی استفاده از  Webroot پلاگین

Webroot پلاگین، مستقیما با نصب روی مسیر روت شما که به عنوان یک فایل مخصوص ذخیره شده باشه کار می کند بدین منظور ما باید دسترسی خاصی به این فایل بر روی وب سرور خود بدهیم

فایل کانفیگ وب سرور خود را که معمولا در مسیر /etc/nginx/sites-available/default هست را ویرایش می کنیم 

sudo nano /etc/nginx/sites-available/default

 

خطوط زیر را به فایل کانفیگ اضافه می کنیم

 

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

فایل را ذخیره می کنیم

کانفیگ ها را با دستور زیر قبل از ریلود کردن بررسی می کنیم:

sudo nginx -t

 

Nginx را ریلود می کنیم

sudo systemctl reload nginx

 

به مسیر زیر میرویم و دستور زیر را اجرا می کنیم

cd /opt/letsencrypt

./letsencrypt-auto certonly -a webroot --webroot-path=/var/www/html -d example.com -d www.example.com

 

در اولین مرحله شما با پیغام زیر مواجه خواهید شد.

از شما ایمیل می خواهد که این ایمیل را ترجیحا معتبر وارد نمایید به دلیل اینکه پیغام ها برای شما ارسال خواهد شد.

از شما می خواهد که مرامنامه را تایید کنید

اگر نصب Let's Encrypt با موفقیت بود شما خروجی شبیه به زیر خواهید داشت

خروجی:

IMPORTANT NOTES: - If you lose your account credentials, you can recover through e-mails sent to sammy@digitalocean.com - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will expire on 2016-03-15. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - Your account credentials have been saved in your Let's Encrypt configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Let's Encrypt so making regular backups of this folder is ideal. - If like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

دقت کنید که زمان انقضا گواهینامه شما  و همچنین مسیر نصب گواهینامه ها را برای شما برجسته کرده است

نکته فایروال: اگر به چنین پیغامی برخوردید Failed to connect to host for DVSNI challenge, فایروال سرور شما نیازمند اجازه به پورت های   80 و 443 میباشد

 

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

sudo ls -l /etc/letsencrypt/live/your_domain_name

 

مرحله سوم: تنظیمات TLS/SSL بر روی (Nginx)

ابتدا به مسیر فایل های کانفیگ nginx خود بروید و از فایل کانفیگ خود یک بک آپ تهیه کنید و سپس فایل کانفیگ خود را ویرایش کنید و خطوط زیر را به آن اضافه کنید

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

نکته: توجه کنید در مقادیر زیر ابتدا باید مواردی را که به رنگ قرمز هستند تغییر دهید و به جای انها مقادیر مربوطه را قرار دهید.

نکته : امکان دارد برخی از موارد زیر در فایل کانفیگ خودتان موجود باشد.

 

etc/nginx/sites-available/default
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

server {

    # SSL configuration

    listen 443 ssl http2 default_server;
    
listen [::]:443 ssl http2 default_server;

	

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;


ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

فایل را ذخیره کنید و با دستور nginx -t  مطمین شوید که فایل کانفیگتان خطایی ندارد و سپس nginx  را ریستارت نمایید.

در مقاله بعدی در مورد نحوه بروزرسانی این ssl  صحبت خواهم کرد

دسته بندی ها: 

NGINX چیست ؟

nginxقصد دارم در سلسه مطالبی در رابطه با ماژول ها و برنامه هایی که بر روی وب سرورهای سایت هایی که طراحی کرده ام صحبت کنم اگر مطالب وب سایتم رو دنبال کرده باشید در رابطه با مشکلاتی که با وب سرور آپاچی  در سرور های سایت شبکه خبری العالم داشتیم صحبت کرده ام.

بزرگترین مشکل وب سرور معروف آپاچی محدودیت کانکشن همزمان 10000 تایی هست که دارد و همچنین میزان مصرف بالای حافظه است. Nginx وب سرور معروفی هست که رایگان هست ,حجم پایینی دارد و کارایی بسیار بالا و تحت لایسنس BSD منتشر می شود. یکی بزرگترین مزیتهای این وب سرور ، پشتیبانی بسیار عالی از فایل های استاتیک هست. 
 
Nginx سرعت پاسخگویی بسیار بالایی دارد و در بازدید های بسیار بالا واقعا عالی عمل می کند. از جمله قابلیت های Nginx سازگاری این وب سرور با اکثر توزیع های لینوکس هست. مستندات Nginx به نظر بسیار خوب هست و فروم Nginx هم بسیار بهتر،  من خودم اکثر سوالاتم رو در این سایت در زمان بسیار کوتاهی دریافت می کنم و این برای من بسیار ارزشمند هست. بروز رسانی و نصب Nginx  بسیار ساده است و یکی از قابلیت های خوب Nginx این هست.
در زمانی که شما می خواهید به نسخه جدید تر   Nginx خودتون رو اپگرید کنید به صورت on the fly این کارو انجام می دهد و این مورد در پروژه هایی که نباید سایت داون تایم داشته باشه خیلی اهمیت داره.
 
Nginx  برای مدیریت در خواست ها یا همون  connection ها از روش منحصر به خودش استفاده می کند که البته از این روش در وب سرور های دیگری هم استفاده شده است. 
 
در وب سرور Nginx برای هردرخواست یک thread جدید درست می شود و این درحالی هست که سیستم thread poll هم که دارد thread را تا زمانی حفظ می کند که در اون لحظه درخواست جدید بیاد و Nginx از thread های بیکار استفاده می کند. این روش استفاده از thread ها در انجین ایکس بسیار کارامد هست به طور کلی مدیریت باز و بست شدن thread ها در وب سرور هایی مثل آپاچی باعث شده که این وب سرور در کانکشن های بالا ،در هندل کردن این بازدید ها به قول معروف کم بیاورد.
 
Nginx علاوه بر این که یک وب سرور هست به درخواست های reverse proxy و e-mail (IMAP/POP3) proxy  ها هم پاسخ  می دهد.
 
 

 
 
 

Total Sites Across All Domains

August 1995 - February 2011

Market Share for Top Servers

Across All Domains 

August 1995 - February 2011

Totals for Active Servers

Across All Domains
June 2000 - February 2011

Market Share for Top Servers

Across the Million Busiest Sites

 September 2008 - February 2011

 
تنظیمات Nginx برای راه اندازی دروپال
 

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

apt-get install nginx

و بعد از تمام شدن مراحل نصب کافیه Nginx را استارت کنیم

/etc/init.d/nginx start

حالا فقط کافی در یک مرورگر ادرس سرور خودتون رو وارد کنید.

 

برای اینکه از قابلیت ادرس های تمیز یا clean url در دروپال استفاده کنید باید دستورات زیر را در تنظیمات انجین ایکس وارد کنید

vi /etc/nginx/sites-available/www.example.com.vhost

 

server {
       listen 80;
       server_name www.example.com example.com;
       root /var/www/www.example.com/web;

       if ($http_host != "www.example.com") {
                 rewrite ^ http://www.example.com$request_uri permanent;
       }

       index index.php index.html;

       location = /favicon.ico {
                log_not_found off;
                access_log off;
       }

       location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
       }

       # Make sure files with the following extensions do not get loaded by nginx because nginx would display the source code, and these files can contain PASSWORDS!
        location ~* \.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|\.php_ {
                deny all;
        }

       # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
       location ~ /\. {
                deny all;
                access_log off;
                log_not_found off;
       }

       location / {
                try_files $uri $uri/ /index.php?$args;
       }

       location ~*  \.(jpg|jpeg|png|gif|css|js|ico)$ {
                expires max;
                log_not_found off;
       }

       location ~ \.php$ {
                include /etc/nginx/fastcgi_params;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       }
}
 

 

برای اینکه بتونید فایل ها php رو اجرا کنید باید از واسطه ای(منتقل کننده) مثل php-fpm استفاده کنید.

 

 

دسته بندی ها: