Nginx (بخوانید انجین ایکس) یک وب‌سرور رایگان و متن‌باز با کارایی بالا است. بعلاوه، Nginx به عنوان reverse proxy server و load balancer نیز ایفای نقش می‌کند. ما در این مطلب به آموزش نصب Nginx روی CentOS 8 و کانفیگ آن به منظور میزبانی از یک وب‌سایت استاتیک می‌پردازیم.


مراحل نصب Nginx روی CentOS 8:

1) با استفاده از فرمان ssh به سرور ابری یا فیزیکی خودتان لاگین نمایید:

ssh user@cloud-server-ip

2) پکیج Nginx را جستجو نمایید:

sudo yum search nginx

3) با استفاده از فرمان yum پکیج Nginx را روی CentOS 8 نصب نمایید:

sudo yum update
sudo yum install nginx

4) تنظیمات فایروال را بروز رسانی کرده و پورت‌های تی‌سی‌پی 80 و 443 را باز نمایید:

sudo firewall-cmd --permanent --zone=public --add-service=https --add-service=http
sudo firewall-cmd --reload

با ما همراه باشید تا تمامی مراحل را با جزئیات بیشتری مورد بررسی قرار دهیم.


گام اول – بروز رسانی سیستم:

بروز نگه داشتن سیستم، کرنل و اپلیکیشن‌های نصب شده یک کار حیاتی و بسیار مهم بوده و بر عهده ادمین سیستم است. با استفاده از فرامین زیر سیستم را بروز رسانی کنید:

sudo yum updateinfo
sudo yum update
## Reboot the system if a new kernel update was installed ##
sudo reboot
گام دوم – پیدا کردن پکیج Nginx:

با اجرای فرامین زیر از در دسترس بودن وب‌سرور Nginx در توزیع لینوکس‌ خودتان، اطلاع حاصل کنید:

 Last metadata expiration check: 1:09:02 ago on Sun Nov 24 17:24:15 2019.
============================== Name Exactly Matched: nginx ==============================
nginx.x86_64 : A high performance web server and reverse proxy server
============================= Name & Summary Matched: nginx =============================
nginx-mod-mail.x86_64 : Nginx mail modules
nginx-mod-stream.x86_64 : Nginx stream modules
collectd-nginx.x86_64 : Nginx plugin for collectd
nginx-mod-http-perl.x86_64 : Nginx HTTP perl module
nginx-mod-http-xslt-filter.x86_64 : Nginx XSLT module
nginx-mod-http-image-filter.x86_64 : Nginx HTTP image filter module
nginx-filesystem.noarch : The basic directory layout for the Nginx server
pcp-pmda-nginx.x86_64 : Performance Co-Pilot (PCP) metrics for the Nginx Webserver
nginx-all-modules.noarch : A meta package that installs all available Nginx modules

با اجرای فرمان زیر می‌توانید اطلاعاتی درباره ورژن Nginx که در حال نصب آن هستید، کسب نمایید:

sudo yum info nginx

خروجی نمونه:

Last metadata expiration check: 1:11:11 ago on Sun Nov 24 17:24:15 2019.
Installed Packages
Name         : nginx
Epoch        : 1
Version      : 1.14.1
Release      : 9.module_el8.0.0+184+e34fea82
Arch         : x86_64
Size         : 1.7 M
Source       : nginx-1.14.1-9.module_el8.0.0+184+e34fea82.src.rpm
Repo         : @System
From repo    : AppStream
Summary      : A high performance web server and reverse proxy server
URL          : http://nginx.org/
License      : BSD
Description  : Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and
             : IMAP protocols, with a strong focus on high concurrency, performance and
             : low memory usage.
گام سوم – نصب Nginx:

برای نصب آخرین نسخه پایدار وب‌سرور Nginx فرمان زیر را اجرا نمایید [nixmd name=”yum”]:

$ sudo yum install nginx

نصب Nginx روی CentOS 8

گام چهارم – فعال‌سازی سرور Nginx

سرویس Nginx را با فرمان systemctl فعال کنید. بدین ترتیب این سرویس در هنگام بوت‌شدن سرور آغاز و اجرا می‌گردد:

sudo systemctl enable nginx

نمونه خروجی:

Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service ? /usr/lib/systemd/system/nginx.service.

شروع سرویس با اجرای فرمان زیر:

sudo systemctl start nginx
فرامین start/stop/restart سرور Nginx

می‌توانید بر اساس نیازتان هر کدام از فرامین زیر را برای start/stop/restart کردن سرور Nginx اجرا نمایید:

sudo systemctl start nginx ## &lt-- start the server ##
sudo systemctl stop nginx ## &lt-- stop the server ##
sudo systemctl restart nginx ## &lt-- restart the server ##
sudo systemctl reload nginx ## &lt-- reload the server ##
sudo systemctl status nginx ## &lt-- get status of the server ##

استارت، استاپ و ریستارت Nginx

گام پنجم – باز کردن و فعال‌سازی پورت‌های 80 و 443 با استفاده از فرمان firewall-cmd
$ sudo firewall-cmd --permanent --zone=public --add-service=http --add-service=https
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-services --zone=public

باز کردن پورت‌های 80 و 443

گام ششم – تست

با استفاده از فرمان ss از باز بودن پورت‌های 80 و 443 اطمینان حاصل نمایید:

sudo ss -tulpn

خروجی نمونه (به خطوط 80: و 443: توجه نمایید):

Netid       State         Recv-Q        Send-Q                    Local Address:Port               Peer Address:Port                                                                                               
udp         UNCONN        0             0                     10.147.164.2%eth0:68                      0.0.0.0:*           users:(("NetworkManager",pid=50,fd=15))                                                
tcp         LISTEN        0             128                             0.0.0.0:80                      0.0.0.0:*           users:(("nginx",pid=1316,fd=6),("nginx",pid=1315,fd=6),("nginx",pid=1314,fd=6))        
tcp         LISTEN        0             128                                [::]:80                         [::]:*           users:(("nginx",pid=1316,fd=7),("nginx",pid=1315,fd=7),("nginx",pid=1314,fd=7)) 
tcp         LISTEN        0             128                                [::]:443                         [::]:*           users:(("nginx",pid=1316,fd=7),("nginx",pid=1315,fd=7),("nginx",pid=1314,fd=7))

اگر آدرس ip سرور خودتان را نمی‌دانید از فرمان زیر استفاده کنید:

ip a

خروجی نمونه:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:6b:8d:f7 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.147.164.2/24 brd 10.147.164.255 scope global dynamic noprefixroute eth0
       valid_lft 3067sec preferred_lft 3067sec
    inet6 fe80::216:3eff:fe6b:8df7/64 scope link 
       valid_lft forever preferred_lft forever

با توجه به خروجی فوق آدرس ip سرور ما 10.21.136.134 است. یک مرورگر باز کنید و URL (نام دامنه) یا آدرس IP را وارد نمایید:

http://10.147.164.2

تست Nginx

با استفاده از فرمان curl نیز می‌توان اطلاعات مشابهی را بدست آورد:

curl -I http://10.147.164.2
curl http://10.147.164.2

تست Nginx با استفاده از فرمان curl

گام هفتم – کانفیگ سرور Nginx
  • CentOS 8 Nginx Config directory – /etc/nginx
  • Master/Global config file – /etc/nginx/nginx.conf
  • TCP ports opened by Nginx – 80 (HTTP), 443 (HTTPS)
  • Document root directory – /usr/share/nginx/html

از یک ویرایشگر متن برای ویرایش فایل‌ها استفاده کنید. با استفاده از فرمان vi/nano نیز اینکار امکان پذیر است:

$ sudo vi /etc/nginx/nginx.conf

خروجی نمونه:

# For more information on configuration, see:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
 
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
 
events {
    worker_connections 1024;
}
 
http {
    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  /var/log/nginx/access.log  main;
 
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
 
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
 
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
 
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;
 
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
 
        location / {
        }
 
        error_page 404 /404.html;
            location = /40x.html {
        }
 
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

برای مشاهده مستندات سرور Nginx به این لینک مراجعه نمایید.

شما می‌توانید تصاویر، js، html و css های خودتان را در آدرس /usr/share/nginx/html/ کپی یا آپلود نمایید:

cd /usr/share/nginx/html/
sudo cp /backups/cyberciti.biz/*.html .
sudo cp /backups/cyberciti.biz/*.css .

برای کپی کردن از لوکال دسکتاپ روی ریموت سرور می‌توانید از فرمان rsync یا scp و یا sftp استفاده نمایید:

rsync ~/projects/static/www.cyberciti.biz/prod/* your-username@10.147.164.2:/usr/share/nginx/html/

جمع بندی:

شما در این مطلب با نحوه نصب Nginx روی CentOS 8 آشنا شدید و آموختید که چگونه این وب‌سرور متن‌باز و رایگان را کانفیگ نمایید. امیدواریم که مفید واقع شود.