كيفية تجميع Nginx من المصدر في دبيان 10

المقدمة

Nginx هو برنامج خادم ويب مفتوح المصدر مصمم مع التزامن العالي ، ويمكن استخدامه كخادم HTTP / HTTPS ، وخادم وكيل عكسي ، وخادم وكيل بريد ، وموازن تحميل برامج ، فاصل TLS ، خادم تخزين مؤقت والمزيد!

وهو جزء من برنامج معياري إلى حد كبير. حتى بعض الأجزاء التي تبدو "مضمنة" من البرنامج ، مثل GZIP أو SSL ، يتم إنشاؤها بالفعل كوحدات يمكن تمكينها وتعطيلها خلال وقت البناء.

يحتوي على وحدات أساسية (أصلية) ووحدات خارجية (خارجية) تم إنشاؤها بواسطة المجتمع. في الوقت الحالي ، هناك أكثر من مائة وحدة تابعة لجهات خارجية يمكننا استخدامها.

مكتوب بلغة C ، إنه برنامج سريع وخفيف الوزن.

يعد تثبيت Nginx من التعليمات البرمجية المصدر أمرًا سهلاً نسبيًا - قم بتنزيل أحدث إصدار من التعليمات البرمجية المصدر لـ Nginx ، وقم بتكوينه وإنشائه وتثبيته.

ستحتاج إلى اختيار ما إذا كنت تريد تنزيل الخط الرئيسي أو إصدار مستقر ، ولكن بنائه هو نفسه.

في هذا الدليل ، سنقوم بتجميع نسخة أساسية من Nginx على Debian 10 (المغفل). سنستخدم جميع الوحدات المتاحة في إصدار Nginx مفتوح المصدر.

لماذا تجميع وتثبيت Nginx من المصدر

ربما تسأل لماذا يقوم أحد بتجميع Nginx من مصدر عندما يمكنك استخدام الحزم المعدة. فيما يلي بعض الأسباب التي قد تجعلك ترغب في تجميع برنامج معين بنفسك:

  • للتحكم في خيارات التكوين.
  • لتثبيت البرنامج في أي مكان تريده. يمكنك حتى تثبيت عدة إصدارات مختلفة من نفس البرنامج.
  • للتحكم في الإصدار الذي تقوم بتثبيته. لا تظل التوزيعات دائمًا على اطلاع دائم بأحدث الإصدارات من جميع الحزم ، وخاصة الإضافات لحزم البرامج.
  • لفهم أفضل لكيفية عمل البرنامج.

مستقر مقابل نسخة الخط الرئيسي

يتوفر Nginx Open Source في نسختين:

  • الخط الرئيسي - يتضمن أحدث الميزات وإصلاح الأخطاء وهو دائمًا محدثًا. إنه موثوق ، ولكن قد يتضمن بعض الوحدات التجريبية ، وقد يحتوي أيضًا على عدد من الأخطاء الجديدة.
  • مستقر - لا يتضمن جميع الميزات الحديثة ، ولكن به إصلاحات أخطاء حرجة يتم دائمًا إرجاعها إلى إصدار الخط الرئيسي.

الوحدات الأساسية مقابل الوحدات الخارجية

يحتوي Nginx على نوعين من الوحدات التي يمكنك استخدامها: الوحدات الأساسية ووحدات الطرف الثالث.

يقوم مطورو Nginx الأساسيون ببناء وحدات أساسية ، وهم جزء من البرنامج نفسه.

يقوم المجتمع ببناء وحدات خارجية ، ويمكنك استخدامها لتوسيع الوظائف. هناك الكثير من الوحدات الخارجية المفيدة.

الوحدات النمطية مقابل الوحدات الديناميكية

توجد وحدات ثابتة في Nginx من الإصدار الأول. تم تقديم الوحدات الديناميكية مع Nginx 1.9.11+ في فبراير 2016.

مع الوحدات الثابتة ، يتم إصلاح مجموعة من الوحدات التي تشكل ثنائي Nginx في وقت الترجمة بواسطة ./configureالبرنامج النصي. تستخدم الوحدات الثابتة --with-foo_bar_moduleأو --add-module=PATHبناء الجملة.

لتجميع وحدة أساسية (قياسية) كديناميكية نضيفها =dynamic، على سبيل المثال --with-http_image_filter_module=dynamic.

لتجميع وحدة نمطية لجهة خارجية على أنها ديناميكية ، نستخدم --add-dynamic-module=/path/to/moduleبناء الجملة ، ثم نقوم بتحميلها باستخدام load_moduleالتوجيه في السياق العام nginx.confللملف.

متطلبات بناء Nginx من المصدر

بالمقارنة مع بعض برامج UNIX / Linux الأخرى ، فإن Nginx خفيف الوزن ولا يحتوي على العديد من تبعيات المكتبة. يعتمد تكوين البناء الافتراضي على 3 مكتبات فقط ليتم تثبيتها: OpenSSL / LibreSSL / BoringSSL و Zlib و PCRE.

ملاحظة : يمكن أيضًا تصنيف Nginx مقابل مكتبات التشفير LibreSSL و BoringSSL بدلاً من OpenSSL.

قبل ان تبدأ

تحقق من إصدار دبيان.

lsb_release -ds
# Debian GNU/Linux 10 (buster)

إنشاء مستخدم عادي مع sudoوصول.

adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe

ملاحظة : استبدل johndoeباسم المستخدم الخاص بك .

التبديل إلى مستخدم جديد.

su - johndoe

قم بإعداد المنطقة الزمنية.

sudo dpkg-reconfigure tzdata

تحديث برنامج نظام التشغيل الخاص بك.

sudo apt update && sudo apt upgrade -y

قم بتثبيت الحزم اللازمة.

sudo apt install -y software-properties-common ufw

بناء Nginx من المصدر

Nginx هو برنامج مكتوب بلغة C ، لذلك ستحتاج أولاً إلى تثبيت أداة مترجم. تثبيت build-essential، gitو tree.

sudo apt install -y build-essential git tree

قم بتنزيل أحدث إصدار رئيسي من شفرة مصدر Nginx وفك ضغط أرشيف شفرة المصدر. يتم توزيع شفرة مصدر Nginx كأرشيف مضغوط ، مثل معظم برامج Unix و Linux.

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

قم بتنزيل كود مصدر تبعيات Nginx الإلزامية واستخراجه.

# PCRE version 8.43
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz && tar xzvf pcre-8.43.tar.gz

# zlib version 1.2.11
wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz

# OpenSSL version 1.1.1c
wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz && tar xzvf openssl-1.1.1c.tar.gz

تثبيت تبعيات Nginx الاختيارية.

sudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev

تنظيف جميع .tar.gzالملفات. نحن لسنا بحاجة إليها بعد الآن.

rm -rf *.tar.gz

أدخل دليل مصدر Nginx.

cd ~/nginx-1.17.2

للحصول على أدلة وملفات قائمة المقاييس الجيدة التي تتكون منها شفرة مصدر Nginx tree.

tree -L 2 .

انسخ الصفحة اليدوية إلى /usr/share/man/man8/.

sudo cp ~/nginx-1.17.2/man/nginx.8 /usr/share/man/man8
sudo gzip /usr/share/man/man8/nginx.8
ls /usr/share/man/man8/ | grep nginx.8.gz
# Check that man page for Nginx is working
man nginx

للحصول على المساعدة ، يمكنك الاطلاع على قائمة كاملة بخيارات وقت التجميع المحدثة لـ Nginx عن طريق تشغيل ما يلي.

./configure --help
# To see want core modules can be built as dynamic run:
./configure --help | grep -F =dynamic

تكوين وتجميع وتثبيت Nginx.

./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=Debian \
            --builddir=nginx-1.17.2 \
            --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.43 \
            --with-pcre-jit \
            --with-zlib=../zlib-1.2.11 \
            --with-openssl=../openssl-1.1.1c \
            --with-openssl-opt=no-nextprotoneg \
            --with-debug

make
sudo make install

بعد التجميع ، انتقل إلى ~دليل منزلك ( ).

cd ~

Symlink /usr/lib/nginx/modulesإلى /etc/nginx/modules. هذا هو المكان القياسي لوحدات Nginx.

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

قم بطباعة إصدار Nginx وإصدار المترجم وتكوين معلمات البرنامج النصي.

sudo nginx -V

# nginx version: nginx/1.17.2 (Debian)
# built by gcc 8.3.0 (Debian 8.3.0-6)
# built with OpenSSL 1.1.1c  28 May 2019
# 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
# Check that user and group are created
sudo tail -n 1 /etc/passwd /etc/group /etc/shadow

تحقق من بنية 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 permissions
sudo 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_temp
sudo chmod 700 /var/cache/nginx/*
sudo chown nginx:root /var/cache/nginx/*

# Re-check syntax and potential errors. 
sudo nginx -t

أنشئ ملف وحدة Nginx systemd.

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

تعبئة /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

قم بتمكين Nginx للبدء في التمهيد وبدء Nginx على الفور.

sudo systemctl enable nginx.service
sudo systemctl start nginx.service

تحقق مما إذا كان Nginx سيبدأ تلقائيًا بعد إعادة التشغيل.

sudo systemctl is-enabled nginx.service
# enabled

تحقق من الحالة.

sudo systemctl status nginx.service

ملاحظة : يمكنك التحقق من تشغيل Nginx بالانتقال إلى نطاق موقعك أو عنوان IP في متصفح الويب. سترى صفحة ترحيب Nginx. هذا مؤشر على أن Nginx قيد التشغيل على VPS الخاص بك.

إنشاء ملف تعريف تطبيق UFW Nginx.

sudo vim /etc/ufw/applications.d/nginx

انسخ / الصق المحتوى التالي في /etc/ufw/applications.d/nginxالملف.

[Nginx HTTP]
title=Web Server (Nginx, HTTP)
description=Small, but very powerful and efficient web server
ports=80/tcp

[Nginx HTTPS]
title=Web Server (Nginx, HTTPS)
description=Small, but very powerful and efficient web server
ports=443/tcp

[Nginx Full]
title=Web Server (Nginx, HTTP + HTTPS)
description=Small, but very powerful and efficient web server
ports=80,443/tcp

التحقق من إنشاء ملفات تعريف تطبيق UFW والتعرف عليها.

sudo ufw app list

# Available applications:
  # Nginx Full
  # Nginx HTTP
  # Nginx HTTPS
  # OpenSSH

يقوم Nginx افتراضيًا بإنشاء .defaultملفات النسخ الاحتياطي /etc/nginx. إزالة .defaultالملفات من /etc/nginxالدليل.

sudo rm /etc/nginx/*.default

وضع تسليط الضوء على بناء الجملة من تكوين Nginx لمحرر Vim في ~/.vim.

# For regular non-root user
mkdir ~/.vim/
cp -r ~/nginx-1.17.2/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.17.2/contrib/vim/* /root/.vim/

ملاحظة : من خلال القيام بالخطوة أعلاه ، ستحصل على بناء جملة لطيف يبرز عند تحرير ملفات تكوين Nginx في محرر Vim.

خلق conf.d، snippets، sites-availableو sites-enabledالدلائل في /etc/nginx.

sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}

تغيير الأذونات وملكية المجموعة لملفات سجل Nginx.

sudo chmod 640 /var/log/nginx/*
sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log

إنشاء تكوين دوران السجل لـ Nginx.

sudo vim /etc/logrotate.d/nginx

قم بملء الملف بالنص التالي ، ثم احفظه واخرج منه.

/var/log/nginx/*.log {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 640 nginx adm
    sharedscripts
    postrotate
            if [ -f /var/run/nginx.pid ]; then
                    kill -USR1 `cat /var/run/nginx.pid`
            fi
    endscript
}

إزالة كافة الملفات التي تم تنزيلها من الدليل الرئيسي.

cd ~
rm -rf nginx-1.17.2/ openssl-1.1.1c/ pcre-8.43/ zlib-1.2.11/

ملخص

هذا هو. الآن ، لديك أحدث إصدار من Nginx مثبتًا. يتم تجميعه بشكل ثابت ضد بعض المكتبات الهامة مثل OpenSSL. غالبًا ما يكون إصدار OpenSSL الذي يوفره النظام قديمًا. باستخدام طريقة التثبيت هذه مع إصدار أحدث من OpenSSL ، يمكنك الاستفادة من الأصفار الحديثة مثل CHACHA20_POLY1305والبروتوكولات مثل TLS 1.3 المتوفرة في OpenSSL 1.1.1. علاوة على ذلك ، من خلال تجميع البيانات الثنائية الخاصة بك ، يمكنك تخصيص الوظائف التي ستوفرها Nginx الخاصة بك ، وهي أكثر مرونة بكثير من تثبيت برنامج ثنائي تم إنشاؤه مسبقًا.

اترك تعليقاً

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

وظائف طبقات معمارية مرجعية للبيانات الضخمة

وظائف طبقات معمارية مرجعية للبيانات الضخمة

اقرأ المدونة لمعرفة الطبقات المختلفة في بنية البيانات الضخمة ووظائفها بأبسط طريقة.

6 أشياء شديدة الجنون حول نينتندو سويتش

6 أشياء شديدة الجنون حول نينتندو سويتش

يعرف الكثير منكم أن Switch سيصدر في مارس 2017 وميزاته الجديدة. بالنسبة لأولئك الذين لا يعرفون ، قمنا بإعداد قائمة بالميزات التي تجعل "التبديل" "أداة لا غنى عنها".

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

هل تنتظر عمالقة التكنولوجيا للوفاء بوعودهم؟ تحقق من ما تبقى دون تسليم.

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

اقرأ هذا لمعرفة مدى انتشار الذكاء الاصطناعي بين الشركات الصغيرة وكيف أنه يزيد من احتمالات نموها ومنح منافسيها القدرة على التفوق.

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

مع تطور العلم بمعدل سريع ، واستلام الكثير من جهودنا ، تزداد أيضًا مخاطر تعريض أنفسنا إلى تفرد غير قابل للتفسير. اقرأ ، ماذا يمكن أن يعني التفرد بالنسبة لنا.

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

لقد أصبح حل CAPTCHA صعبًا جدًا على المستخدمين في السنوات القليلة الماضية. هل ستكون قادرة على أن تظل فعالة في اكتشاف البريد العشوائي والروبوتات في المستقبل القريب؟

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

ما هو التطبيب عن بعد والرعاية الصحية عن بعد وأثره على الأجيال القادمة؟ هل هو مكان جيد أم لا في حالة الوباء؟ اقرأ المدونة لتجد طريقة عرض!

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

ربما سمعت أن المتسللين يكسبون الكثير من المال ، لكن هل تساءلت يومًا كيف يجنون هذا النوع من المال؟ دعنا نناقش.

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

أصدرت Apple مؤخرًا macOS Catalina 10.15.4 تحديثًا تكميليًا لإصلاح المشكلات ولكن يبدو أن التحديث يتسبب في المزيد من المشكلات التي تؤدي إلى إنشاء أجهزة macOS. قراءة هذه المادة لمعرفة المزيد