Build nginx with third-party modules
nginx
14
modules
1
White

Quăng viết ngày 22/06/2016

Gần đây mình thấy có một module khá thú vị của nginx trên github nên đã thử biên dịch nginx với module này và test thử. Nhân tiện nên note lại để mọi người cùng tham khảo.

Ở đây mình sẽ dùng nginx 1.8.1 và module nginx-module-vts

1. Chuẩn bị môi trường

Sẽ cần một số thư viện này nọ như openssl, zlib, pcre ..., mình sẽ không nhắc về vấn đề này. Hiện tại để build môi trường mình hay dùng một image docker của mình, image này có sẵn đầy đủ các thư viện để biên dịch các gói phần mềm, link. Image này chạy CentOS bản 6.x

Một số chuẩn bị khác

~$ mkdir -pv /usr/src/build/modules
~$ cd /usr/src/build
~$ wget http://nginx.org/download/nginx-1.8.1.tar.gz
~$ tar xvfz nginx-1.8.1.tar.gz

~$ wget -O modules/nginx-module-vts.tgz https://github.com/vozlt/nginx-module-vts/archive/v0.1.9.tar.gz
~$ cd modules/ && tar xvfz nginx-module-vts.tgz && mv nginx-module-vts-0.1.9 nginx-module-vts

2. Biên dịch nginx

Mình sẽ biên dịch nginx + vts module với các tùy chọn sau

~$ ./configure \
--prefix=/usr
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--http-client-body-temp-path=/var/lib/nginx/tmp/body \
--http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi \
--http-proxy-temp-path=/var/lib/nginx/tmp/proxy \
--user=nginx \
--group=nginx \
--with-file-aio \
--with-pcre \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_sub_module \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module \
--add-module=/usr/src/build/modules/nginx-module-vts

~$ make && make install

Xong xuôi có thể check lại bằng lệnh

~$ nginx -V
nginx version: nginx/1.8.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/tmp/body --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --user=nginx --group=nginx --with-file-aio --with-pcre --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_gzip_static_module --with-http_sub_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --add-module=/usr/src/build/modules/nginx-module-vts

3. Cấu hình nginx

Mình sẽ tạo 1 user hệ thống để chạy nginx

~$ groupadd -g 31 -r nginx
~$ useradd -u 31 -M -d /srv/www -s /sbin/nologin -r -g nginx nginx

Và tạo cấu trúc thư mục cấu hình cho nginx

~$ cd /etc/nginx
~$ mkdir {default.d,security.d,sites-available,sites-enabled}
~$ mv *.default default.d

~$  mkdir -pv /var/lib/nginx/tmp/body
~$ tree -d
├── default.d
├── security.d
├── sites-available
└── sites-enabled

Với

  • default.d để chưa các config mặc định hoặc backup
  • security.d để chứa các config về security ví dụ mấy các chặn bad user-agent hay redirect các bad_ip
  • sites-available chứa config vhost
  • sites-enabled symbol link từ sites-available, file nginx.conf sẽ include thư mục này

Cấu trúc trên là mình tự định nghĩa (có học theo cách Ubuntu) để dễ quản lý cấu hình nginx thôi, không có gì quá đặc biệt

Lưu ý là nginx.conf phải có dòng như vầy

~$ tail -n 2 nginx.conf 
  include sites-enabled/*.conf;
}

Và dành cho module vts thì cần thêm 1 dòng như vầy trong block http

vhost_traffic_status_zone;

Các phần khác thì khá đơn giản nên mình không nhắc tới

4. Cấu hình vhost với nginx-module-vts

Mình sẽ tạo 1 vhost đơn giản

~$ cat > sites-available/demo.conf << EOF
server {
  listen  80;
  server_name  abc.local;

  location / {
    root   html;
    index  index.html index.htm;
  }

  location /sts {
    vhost_traffic_status_display;
    vhost_traffic_status_display_format html;
  }
}
EOF

~$ cd sites-enabled/
~$ ln -fs ../sites-available/demo.conf 0.demo.conf

Ok, sau đó check syntax

~$ nginx -t 
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Và start nginx lên (bạn có thể viết 1 init-script để quá trình start/stop/restart trở lên đơn giản)

4. Kết quả

Ok, coi như đã xong, bây giờ thử truy cập vào link http://abc.local/sts và xem thành quả

nginx_vts

Theo như mô tả từ github thì nó có thể monitor nhiều thứ khác như Upstream, Cache hoặc Filter theo GeoIP. Nói chung khá là thú vị so với giao diện status đơn sơ của nginx. Không rõ so với Nginx Plust (bản trả phí) thế nào những với giao diện này cũng đầy đủ để ta monitor nginx.

Ngoài ra như trên hình, bạn có thể thấy ngoài định dạng html thì module này cũng hỗ trợ hiển thị kết quả monitor ra JSON, khá là cool.

Hi vọng nó hữu ích với mọi người :blush:

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Quăng

22 bài viết.
173 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
120 13
Gần đây mình có present về chủ đề __Một số thao tác và lệnh đơn giản nhưng hữu ích khi sử dụng Linux__ cho một vài bạn bè. Mặc dù nó khá là đơn giả...
Quăng viết hơn 1 năm trước
120 13
White
74 12
1. Giới thiệu Right tool for right job. Trước tiên phải hiểu là MySQL Replication không phải là giải pháp giải quyết mọi bài toán về quá tải hệ th...
Quăng viết hơn 2 năm trước
74 12
White
51 7
Với những ai làm Linux System Admin hoặc DevOps thì việc quản lí vài chục, vài trăm server là chuyện bình thường. Việc nhớ các địa chỉ IP, port để ...
Quăng viết gần 3 năm trước
51 7
Bài viết liên quan
Male avatar
25 13
Vẫn theo khung sườn đã định trước từ phần 1, trong phần này tôi sẽ giới thiệu cách cấu hình nginx để thực hiện vai trò của một load balancer. Trư...
manhdung viết hơn 2 năm trước
25 13
Male avatar
16 4
Trong phần này, tôi sẽ tập trung viết về cách phân quyền thư mục web của nginx, cách xác thực cơ bản khi truy cập website và cách lọc truy cập đến ...
manhdung viết gần 3 năm trước
16 4
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
22 bài viết.
173 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!