Build nginx with third-party modules
nginx
15
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

24 bài viết.
232 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
134 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 2 năm trước
134 13
White
83 14
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 gần 3 năm trước
83 14
White
66 5
Sau khi đọc bài viết (Link) của anh thaidn, mình nhớ lại lúc mình mới ra trường, cũng đã từng nghĩ về vấn đề này (lúc đó mình khá thích môn Bảo Mật...
Quăng viết 29 ngày trước
66 5
Bài viết liên quan
White
29 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 3 năm trước
29 13
White
17 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 3 năm trước
17 4
White
50 9
Bài viết này xin đề cập tới Nginx Load balancing 1. Thế nào Load Balancing Load Balancing hay còn gọi là Cân bằng tải ?? một kỹ thuật thường đượ...
Cùi Bắp viết gần 2 năm trước
50 9
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
24 bài viết.
232 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á!