Sau khi đã cài đặt Nginx, các bạn có thể deploy ứng dụng của mình lên để có thể access nó bằng trình duyệt. Access bằng trình duyệt ở đây có nghĩa là chúng ta chỉ sử dụng domain hoặc địa chỉ IP với port mặc định của HTTP là 80 hay HTTPS 443 mà không cần phải thêm port các bạn nhé! Mặc định thì Ngnix hỗ trợ chúng ta chạy các ứng dụng viết bằng Go, Node.js, Perl, PHP, Python, và Ruby. Tất nhiên là các ứng dụng chỉ sử dụng HTML, CSS, Javascript thì cũng được hỗ trợ. Trong bài viết này, mình sẽ hướng dẫn các bạn cách cấu hình một ứng dụng web cơ bản để có thể chạy với Nginx trên CentOS các bạn nhé!
Để cấu hình một ứng dụng web cơ bản với Nginx, có 2 bước các bạn phải làm đó là:
-
- Copy toàn bộ source code của ứng dụng web của các bạn vào một thư mục bất kỳ trên server đã cài đặt Nginx.
- Tạo mới một tập tin .conf trong thư mục /etc/nginx/conf.d định nghĩa thông tin tới ứng dụng web của các bạn.
Với bước đầu tiên, thì mình xin nói với các bạn điều này trước. Các bạn có thể thấy là sau khi cài đặt Nginx xong, một trang mặc định được hiển thị khi chúng ta access tới địa chỉ http://<domain_or_ip_server>:
Nội dung của trang mặc định này được lưu trữ ở thư mục /usr/share/nginx/html đó các bạn:
Các bạn cũng có thể copy source code vào một thư mục mới trong thư mục /usr/share/nginx/html này cũng được.
Ví dụ mình có một trang web với nội dung đơn giản như sau:
1 2 3 4 5 |
<html> <body> <h1>Welcome to Huong Dan Java!</h1> </body> </html> |
thì mình sẽ tạo mới một thư mục tên là huongdanjava trong thư mục /usr/share/nginx/html và tạo mới một tập tin index.html với nội dung như trên:
Bây giờ, chúng ta sẽ tiến hành cấu hình thư mục source code của chúng ta với Nginx để có thể access được tới ứng dụng web của mình.
Để làm điều này, như mình đã nói, chúng ta cần tạo mới một tập tin .conf trong thư mục /etc/nginx/conf.d để định nghĩa thông tin tới ứng dụng web của các bạn.
Cấu hình của trang web mặc định mà khi cài đặt xong Nginx, các bạn thấy, nằm trong tập tin nginx.conf ở thư mục /etc/nginx đó các bạn! Đây là tập tin cấu hình chính của Nginx, nội dung của tập tin này như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } # Settings for a TLS enabled server. # # server { # listen 443 ssl http2 default_server; # listen [::]:443 ssl http2 default_server; # server_name _; # root /usr/share/nginx/html; # # ssl_certificate "/etc/pki/nginx/server.crt"; # ssl_certificate_key "/etc/pki/nginx/private/server.key"; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 10m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # # location / { # } # # error_page 404 /404.html; # location = /40x.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } # } } |
Có rất nhiều thông tin trong tập tin cấu hình này phải không các bạn? Để hiểu được chúng, các bạn cần biết là, các thông tin cấu hình này được gọi là những directives trong Nginx. Các directive này được group lại thành những blocks tương ứng với các contexts khác nhau với những mục đích khác nhau. Các bạn có thể tìm hiểu chi tiết về từng directive của Nginx tại đây.
Trong tập tin nginx.conf trên chúng ta có các directives nằm ngoài cùng, chúng được xem là nằm trong main context:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { ... } http { ... } |
Để cấu hình cho trang web của mình, các bạn cần nắm rõ về directive http các bạn nhé!
Http directive chứa các directive khác để handle request từ người dùng đến trang web của các bạn. Directive chính làm điều này bên trong directive http là server directive.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } } |
Trong http directive này, như các bạn thấy, chúng ta một directive tên là include, dùng để load hết tất cả các cấu hình của các website mà chúng ta muốn trong thư mục /etc/nginx/config.d/. Mỗi khi các bạn muốn thêm mới một website với Nginx thì chỉ cần tạo mới một tập tin với file name theo định dạng <domain_or_ip>.conf trong thư mục /etc/nginx/config.d/ rồi cấu hình thông tin cho nó là được. Nội dung chúng ta cần khai báo trong tập tin cấu hình của từng website là nội dung của server directive đó các bạn. Các thông tin này cơ bản bao gồm như sau:
1 2 3 4 5 6 7 8 9 |
server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; location / { } } |
Trong đó:
- listen directive cấu hình port number mà Nginx sẽ listen để người dùng request tới ứng dụng web của các bạn
- server_name directive định nghĩa thông tin các domain name được trỏ tới địa chỉ IP của server của các bạn. Nếu các bạn sử dụng IP để access tới ứng dụng của mình thì có thể bỏ qua directive này.
- root directive định nghĩa đường dẫn tới source code của ứng dụng của các bạn
- location directive định nghĩa thư mục, tập tin nào sẽ được process từ request của người dùng.
Các bạn hãy tưởng tượng root directive định nghĩa mapping từ domain hoặc ip của server tới thư mục gốc của source code của các bạn. Còn location directive định nghĩa các request mà ứng dụng các bạn sẽ handle. Tương ứng với mỗi location chúng ta có thể định nghĩa thêm các root directive để chỉ định thư mục tập tin nào sẽ handle cho một request nhất định.
Trong định nghĩa của server directive ở trên thì chúng ta đang cấu hình cho request với context path “/” trong location directive tới thư mục gốc của ứng dụng.
Với cấu hình hiện tại, mình có thể access vào ứng dụng web của mình với request URL sau: http://localhost/huongdanjava
Đó là bởi vì code của ứng dụng của mình đang nằm trong thư mục /usr/share/nginx/html và location trong cấu hình trên đang mapping đến thư mục này. Một lưu ý với các bạn nữa là, mặc định nếu các bạn không khai báo rõ tập tin của ứng dụng web cần truy cập thì mặc định Ngnix sẽ hiển thị nội dung của tập tin index.*. “*” ở đây có nghĩa còn nhiều extension khác nữa mà Nginx hỗ trợ.
Để cấu hình cho ứng dụng web ví dụ của mình ở trên, có thể truy cập trực tiếp từ địa chỉ http://localhost/, đầu tiên mình sẽ mở tập tin /etc/nginx/nginx.conf và comment server directive trong http directive đi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; # server { # listen 80 default_server; # listen [::]:80 default_server; # server_name _; # root /usr/share/nginx/html; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # # location / { # } # # error_page 404 /404.html; # location = /40x.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } # } } |
Sau đó, mình sẽ tạo mới một tập tin tên là huongdanjava.com.conf trong thư mục /etc/nginx/config.d/ với nội dung như sau:
1 2 3 4 5 6 7 8 9 |
server { listen 80; root /usr/share/nginx/html/huongdanjava; location / { } } |
Restart lại Nginx:
1 |
sudo service nginx restart |
Rồi access tới địa chỉ http://localhost, các bạn sẽ thấy kết quả như sau:
Vậy là chúng ta đã cấu hình thành công ứng dụng web của mình với Nginx rồi đó các bạn!