1

Hướng dẫn cài đặt Nginx trên CentOS / Ubuntu từ mã nguồn

nginx

Giới thiệu

nginx phát âm “engine x”,  là một HTTP web server và cũng có thể được dùng như “reverse proxy” hay “mail proxy server”.

Nginx là một web server mã nguồn mở, sử dụng cơ cấu Epoll của linux để phục vụ người dùng, trái ngược với cơ cấu phân luồng threads của Apache. Nginx bắt đầu được sử dụng thay thế cho Apache rất nhiều do tốc độ nó mang lại; đang chiếm 13% thị phần web server và tăng trưởng không ngừng.

human Thông tin cho người mới tìm hiểu

Cài từ mã nguồn đem lại lợi ích gì?

Biên dịch từ mã nguồn sẽ đem lại những lợi ích trong các trường hợp:

  1. Cập nhật lên phiên bản mới nhất ngay khi có bản phân phối.
  2. Thường xuyên vá lỗi bảo mật.
  3. Nhanh chóng fix được các lỗi ảnh hưởng đến máy chủ của bạn.
  4. Khả năng tùy chỉnh, có thể bạn mở source sửa tên server thành “Engine_NguyenVanA” tùy thích.
  5. Sử dụng các plugin, add-on, packages của nhà phát triển bên thứ ba, dễ dàng đính kèm vào chương trình.
  6. Các kho phần mềm thường cũng không phát hành bản mới nhất do vấn đề tương thích ngược.

Nhưng nó cũng khó chịu khi:

  1. Bạn phải tự mình update phần mềm, tự mình cập nhật các bản vá lỗi.
  2. Phần mềm bạn tự build có thể gặp một số vấn đề tương thích trên hệ thống, và bạn phải tự mình tìm ra một phiên bản phù hợp. (hên nhiều hơn xui!)

Modules và các modules bên thứ 3

nginx có rất nhiều modules cho phép bổ sung thêm nhiều tính năng cho web server. Một số mmodules nổi tiếng của bên thứ 3 là:

  • SPDY  đã được đóng gói kèm theo nginx từ phiên bản 1.5.0.
  • google pagespeed(source) tăng tốc website của bạn và giảm thời gian tải trang tự động bằng cách áp dụng các kỹ thuật cải thiện hiệu năng web và các tài nguyên đi kèm (CSS, Javascript, hình ảnh) mà không cần bạn phải thay đổi code, nội dung trang web.
  • ModSecurity là một ứng dụng tường lửa mã nguồn mở cho web, giúp giảm được các nguy cơ tấn công phổ biến lên servers.
  • TCP Proxy cho phép nginx chạy proxy thông qua tcp server thay vì mặc định là kiểu socket.

super man Độ khó: siêu nhân

Nội dung bài viết thuộc nhóm nâng cao và mất thời gian mày mò khắc phục rất nhiều lỗi vớ vẩn (?)

Ai không tự tin và tránh rủi ro, nên thực hiện cài đặt theo hướng dẫn tại đây.

Khuyến khích các bạn thực hành trên máy ảo hoặc VPS demo của Koding.com

Chuẩn bị trước khi tiến hành cài đặt

Đăng nhập vào VPS với quyền phù hợp.

Thường các bài viết hướng dẫn sẽ yêu cầu bạn dùng một tài khoản không có quyền root để đảm bảo an toàn; nhưng như vậy, thực tế bạn vẫn cần quyền root(1) (sudo) để chạy nginx dưới cổng 80. Thực tế bạn vẫn có thể cấu hình để account có quyền sử dụng sudo như link này, nhưng nó không dễ hiểu nhất là với những người mới bắt đầu (not geek). Do đó, tôi vẫn khuyến khích bạn sử dụng quyền root trong các trường hợp cần thiết như cài thư viện bổ sung hay chạy server dưới cổng 80.

Bên cạnh đó ta cần một tài khoản bình thường để sử dụng trong tất cả các trường hợp còn lại. Cách nhanh nhất để chuyển đổi giữa quyền root và bình thường là gõ lệnh su , nhập password root và sau khi cài đặt gói cần thiết xong thì gõ lệnh exit để thoát quyền root. Hơi rối nhưng nên như vậy (? tôi cũng không biết tại sao)

Tôi giả định tất cả các dòng lệnh bên dưới là dùng với tài khoản user thường, ví dụ johndoe, phần mềm và các thư mục đều được triển khai trong thư mục /home/johndoe. Chỉ các lệnh đề cài các gói bổ sung thư viện cần thiết hay các trường hợp bắt buộc phải có quyền root thì mới dùng tài khoản root.

Cài đặt các gói bổ sung cần thiết cho việc biên dịch

Để tiến hành biên dịch được, ta cần cài các chương trình hỗ trợ việc biên dịch.

Với centOS gõ lệnh:

Với Ubuntu gõ lệnh:

Biên dịch từ mã nguồn

Tải source code

Tìm phiên bản muốn sử dụng tại http://nginx.org/en/download.html, thời điểm tôi viết bài, bản mới nhất là nginx-1.9.3.

Sử dụng các lệnh sau để tải về:

Tải source code của gói bổ sung PCRE

Tôi sẽ giải thích PCRE dùng làm gì ở dưới, trước mắt hãy tải về tại đây. Dùng các lệnh sau:

Chỉ cần tải về và giải nén, không cần biên dịch gói này.

Tôi tải bản 8.37, các bạn có thể tìm phiên bản khác tại đây. Lưu ý nginx chưa hỗ trợ PCRE 10, đừng tải về bản mới nhất.

Chuẩn bị mã nguồn của nginx

Tôi sẽ hướng dẫn các bạn cấu hình vài option cơ bản nhất.

Để xem danh sách đầy đủ các option, dùng lệnh: ./configure --help

Option cơ bản để chỉ định đường dẫn file, thư mục

Các options khác

  • --with-http_gzip_static_module lựa chọn cho phép kích hoạt nginx sử dụng gzip để nén dữ liệu và các resource gởi về cho client. Giúp giảm thời gian và kích thước dữ liệu truyền.[nên cài]
  • --with-http_ssl_module – hỗ trợ giao thức HTTPS. [nên cài]
  • --with-pcre Tùy chọn cho phép sử dụng Regular Expression Match để cấu hình route cho nginx. Không cần tìm hiểu nhiều, bản thân nginx cà các modules khác thường xuyên sử dụng module này. [nên cài]
  • --with-file-aio – kích hoạt giao thức  I/O bất đồng bộ, rất tốt trong các trường hợp cho người dùng download file. [nên cài]
  • --with-http_realip_module dùng để lấy ip thực của client khi nginx đứng sau một thành phần load-balancer, proxy. Điều này sẽ có ích khi website của bạn nằm sau các dịch vụ kiểu  CloudFlare.
  • --without-http_scgi_module – Bất hoạt module SCGI khi không có nhu cầu chạy CGI scripts.
  • --without-http_uwsgi_module – Bất hoạt module UWSGI khi không có nhu cầu chạy CGI scripts.
  • --without-http_fastcgi_module – Bất hoạt module FastCGI khi không có nhu cầu chạy CGI scripts [Không nên dùng tùy chọn này vì PHP cần dùng FastCGI để chạy php-fpm] 

Toàn bộ nội dung cấu hình của chúng ta

Trong quá trình chạy configure có thể xuất hiện thiếu thư viện này nọ, hãy lấy tên thư viện trên thông báo thực hiện cài qua yum/apt để bổ sung vào OS của bạn.

Cài xong thì lặp lại bước chạy configure để check lỗi, nếu lại báo thiếu hãy thực hiện lại bước trên cho đến khi xong.

Tiến hành biên dịch mã nguồn nginx

Một khi đã chạy configure xong, việc đơn giản còn lại là lần lượt chạy 2 lệnh sau:

Chạy nginx trên server của bạn

  1. Ta cần tạo file  /etc/init.d/nginx để nginx tự động chạy khi hệ thống khởi động. Trong nội dung bên dưới các bạn cần tìm (Ctrl+F) vị trí “/home/johndoe” đổi sang đường dẫn thực trên máy của bạn.

    File này sẽ giúp chúng ta có thể sử dụng nginx thông qua lệnh ‘service nginx’, giống hệt như khi cài nginx từ yum/apt, do đó cần set quyền execute cho file.
  2. Cấu hình lại service để chạy nginx khi khởi động OS:
  3. Chỉnh sửa thông số  types_hash_bucket_size và server_names_hash_bucket_size trong/home/johndoe/application/nginx/conf/nginx.conf, là hai thông số cần được tăng lên so với mặc định. Xem thêm chi tiết cấu hình này tại đây.
  4. Chạy nginx, lệnh bên dưới sẽ chạy server  port 80.

Hoàn thành cài đặt

Dùng trình duyệt truy cập vào địa chỉ domain hoặc IP của server, bạn sẽ thấy dòng chữ:

Chúc mừng! Server nginx của bạn đã sẵn sàng.

Bảo trì, vận hành

Để restart lại web server, chạy lệnh:

Để nginx tải lại file cấu hình nginx.conf khi bị thay đổi:

Cập nhật Nginx đến phiên bản mới nhất

Lặp lại các bước cài đặt ở bên trên: tải source phiên bản mới về, giải nén, chạy lệnh configure tương tự ở trên, make & make install, dừng và chạy lại nginx là bạn đã nâng cấp xong.  Quy trình gần giống cài đặt mới, có thể copy lệnh ở trên xuống để chạy.

CHÚ THÍCH:

(1) Điều này không thực sự chính xác, xem bài viết tại đây để biết cách chạy Nginx trên cổng 80 mà không cần quyền user root.

(Tham khảo http://do.co/1W42U3G)

Bình luận với Facebook

Hoàng Tựa

Yêu thích lập trình web và tạo ra những thứ đẹp đẽ.

One Comment

Leave a Reply

Your email address will not be published. Required fields are marked *