Giới thiệu nginx

Nginx là một web server nguồn mở hoạt động nhanh và sử dụng ít tài nguyên hệ thống hơn Apache. Khi ở trạng thái tải nhẹ thì sự khác nhau giữa Apache và Nginx là không đáng kể. Tuy vậy, ở trạng thái tải nặng, Nginx có thể mở rộng sao cho phù hợp và hoạt động nhanh mà không cần chiếm quá nhiều tài nguyên bộ nhớ như Apache.

Các blog của mình trước đây chạy trên nền tảng LAMP (Linux, Apache, MySQL, PHP) nhưng từ khi chuyển sang LEMP thì thấy tài nguyên sử dụng giảm hơn trước khá nhiều.

lemp

Các bước cài đặt LEMP trên Ubuntu

Đầu tiên bạn cần chuẩn bị một server Ubuntu mới tinh chưa cài gì cả, ở đây mình dùng Ubuntu 12.04 64 bit. Kiểm tra lại xem hostname và file host đã chính xác chưa.

Các thao tác thực hiện bằng dòng lệnh, sử dụng tool ZOC Terminalnano

1. Update Apt-Get

sudo apt-get update

2. Cài đặt MySQL

sudo apt-get install mysql-server php5-mysql

Trong quá trình cài đặt bạn sẽ phải cài đặt root mysql password

Sau khi cài đặt MySQL, kích hoạt bằng lệnh:

sudo mysql_install_db

Hoàn tất cài đặt

sudo /usr/bin/mysql_secure_installation

Điền vào root password

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Sau đó là các thao tác như cài đặt lại password, xóa anonymous user… Cái này tùy bạn setup

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y                                            
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

Đường dẫn file cài đặt MySQL: /etc/my.cnf

3. Cài đặt nginx

sudo apt-get install nginx

Chạy nginx

sudo service nginx start

Lúc này bạn có thể truy cập thẳng vào IP/domain để xem nginx đã hoạt động hay chưa

4. Cài đặt PHP

sudo apt-get install php5-fpm

5. Tùy chỉnh PHP

Tùy chỉnh lại php.ini

sudo nano /etc/php5/fpm/php.ini

Tìm dòng cgi.fix_pathinfo=1 (nhấn Ctrl+W trong nano), bỏ dấu ; ở đầu và thay 1 = 0

cgi.fix_pathinfo=0

Lưu lại (Ctrl+O, Enter) và thoát (Ctrl+X)

Tùy chỉnh php5-fpm

sudo nano /etc/php5/fpm/pool.d/www.conf

Tìm dòng listen = 127.0.0.1:9000 và thay 127.0.0.1:9000 thành /var/run/php5-fpm.sock

listen = /var/run/php5-fpm.sock

Lưu và thoát.

Khởi động lại php-fpm

sudo service php5-fpm restart

6. Tùy chỉnh nginx

Mở file virtual host mặc định

sudo nano /etc/nginx/sites-available/default

Tìm và thay đổi cài đặt như bên dưới. Chú ý các phiên bản Ubuntu mới hơn sử dụng ‘htm’ thay vì ‘www’ nên bạn cần chỉnh lại cài đặt tương ứng.

[...]
server {
        listen   80;

        root /usr/share/nginx/www;
        index index.php index.html index.htm;

        server_name example.com;

        location / {
                try_files $uri $uri/ /index.php?$args;
        }

        error_page 404 /404.html;

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
              root /usr/share/nginx/www;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;

        }

}
[...]

Một số thay đổi:

  • Thêm index.php
  • Thay đổi server_name thành tên miền
  • Chỉnh sửa đường dẫn cho phù hợp với permalink của WP
  • Chỉnh lại nội dung trong phần cài đặt “location ~ \.php$ {“

Lưu và thoát.

7. Tạo php info file

Tạo file php.info

sudo nano /usr/share/nginx/www/info.php

Thêm nội dung

<?php
phpinfo();
?>

Lưu và thoát

Khời động lại nginx

sudo service nginx restart

Đã xong, giờ bạn có thể xem các cài đặt của nginx và php-fpm bằng cách truy cập: http://youripaddress/info.php

8. Cài đặt phpMyAdmin

sudo apt-get install phpmyadmin

Khi phpMyAdmin hỏi bạn chọn server (apache or lighttpd) thì chọn cái nào cũng được.

Tạo symbolic link

sudo ln -s /usr/share/phpmyadmin/ /usr/share/nginx/www

Sửa lỗi The mcrypt extension is missing khi chạy phpMyAdmin

Mở file php.ini

sudo nano /etc/php5/fpm/php.ini

Tìm đoạn Dynamic Extensions và thêm dòng sau vào phía cuối

extension=mcrypt.so

Restart php5-fpm

sudo service php5-fpm restart

Khởi động lại nginx

sudo service nginx restart

Giờ bạn đã có thể truy cập vào phpMyAdmin thông qua đường dẫn http://youripaddress/phpmyadmin

Xem thêm

Comment của bạn

Lưu ý: tất cả comment đều được kiểm duyệt cẩn thận! Nếu có code bạn hãy up lên pastebin.com rồi để lại link trong comment.

49 Comments

    1. Việt Phương Moderator

      1. Thêm thư mục website, chỉnh sửa cho thuộc owner của webserver. Cách đơn giản nhất là bạn kiểm tra /usr/share/nginx/www thuộc user:group nào thì chỉnh thư mục mới y như thế
      2. Thêm Nginx Conf cho domain như phần 6, nhớ chỉnh sửa phần root /usr/share/nginx/www; cho phù hợp thư mục mới

    1. Việt Phương Moderator

      Lúc bạn cài php5-mysql hiện thông báo gì? apt-get install mysql-server php5-mysql

  1. Jason Neygun 13 comment

    Luân hướng dẫn LEMP (dùng MariaDB, PHP 7.1 – PHP-FPM) chạy trên Ubuntu 16.04 đi

  2. Sieu Nguyen 11 comment

    Help me!!!!!!!!! đang mắc kẹt chỗ này. Mình làm theo hướng dẫn cài Hocvps script, bảo mật, swap, tối ưu cache…

    Mình cài đặt hết rồi giờ đang backup website qua. Truy cập phpmyadmin, nó hiện cho cái khung đăng nhập, nhưng sau khi điền thông tin thì:

    + Chrome báo không phải kết nối riêng tư sau đó nó chuyển về error 500.
    + Firefox báo: The site says: “Restricted”

    Vậy là lỗi do đâu? có thể chỉ mình cụ thể được ko vì mình ko biết gì về mấy cái code này hết. Cảm ơn.

  3. Sieu Nguyen 11 comment

    Nó có hiện ra cái khung cho mình đăng nhập vào sau đó nó báo không phải kết nối riêng tư nên không cho đăng nhập.

  4. Sieu Nguyen 11 comment

    Luân ơi, mình cài đặt hết rồi giờ đang backup website qua. Truy cập phpmyadmin, nó báo không phải kết nối riêng tư, có trình duyệt báo error 500.

    1. Việt Phương Moderator

      Bạn cài SSL hoặc site trước bạn cài SSL và chuyển sang site không cài SSL?

  5. Luyen Tran 3 comment

    Anh luôn ơi em hỏi chút, em tự cai đặt Lemp, ko dùng script, sau khi tao xong, em tao subdomain và trỏ đến folder cho domain do, thì nó ko hiện ra các file trong folder, nó báo “File not Found”. Em chưa tìm ra cách giải quyết, anh gặp trường hợp này chưa ạ? Giúp em với.

    1. Luân Trần Admin

      Khả năng file cấu hình .conf của tên miền bạn có vấn đề rồi. Check lại cái đó coi sao nhé.

  6. Tuấn Anh 24 comment

    Bạn ơi, mình có chạy script upload. nó báo lỗi The uploaded file exceeds the post_max_size directive in php.ini

    Mình đã vào
    Nginx sửa client_max_body_size

    php.in sửa:
    post_max_size
    upload_max_filesize

    vậy mà vẫn bị là do đâu bạn nhỉ?

    Thanks

  7. Ngô Quang Đạo 18 comment

    Cậu ơi ở phần “5. Tùy chỉnh PHP” sao cài LEMP trên Centos lại không có, cậu có thể giải thích cho mình phần này được không?

    1. Luân Trần Admin

      Không rõ nữa, bạn tạo file trên máy tính rồi upload qua sftp thử coi?

  8. tuấn anh 1 comment

    Bác ơi cho em hỏi, em đã cài lemp cho ubuntu và chạy site thành công. Bây giờ em muốn add thêm domain khác vào vps nữa, thì em phải chỉnh những file nào vậy ? Hình như trên mạng rất ít hướng dẫn lemp cho ubuntu thì phải :'(

  9. Văn Bội 1 comment

    trang của mình cài nginx, hôm nay khởi động lại vps bây giờ truy cập vào nó lại hiện ra welcome to nginx, mình đợi 5h rồi mà vẫn thế. ko biết bạn có biết lỗi này ko?

    1. Luân Trần Admin

      Cấu hình nginx lỗi rồi, không biết bạn thay đổi gì dẫn dến việc này.

  10. ly thanh 1 comment

    chao luân trần , mình đã làm như hướng dẫn của bạn nhưng khi truy cập vào http://ip/phpmyadmin mình nhận được lỗi này :403 Forbidden , nginx/1.1.19
    bạn vui lòng giúp mình cám ơn nhiều

  11. lienminh 3 comment

    hi bạn, mình nhấn lệnh này:

    XXXXXXXX:~# sudo nano /etc/php5/fpm/php.ini
    sudo: nano: command not found

    Nhưng nó báo vậy thì sửa như nào bạn nhỉ 😀

    Thanks bạn

    1. Luân Trần Admin

      Bạn chưa cài đặt nano rồi, chạy lệnh apt-get install nano trước nhé

  12. Tran Manh 3 comment

    Bác Luân cho e hỏi, sao e cài MySql trên ubuntu từ apt-get install mysql-server nó toàn lỗi khi cài mysql-communicate-server. E thử trên các bản 12.04, 11.04 32 và 64 bit đều bị y như thế, từ mysql 5.5 đến 5.6. E đang dùng ethernet server vps. Bác có kinh nghiệm với vụ này chỉ e với 🙂

    1. Tran Manh 3 comment

      E thử rồi nhưng vẫn ko đc 🙁
      Của e nó vẫn báo về lỗi như này.
      dpkg: error processing package mysql-community-server (–configure):
      subprocess installed post-installation script returned error exit status 141
      E: Sub-process /usr/bin/dpkg returned an error code (1)

        1. Tran Manh 3 comment

          Hờ, mình tìm ra lỗi rồi.
          Xem trong syslog nó báo như này:
          rsyslogd-2039: Could no open output pipe ‘/dev/xconsole’: No such file or directory [try http://www.rsyslog.com/e/2039 ]

          Sau khi ngâm cứu trên mạng, thử fix tay bằng lệnh:
          touch /dev/xconsole
          sudo chown syslog:adm /dev/xconsole
          sudo service rsyslog restart

          thì mọi thứ chạy ok rồi 😀

  13. 1 comment

    Mình cài đến bước 3

    Chạy nginx

    sudo service nginx start

    Lúc này bạn có thể truy cập thẳng vào IP/domain để xem nginx đã hoạt động hay chưa

    Khi vào ip nó chỉ ra trang mặc định của ubutun thôi
    giup mình với

    1. Luân Trần Admin

      Trang mặc định của Ubuntu bạn thấy là Apache, do nó được cài mặc định theo Ubuntu. Chỉ cần chạy lệnh sudo apt-get remove -y apache2* là được

      P/s: hiện giờ hướng dẫn này đã cũ, mình đang tiến hành update bài viết để sử dụng với Ubuntu 14.04, bạn đợi nhé.

  14. Quang Ngọc 2 comment

    Mình đang dùng Ubuntu 14.04, và làm theo hướng dẫn nhưng khi khởi động lại nginx (sudo service nginx restart) toàn báo [fail].
    Và trong /etc/php5/fpm/pool.d/www.conf không có listen = 127.0.0.1:9000 như hướng dẫn

    Đang cần hỗ trợ, cảm ơn.

    1. Luân Trần Admin

      Nếu bạn dùng nginx làm reverse proxy thì cần cấu hình thêm, tất nhiên không lỗi port.

      1. the hai 7 comment

        mình đã cài đặt LAPM, nếu m muốn sử dụng nginx làm reverse proxy thì có cần setup thêm gói php-fpm ko?

  15. Tuan 3 comment

    Ah t fix được rồi thank cậu, cậu có thể xóa cmt phía trên của t k, à cho t hỏi t muốn up code qua FileZilla thì port của vps là bao nhiêu vậy cậu ( t dùng vps của ramnote)