base_tutorial/4-WebServer/nginx install and configuration.md
2025-04-09 10:17:16 +03:30

18 KiB
Raw Blame History

بسم الله الرحمن الرحیم

1-نصب nginx


برای نصب nginx، دستور زیر را در خط فرمان وارد کنید:

sudo apt update
sudo apt install nginx

بررسی کنید که nginx در حال اجرا است

sudo systemctl status nginx

● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2023-08-20 01:04:22 UTC; 53s ago Docs: man:nginx(8) Process: 28210 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SU\ CCESS) Process: 28211 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 28312 (nginx) Tasks: 13 (limit: 76969) Memory: 13.1M CPU: 105ms CGroup: /system.slice/nginx.service ├─28312 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;" ├─28314 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ...

برای راه اندازی مجدد nginx، اجرا کنید:

sudo systemctl restart nginx

nginx را به صورت دستی فعال/غیرفعال کنید

sudo systemctl disable nginx

سپس برای فعال کردن مجدد آن، اجرا کنید:

sudo systemctl enable nginx

یک صفحه اصلی پیش فرض nginx نیز در طول مراحل نصب تنظیم می شود. می توانید این صفحه را با استفاده از آدرس IP سرور وب خود در مرورگر بارگذاری کنید. زیر

http://localhost

2-پیکر بندی

بلوک های سرور

nginx مجموعه‌ای از جزئیات پیکربندی خاص سایت را در بلوک‌های سرور سازمان‌دهی می‌کند و به طور پیش‌فرض برای عملیات تک سایتی از پیش پیکربندی شده است. این می تواند به عنوان "همانطور که هست" یا به عنوان یک الگوی شروع استفاده شود برای سرویس دهی به چندین سایت
پیکربندی تک سایت، فایل‌های خارج از /var/www/html را همانطور که توسط بلوک سرور تعریف شده و توسط /etc/nginx/sites-enabled/default ارائه شده است، ارائه می‌کند:

پیکربندی تک سایت

server {
        listen 80 default_server;                                                                                    
        listen [::]:80 default_server;

        root /var/www/html;                                                                                          
                                                                                                                         
        # Add index.php to the list if you are using PHP                                                             
        index index.php index.html index.htm index.nginx-debian.html;                                                          
                                                                                                                         
        server_name _;                                                                                               
                                                                                                                         
        location / {                                                                                                 
                # First attempt to serve request as file, then                                                       
                # as directory, then fall back to displaying a 404.                                                  
                try_files $uri $uri/ =404;                                                                           
        }
}

حتی برای پیکربندی یک سایت، در حالی که می توانید وب سایت خود را در /var/www/html قرار دهید، ممکن است بخواهید فایل های وب سایت را در مکان دیگری در سیستم فایل خود قرار دهید. به عنوان مثال، اگر میزبان www.my-site.org از /srv/my-site/html بودید، ممکن است فایل فوق را به شکل زیر ویرایش کنید:

server {
        listen                80;
        root                  /srv/my-site/html;
        index                 index.html index.php;
        server_name           localhost my-site.org www.my-site.org;
      location / {                                                                                                 
                try_files $uri $uri/ =404;                                                                           
        }
}

مطمئن شوید که ساختار دایرکتوری ریشه وب خود را ایجاد کرده اید:

sudo mkdir -p /srv/my-site/html
sudo chmod -R 755 /srv/my-site/html
echo "<html><body><h1>My Site!</h1></body></html>" > /srv/my-site/html/index.html

سپس، برای اینکه nginx پیکربندی خود را دوباره بارگذاری کند، اجرا کنید:

sudo systemctl reload nginx

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

http://localhost

پیکربندی چند سایتی

مشابه آپاچی، nginx از دایرکتوری های سایت های در دسترس و سایت های فعال برای پیکربندی چندین وب سایت استفاده می کند. برخلاف آپاچی، باید فعال سازی را به صورت دستی مدیریت کنید.
برای انجام این کار، ابتدا یک بلوک سرور جدید در یک فایل پیکربندی مانند بالا ایجاد کنید و آن را در /etc/nginx/sites-available/ ذخیره کنید. مطمئن شوید که به هر سایت یک server_name منحصربفرد و یک listen port number متفاوت بدهید.
در مرحله بعد، سایت را با ایجاد یک پیوند از آن فعال کنید sites-enabled .

sudo ln -s /etc/nginx/sites-available/<your-domain> /etc/nginx/sites-enabled/

برای غیرفعال کردن یک وب‌سایت، می‌توانید پیوند نمادین را در سایت‌های فعال حذف کنید. به عنوان مثال، هنگامی که سایت(های) جدید خود را پیکربندی کردید و دیگر به پیکربندی سایت پیش فرض نیاز ندارید:

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

SSL and HTTPS

در حالی که ایجاد یک وب‌سایت HTTP در پورت 80 نقطه شروع خوبی است (و شاید برای محتوای ثابت کافی باشد)، سیستم‌های تولید HTTPS را می‌خواهند، مانند سرویس در پورت 443 با SSL فعال از طریق فایل‌های cert. یک بلوک سرور با چنین پیکربندی ممکن است به شکل زیر باشد:

server {
       listen                443 ssl;
       root                  /var/www/html;
       return                301 https://$host$request_url;

       root                  /srv/our-site/html;                                                                    
       index                 index.html;                                                                            
       server_name           our-site.org www.our-site.org;                                                         
       ssl_certificate       our-site.org.crt;                                                                      
       ssl_certificate_key   our-site.org.key;                                                                      
       ssl_protocols         TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;                                                         
       ssl_ciphers           HIGH:!aNULL:!MD5;                                                                      
       ssl_session_timeout   15m;                                                                                   
                                                                                                                        
       location / {                                                                                                 
               try_files $uri $uri/ =404;                                                                           
       }
}

به لطف خط بازگشتی 301 در پیکربندی بالا، هر کسی که از سایت در پورت 80 از طریق یک URL HTTP بازدید می کند، به طور خودکار به URL امن HTTPS معادل هدایت می شود.
برای جزئیات بیشتر در مورد نحوه ایجاد و مدیریت گواهی‌ها، و برای جزئیات بیشتر در مورد پیکربندی و استفاده از آن سرویس، به صفحه امنیت - گواهی‌ها در این راهنما مراجعه کنید. بخش GnuTLS نحوه پیکربندی نسخه های مختلف پروتکل SSL و رمزهای مرتبط با آنها را توضیح می دهد.
به عنوان مثال، برای ایجاد یک گواهی خود امضا شده، ممکن است مجموعه ای از دستورات مشابه این را اجرا کنید:

sudo openssl genrsa -out our-site.org.key 2048                                                                   
openssl req -nodes -new -key our-site.org.key -out ca.csr                                                        
openssl x509 -req -days 365 -in our-site.org.csr -signkey our-site.org.key -out our-site.org.crt                 
mkdir /etc/apache2/ssl                                                                                           
cp our-site.org.crt our-site.org.key our-site.org.csr /etc/apache2/ssl/

3-نحوه استفاده از ماژول های nginx

مانند سایر وب سرورها، nginx از ماژول های بارگذاری شده پویا برای ارائه پشتیبانی درون سرور برای زبان های برنامه نویسی، مکانیسم های امنیتی و غیره پشتیبانی می کند. اوبونتو تعدادی از این ماژول‌ها را به‌عنوان بسته‌های جداگانه ارائه می‌کند که یا همزمان با nginx نصب می‌شوند، یا می‌توان آنها را جداگانه نصب کرد. ماژول های موجود
nginx ماژول هایی را که با آنها ساخته شده است از طریق گزینه -V گزارش می دهد. یک راه سریع و کثیف برای فهرست کردن ماژول های موجود بدین صورت است:

nginx -V 2>&1 | tr -- - '\n' | grep _module                                                                    

خروجی:
http_ssl_module http_stub_status_module http_realip_module ... http_image_filter_module=dynamic http_perl_module=dynamic http_xslt_module=dynamic stream_geoip_module=dynamic

بسیاری از این ماژول ها داخلی هستند و بنابراین همیشه با nginx در دسترس هستند، اما برخی به عنوان بسته های جداگانه وجود دارند که وضعیت نصب آنها را می توان از طریق apt بررسی کرد. مثلا:

apt policy libnginx-mod-http-image-filter                                                                      

خروجی:
libnginx-mod-http-image-filter: Installed: (none) Candidate: 1.24.0-1ubuntu1 Version table: 1.24.0-1ubuntu1 500 500 http://archive.ubuntu.com/ubuntu mantic/main amd64 Packages

از apt نیز می توان برای نصب ماژول پویا مورد نظر استفاده کرد:

sudo apt install libnginx-mod-http-image-filter                                                                

خروجی:
... The following NEW packages will be installed: libnginx-mod-http-image-filter 0 upgraded, 1 newly installed, 0 to remove and 34 not upgraded. ... Triggering nginx reload ...

فعال و غیرفعال کردن ماژول های پویا
ماژول های پویا به طور خودکار فعال می شوند و در هنگام نصب توسط nginx بارگذاری مجدد می شوند. اگر نیاز دارید که یک ماژول نصب شده را به صورت دستی غیرفعال کنید، فایل آن را از پوشه /etc/nginx/modules-enabled حذف کنید، برای مثال:

 $ ls /etc/nginx/modules-*                                                                                        

خروجی:
/etc/nginx/modules-available:

/etc/nginx/modules-enabled:
50-mod-http-image-filter.conf

$ sudo mv /etc/nginx/modules-enabled/50-mod-http-image-filter.conf /etc/nginx/modules-available/
$ service nginx restart

توجه داشته باشید که ماژول های داخلی را نمی توان غیرفعال/فعال کرد.

پیکربندی ماژول ها

## /etc/nginx/modules-enabled/50-mod-http-image-filter.conf
load_module modules/ngx_http_image_filter_module.so;

توجه داشته باشید که اگر بنا به دلایلی ترجیح داده می شود، می توانید از پارامتر load_module در /etc/nginx/nginx.conf خود در سطح بالا نیز استفاده کنید.
برای استفاده از یک ماژول برای وب سایت خود، تنظیمات آن در بلوک سرور شما مشخص شده است. مثلا:

 location /img/ {
    image_filter resize 240 360;
    image_filter rotate 180;
    image_filter_buffer 16M;
    error_page   415 = /415.html;
}
منبع:
[نحوه نصب Nginx](https://ubuntu.com/server/docs/how-to-install-nginx)
[نحوه پیکربندی nginx](https://ubuntu.com/server/docs/how-to-configure-nginx)
[نحوه استفاده از ماژول های nginx](https://ubuntu.com/server/docs/how-to-use-nginx-modules)

صلوات