همانطور که مستحضرید NGINX وب سروری است که از آن به عنوان پراکسی، سرور پراکسی ایمیل، متوازن کننده بار و کش سرور هم استفاده می شود. این وب سرور به صورت ماژولار طراحی شده و دارای ماژول های اصلی و شخص ثالث است. این وب سرور به زبان C پیاده‌سازی شده است.

می خواهیم یه تغییراتی در NGINX بدیم. این تغییرات در درجه اول با هدف آشنایی با کد منبع این وب سرور انجام میشه و در مراحل بعدی امکاناتی رو به اون اضافه می کنه. کد منبع NginX به صورت فقط خواندنی در Github وجود دارد. برای شروع در این پست فرایند کامپایل و ساخت NGINX را بر روی سیستم عامل Ubuntu Server 18.04 LTS بررسی می کنیم. در پست های بعدی ان شاءالله تغییرات مورد نظر را اعمال می کنیم.

توجه: این راهنما برای نصب NGINX نسخه ۱.۱۵ بر روی Ubuntu Server 18.04 LTS تنظیم شده است.

آماده سازی

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

lsb_release -ds # Ubuntu 18.04 LTS

پیش از هر کاری باید بسته های موجود بر روی سیستم را بروزرسانی نمایید. برای این کار از دستور زیر استفاده کنید.

sudo apt update && sudo apt upgrade -y

پیش نیازها

همانطور که اشاره شد وب سرور NGINX با استفاده از زبان C نوشته شده است. بنابراین برای ساخت آن می بایست ابزارهای لازم برای کامپایل بر روی سیستم نصب شود. این ابزارها به صورت پیش فرض بر روی Ubuntu وجود ندارد. برای نصب ابزارهای مورد نیاز برای کامپایل و ساخت کدهای مبتنی بر C از دستور زیر استفاده کنید. در این دستور دو برنامه git و tree هم نصب خواهند شد. (اگر Ubuntu شما صفر کیلومتر باشد حدودا ۴۰ مگابایت فایل دانلود خواهد شد)

sudo apt install -y build-essential git tree

برای کامپایل NGINX سه کتابخانه دیگر نیز مورد نیاز است. کتابخانه های PCRE، zlib و OpenSSL که می توانید کد مربوط به هر کتابخانه را به کمک wget دانلود نمایید. پس از دانلود هر کدام یک از کتابخانه ها آن را از حالت فشرده خارج کنید. دستورات زیر این کار را برای شما انجام می دهد.

# PCRE version 8.42wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz && tar xzvf pcre-8.42.tar.gz# zlib version 1.2.11wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz# OpenSSL version 1.1.0hwget https://www.openssl.org/source/openssl-1.1.0h.tar.gz && tar xzvf openssl-1.1.0h.tar.gz

حال نوبت به نصب پیش نیازهای NGINX است. برای نصب پیش نیاز ها از دستورات زیر استفاده کنید. (اگر Ubuntu شما صفر کیلومتر باشد حدودا ۴۰ مگابایت فایل دانلود خواهد شد)

sudo add-apt-repository -y ppa:maxmind/ppasudo apt updatesudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev

ساخت NGINX

ابتدا با استفاده از wget کد NGINX را دانلود و سپس از حالت فشرده خارج کنید.

wget https://nginx.org/download/nginx-1.15.0.tar.gz && tar zxvf nginx-1.15.0.tar.gz

با دستور زیر وارد پوشه کد شوید:

cd ~/nginx-1.15.0

راهنمای کاربری NGINX را در پوشه راهنمای سیستم عامل کپی کنید:

sudo cp ~/nginx-1.15.0/man/nginx.8 /usr/share/man/man8sudo gzip /usr/share/man/man8/nginx.8ls /usr/share/man/man8/ | grep nginx.8.gz# Check that Man page for NGINX is working:man nginx

با دستورات زیر NGINX را Configure و make و در نهایت نصب کنید. مرحله نصب نیاز به دسترسی root دارد.

./configure --prefix=/etc/nginx \             --sbin-path=/usr/sbin/nginx \             --modules-path=/usr/lib/nginx/modules \             --conf-path=/etc/nginx/nginx.conf \            --error-log-path=/var/log/nginx/error.log \            --pid-path=/var/run/nginx.pid \            --lock-path=/var/run/nginx.lock \            --user=nginx \            --group=nginx \            --build=Ubuntu \            --builddir=nginx-1.15.0 \            --with-select_module \            --with-poll_module \            --with-threads \            --with-file-aio \            --with-http_ssl_module \            --with-http_v2_module \            --with-http_realip_module \            --with-http_addition_module \            --with-http_xslt_module=dynamic \            --with-http_image_filter_module=dynamic \            --with-http_geoip_module=dynamic \            --with-http_sub_module \            --with-http_dav_module \            --with-http_flv_module \            --with-http_mp4_module \            --with-http_gunzip_module \            --with-http_gzip_static_module \            --with-http_auth_request_module \            --with-http_random_index_module \            --with-http_secure_link_module \            --with-http_degradation_module \            --with-http_slice_module \            --with-http_stub_status_module \            --with-http_perl_module=dynamic \            --with-perl_modules_path=/usr/share/perl/5.26.1 \            --with-perl=/usr/bin/perl \            --http-log-path=/var/log/nginx/access.log \            --http-client-body-temp-path=/var/cache/nginx/client_temp \            --http-proxy-temp-path=/var/cache/nginx/proxy_temp \            --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \            --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \            --http-scgi-temp-path=/var/cache/nginx/scgi_temp \            --with-mail=dynamic \            --with-mail_ssl_module \            --with-stream=dynamic \            --with-stream_ssl_module \            --with-stream_realip_module \            --with-stream_geoip_module=dynamic \            --with-stream_ssl_preread_module \            --with-compat \            --with-pcre=../pcre-8.42 \            --with-pcre-jit \            --with-zlib=../zlib-1.2.11 \            --with-openssl=../openssl-1.1.0h \            --with-openssl-opt=no-nextprotoneg \            --with-debugmakesudo make install

پس از ساخت و نصب می بایست ماژول های NGINX در محل مناسبی از سیستم لینک شوند. برای این کار از دستور زیر استفاده کنید:

sudo ln -s /usr/lib/nginx/modules /etc/nginx/modules

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

sudo nginx -V# nginx version: nginx/1.15.0 (Ubuntu)# built by gcc 7.3.0 (Ubuntu 7.3.0-16ubuntu3)# built with OpenSSL ۱.۱.0h  ۲۷ Mar 2018# TLS SNI support enabled# configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules# . . .# . . .

برای NGINX گروه کاربری و کاربر جدید تعریف کنید:

sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx user" --group nginx

برای بررسی خطاهای احتمالی دستور زیر را اجرا نمایید:

sudo nginx -t# Will throw this error -> nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed (2: No such file or directory)# Create NGINX cache directories and set proper permissionssudo mkdir -p /var/cache/nginx/client_temp /var/cache/nginx/fastcgi_temp /var/cache/nginx/proxy_temp /var/cache/nginx/scgi_temp /var/cache/nginx/uwsgi_tempsudo chmod 700 /var/cache/nginx/*sudo chown nginx:root /var/cache/nginx/*# Re-check syntax and potential errors.sudo nginx -t

فایل سرویس برای NGINX ایجاد کنید تا به هنگام بالا آمدن سیستم اجرا شود:

sudo nano /etc/systemd/system/nginx.service

تنظیمات زیر را در فایلی که ایجاد کردید کپی کنید:

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

سرویس را با دستور زیر فعال و سپس اجرا نمایید:

sudo systemctl enable nginx.servicesudo systemctl start nginx.service

با یکی از دستورات زیر وضعیت سرویس اجرا شده را مشاهده نمایید:

sudo systemctl status nginx.service# یاps aux | grep nginx# یاcurl -I 127.0.0.1

مرورگر خود را باز کرده و آدرس IP سرور را در نوار آدرس مرورگر وارد کنید. اگر کار به درستی انجام شده باشد تصویر زیر نشان داده می شود:

صفحه خوش آمدگویی NGINX

تنظیمات فایروال هم با خودتون!

مطالب مرتبط