Nginx là webserver khá phổ biến hiện nay. Mọi người hay lựa chọn cài nginx từ các repositories(apt/yum) nhưng các bản build sẵn thường thừa các module làm nginx cồng kềnh - giảm hiệu năng hoặc thiếu module cần thiết (ví dụ httpv2) so với yêu cầu của chúng ta. Để có một bản nginx vừa tối ưu và đúng yêu cầu đôi khi bạn cần build lại nginx. Bài hôm nay mình sẽ chia sẻ các build nginx tử source.

Tóm tắt,

Nginx sử dụng make làm công cụ để build (theo mình thấy hầu hết các công cụ opensource dùng make). Việc dùng make căn bản có các bước sau.

  • B1. Cài các gói/thư viện require để build. Cài này phụ thuộc vào phần mềm yêu cầu gì. Thông thường nó hay được ghi trong file Readme.md nằm trong thư mục mã nguồn hoặc trang chủ của phần mềm.

  • B2. Chạy ./configuration có thể kèm đối số hoặc không để load/thiết lập các biến để sinh ra Makefile

  • B3. Chạy make để build ra binary. Kết thúc bước này cơ bản là chương trình có thể chạy được rồi vì nó là binary rồi.

  • B4. Chạy make install để cài (Option nếu Makefile hỗ trợ chỉ thị install)

  • B5. Chạy make uninstall để gỡ bỏ (Option nếu make hỗ trợ chỉ thị uninstall)

Build nginx

Mình vừa nói nginx dùng make nên làm tương tự thôi

  • B1. Đầu tiên ta cài các gói cần thiết
apt-get -y install build-essential zlib1g-dev libpcre3 libpcre3-dev libbz2-dev libssl-dev tar unzip curl
  • B2. Tải mã nguồn về giải nén và chạy ./configuration

Tải mã nguồn về và giải nén. Ở đây cứ tải bản mời nhất về cho xịn.

#wget http://nginx.org/download/nginx-1.9.5.tar.gz
#tar -xzvf nginx-1.9.5.tar.gz
#cd nginx-1.9.5

Chạy configuration

./configure \
    --prefix=/usr/share/nginx \
    --sbin-path=/usr/sbin/nginx \
    --conf-path=/etc/nginx/nginx.conf \
    --pid-path=/var/run/nginx.pid \
    --lock-path=/var/lock/nginx.lock \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --user=www-data \
    --group=www-data \
    --without-mail_pop3_module \
    --without-mail_imap_module \
    --without-mail_smtp_module \
    --without-http_fastcgi_module \
    --without-http_uwsgi_module \
    --without-http_scgi_module \
    --without-http_memcached_module \
    --with-http_ssl_module \
    --with-http_stub_status_module \
    --with-http_gzip_static_module \
    --with-http_v2_module
  • B3: Cũng trong thư mục ở bước trên make để build
make
  • B4: Chạy make install để cài đặt
make install

Gõ nginx -V để kiểm tra xem nginx đã cài thành công chưa. Nếu kết quả hiện ra version của nginx là đã thành công. KQ có thể như hình dưới (dĩ nhiên số version của bạn có thể khác).

[email protected]:/etc/nginx# nginx -V
nginx version: nginx/1.9.5
built by gcc 5.2.1 20150911 (Debian 5.2.1-17)
built with OpenSSL 1.0.2d 9 Jul 2015
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --user=www-data --group=www-data --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_fastcgi_module --without-http_uwsgi_module --without-http_scgi_module --without-http_memcached_module --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_v2_module
  • B5: Tạo script init

Tạo file init cho systemd tại vị trí /lib/systemd/system/nginx.service với nội dung như sau

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Cần chú ý các giá trị ở phần Service điền sao cho phù hợp với các đối số lúc ta build.

Lúc này ta đã có nginx để sử dụng như bình thường.

systemctl start nginx

Tham khảo https://fak3r.com