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

25 bài viết.
299 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
142 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 2 năm trước
142 13
White
112 12
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 5 tháng trước
112 12
White
89 15
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 3 năm trước
89 15
Bài viết liên quan
White
33 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 3 năm trước
33 13
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


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