Nginx
Tổng quan và ứng dụng thực tế
Giới thiệu về Nginx
1. Nginx (engine x) là một máy chủ web HTTP hiệu suất cao và đồng thời cũng là máy chủ proxy ngược, hỗ trợ cả dịch vụ IMAP/POP3/SMTP. Nginx được phát triển bởi Igor Sysoev cho trang web Rambler.ru của Nga (đứng thứ hai về lượng truy cập tại Nga), phiên bản công khai đầu tiên 0.1.0 được phát hành vào ngày 4 tháng 10 năm 2004.
2. Mã nguồn được phân phối dưới dạng giấy phép BSD-like, nổi tiếng với sự ổn định, tính năng phong phú, cấu hình mẫu dễ hiểu và tiêu thụ tài nguyên hệ thống thấp. Phiên bản nginx 1.0.4 được phát hành vào ngày 1 tháng 6 năm 2011.
3. Đây là một máy chủ Web nhẹ, máy chủ proxy ngược và máy chủ proxy email (IMAP/POP3) được phát hành theo giấy phép BSD-like. Đặc điểm nổi bật là chiếm ít bộ nhớ và khả năng xử lý đồng thời mạnh mẽ. Trên thực tế, khả năng xử lý đồng thời của Nginx thực sự vượt trội so với các máy chủ web cùng loại. Các công ty lớn tại Trung Quốc sử dụng Nginx bao gồm: Baidu, JD.com, Sina, NetEase, Tencent, Taobao, v.v.
4. OpenResty (còn gọi là ngx_openresty) là một nền tảng Web mở rộng dựa trên Nginx, do Zhang Yichun người Trung Quốc khởi xướng, cung cấp nhiều module bên thứ ba chất lượng cao.
Ứng dụng thực tế của Nginx
1. Proxy ngược: Yêu cầu từ client gửi đến máy chủ Nginx, sau đó Nginx chuyển tiếp đến máy chủ thật để truy cập, đảm bảo an toàn cho dịch vụ thật;
2. Cân bằng tải: Có thể thực hiện cân bằng tải và chuyển đổi lỗi giữa các nút trong cụm, các thuật toán cân bằng tải: (round-robin, trọng số, ngẫu nhiên, hash, v.v.);
3. Cổng ra cổng vi mô, có thể thực hiện cụm hóa cổng vi mô;
4. Máy chủ tĩnh có hiệu suất cao hơn nhiều so với Tomcat, có thể lưu trữ tài nguyên tĩnh; ----- khuyến nghị nên lưu trữ tài nguyên tĩnh lên CDN
5. Bảo vệ website sử dụng nginx+lua để thực hiện giới hạn tốc độ yêu cầu;
Cài đặt môi trường Nginx
1. Cài đặt Nginx trên Windows
2. Cài đặt Nginx trên Linux (phương pháp thuần túy rất phức tạp) cần tải trước nhiều phụ thuộc 10 phút—không khuyến nghị
3. Sử dụng Docker để cài đặt Nginx 1 phút
4. Sử dụng giao diện trực quan của BaoTa để cài đặt Nginx 5 giây
Cài đặt Nginx trên môi trường Windows
1. Địa chỉ tải Nginx: http://nginx.org/en/download.html
2. Giải nén thư mục hiện tại
3. Nhấp đúp vào nginx.exe
4. Cổng mặc định của Nginx là 80
Sau khi tải về, chỉ cần giải nén
Nhấp đúp để chạy
D:\java\nginx-1.25.2\nginx-1.25.2\nginx.exe
Giao diện chào mừng
1. conf - tập tin cấu hình (tập tin cấu hình lõi nginx.conf)
2. contrib - lưu trữ một số công cụ hữu ích
3. docs - lưu trữ tài liệu
4. html - lưu trữ Html, lưu trữ tài nguyên tĩnh
5. logs - lưu trữ tập tin nhật ký
6. temp - tập tin tạm thời
Dừng Nginx và các lệnh khác
1. Mở quản lý tác vụ → tìm tiến trình nginx và kết thúc trực tiếp. Nếu vẫn chưa dừng Nginx
Lý do là: sau khi Nginx khởi động, sẽ có một tiến trình master và nhiều tiến trình worker cần phải kết thúc tất cả các tiến trình nginx.
2. Thực thi
D:\java\nginx-1.25.2\nginx-1.25.2>nginx.exe -s stop
hoặc
D:\java\nginx-1.25.2\nginx-1.25.2>nginx.exe -s quit
Lưu ý: stop là dừng nhanh Nginx, có thể không lưu thông tin liên quan; quit là dừng hoàn chỉnh và có trật tự Nginx và lưu thông tin liên quan.
Các lệnh khác:
1. Khởi động
D:\java\nginx-1.25.2\nginx-1.25.2>start nginx
hoặc
D:\java\nginx-1.25.2\nginx-1.25.2>nginx.exe
2. Dừng
D:\java\nginx-1.25.2\nginx-1.25.2>nginx.exe -s stop
hoặc
D:\java\nginx-1.25.2\nginx-1.25.2>nginx.exe -s quit
Lưu ý: stop là dừng nhanh Nginx, có thể không lưu thông tin liên quan; quit là dừng hoàn chỉnh và có trật tự Nginx và lưu thông tin liên quan.
3. Tải lại Nginx
D:\java\nginx-1.25.2\nginx-1.25.2>nginx.exe -s reload
Khi sửa đổi thông tin cấu hình, sử dụng lệnh này để tải lại các cấu hình này.
4. Mở lại tập tin nhật ký
D:\java\nginx-1.25.2\nginx-1.25.2>nginx.exe -s reopen
5. Xem phiên bản Nginx
D:\java\nginx-1.25.2\nginx-1.25.2>nginx -v
Vào thư mục chứa nginx.exe sau đó thực hiện lệnh tương ứng
Khác biệt giữa tải mềm và tải cứng
1. Tải mềm là dựa trên phần mềm đặc biệt được cài đặt trên máy chủ như Nginx để thực hiện cân bằng tải
2. Tải cân bằng cứng là dựa trên phần cứng cố định để thực hiện cân bằng tải như F5
Cấu hình liên quan đến Nginx
1. Lưu trữ tài nguyên tĩnh Html dựa trên Nginx
Ví dụ như dự án của chúng ta là phân tách frontend và backend, có thể lưu trữ trực tiếp tài nguyên frontend vào thư mục html.
Theo nghiệp vụ phân chia tên miền
Mỗi dự án con đều có đội ngũ độc lập
Đội viên: tên miền—member.truong.com
Đội thanh toán: tên miền—pay.truong.com
member\member.html
<!DOCTYPE html>
<html>
<head>
<title>member</title>
</head>
<body>
<h1>member service</h1>
</body>
</html>
order\order.html
<!DOCTYPE html>
<html>
<head>
<title>order</title>
</head>
<body>
<h1>order service</h1>
</body>
</html>
1. Thêm cấu hình mới trong tập tin C:\Windows\System32\drivers\etc host
127.0.0.1 member.truong.com
127.0.0.1 order.truong.com
2. Chỉ thị server_name trong Nginx chủ yếu được sử dụng để cấu hình máy chủ ảo dựa trên tên, thứ tự khớp lệnh server_name sau khi nhận yêu cầu
Trong tập tin cấu hình D:\java\nginx-1.25.2\nginx-1.25.2\conf\nginx.conf
Ví dụ: truy cập member.truong.com sẽ tìm kiếm tài nguyên tĩnh trong thư mục html/member
server {
listen 80;
server_name member.truong.com;
location / {
root html/member;
index index.html index.htm;
}
}
Ví dụ: truy cập order.truong.com sẽ tìm kiếm tài nguyên tĩnh trong thư mục html/order
server {
listen 80;
server_name order.vudiep.com;
location / {
root html/order;
index index.html index.htm;
}
}
2. Proxy ngược/chính diện dựa trên Nginx
Proxy ngược
Yêu cầu từ client đạt đến máy chủ proxy Nginx, sau đó máy chủ proxy chuyển tiếp đến máy chủ thật, ẩn thông tin IP thật của máy chủ.
Trong tập tin C:\Windows\System32\drivers\etc host thêm cấu hình mới
127.0.0.1 www.truong.com
Trong tập tin cấu hình D:\java\nginx-1.25.2\nginx-1.25.2\conf\nginx.conf thêm cấu hình mới
server {
listen 80;
server_name www.truong.com;
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
Proxy chính diện
Proxy chính diện là ở phía người dùng, ví dụ như cần truy cập một số trang web nước ngoài, ví dụ github, trong điều kiện được phép của cơ quan liên quan, chúng ta có thể sử dụng vpn.
Và vpn được thiết lập ở trình duyệt người dùng (không phải thiết lập ở máy chủ từ xa).
Trình duyệt trước tiên truy cập địa chỉ vpn, vpn chuyển tiếp yêu cầu, và cuối cùng trả kết quả yêu cầu về theo đường đã đi.
Khác biệt giữa proxy chính diện và ngược: Proxy chính diện ẩn hành vi thực sự của người dùng, proxy ngược ẩn máy chủ thật
Proxy chính diện----cần cài đặt phần mềm ở phía client, ẩn hành vi thực sự của người dùng
Proxy ngược----cài đặt ở phía server
3. Chiến lược cân bằng tải dựa trên Nginx
Round-robin (mặc định)
Mỗi yêu cầu được phân bổ tuần tự đến các máy chủ backend khác nhau theo thứ tự thời gian, nếu máy chủ backend bị down, có thể tự động loại bỏ.
Chỉ định trọng số
Chỉ định xác suất round-robin, trọng số tỷ lệ thuận với tỷ lệ truy cập, dùng cho trường hợp hiệu năng máy chủ backend không đồng đều.
Liên kết IP ip_hash
Mỗi yêu cầu được phân bổ theo kết quả hash của ip truy cập, như vậy mỗi khách truy cập cố định truy cập một máy chủ backend nhất định, có thể giải quyết vấn đề session.
fair (bên thứ ba)
Phân bổ yêu cầu theo thời gian phản hồi của máy chủ backend, ưu tiên phân bổ cho máy chủ có thời gian phản hồi ngắn.
url_hash (bên thứ ba)
Phân bổ yêu cầu theo kết quả hash của url truy cập, đưa mỗi url đến cùng một máy chủ backend, khá hiệu quả khi máy chủ backend là cache.
Cân bằng tải Nginx cung cấp máy chủ upstream (máy chủ thực hiện logic nghiệp vụ), cân bằng tải, chuyển đổi lỗi, thử lại thất bại, dung sai lỗi, kiểm tra sức khỏe, v.v.
Khi máy chủ upstream (máy chủ thực hiện logic nghiệp vụ) gặp sự cố, có thể chuyển sang máy chủ upstream khác (máy chủ thực hiện logic nghiệp vụ).
Cấu hình round-robin
Trong tập tin C:\Windows\System32\drivers\etc host thêm cấu hình mới
127.0.0.1 upstream.truong.com
Trong tập tin cấu hình D:\java\nginx-1.25.2\nginx-1.25.2\conf\nginx.conf thêm cấu hình mới
###Định nghĩa máy chủ upstream (máy chủ thật sự được nginx proxy truy cập) mặc định là cơ chế round-robin
upstream backServer{
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name upstream.truong.com;
location / {
### Chỉ định máy chủ cân bằng tải upstream
proxy_pass http://backServer;
index index.html index.htm;
}
}
Khởi động hai dự án với cổng lần lượt là 8080 và 8081, sau khi chạy sẽ thấy việc truy cập luân phiên giữa 127.0.0.1:8080 và 127.0.0.1:8081
Cấu hình trọng số
Trong tập tin cấu hình D:\java\nginx-1.25.2\nginx-1.25.2\conf\nginx.conf thêm cấu hình mới
##Định nghĩa máy chủ upstream (máy chủ thật sự được nginx proxy truy cập) mặc định là cơ chế round-robin hiện là cơ chế trọng số
upstream backServer{
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:8081 weight=1;
}
server {
listen 80;
server_name upstream.truong.com;
location / {
### Chỉ định máy chủ cân bằng tải upstream
proxy_pass http://backServer;
index index.html index.htm;
}
}
Khởi động hai dự án với cổng lần lượt là 8080 và 8081, sau khi chạy sẽ thấy 127.0.0.1:8080 được truy cập 2 lần rồi mới truy cập 127.0.0.1:8081 một lần, cứ lặp lại như vậy
Chuyển đổi lỗi
Khi địa chỉ chuyển tiếp bị sập, không thể truy cập, nginx sẽ mặc định tự động chuyển đổi lỗi sang địa chỉ tiếp theo.
Cụm giúp đảm bảo tính sẵn sàng cao của phía server, nếu xảy ra sự cố sẽ lập tức chuyển sang máy tiếp theo.
4. Hướng dẫn chi tiết chỉ thị Location của Nginx
Thông qua mẫu cụ thể để phù hợp với URI yêu cầu của client, cú pháp cơ bản như sau: location [=|~|~*|^~|@]pattern{……}
1. Không có ký hiệu sửa đổi biểu thị: phải bắt đầu bằng mẫu cụ thể, ví dụ:
server {
server_name www.truong.com;
location /member {
proxy_pass http://127.0.0.1:8080/;
index index.html index.htm;
}
}
Truy cập http://member.truong.com/member proxy ngược: http://127.0.0.1:8080/
Vậy, những điều sau là đúng:
http://member.truong.com/member
http://member.truong.com/member?p1
http://member.truong.com/member/
http://member.truong.com/Member
Lưu ý proxy_pass http://127.0.0.1:8080/; cần thêm / phía sau, proxy ngược đến http://127.0.0.1:8080 không cần thêm giá trị khớp với location.
2. = biểu thị: phải khớp chính xác với mẫu cụ thể
server {
server_name www.truong.com;
location = /member {
proxy_pass http://127.0.0.1:8080/;
index index.html index.htm;
}
}
Truy cập http://www.truong.com/member proxy ngược: http://127.0.0.1:8080
Vậy, những điều sau là đúng:
http://www.truong.com/member
http://www.truong.com/member?p1
Những điều sau là sai:
http://www.truong.com/member/
http://www.truong.com/memberabc
3. ~ biểu thị: biểu thức chính quy được chỉ định phải phân biệt chữ hoa chữ thường
server {
server_name www.truong.com;
location ~ ^/member$ {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
Truy cập http://www.truong.com/member proxy ngược: http://127.0.0.1:8080
Vậy, những điều sau là đúng:
http://www.truong.com/member
http://www.truong.com/member?p1
Những điều sau là sai:
http://www.truong.com/Member/
http://www.truong.com/memberabc
4. ~* biểu thị: biểu thức chính quy được chỉ định không phân biệt chữ hoa chữ thường
server {
server_name www.truong.com;
location ~* ^/member$ {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
Truy cập http://www.truong.com/member proxy ngược: http://127.0.0.1:8080
Vậy, những điều sau là đúng:
http://www.truong.com/member
http://www.truong.com/member?p1
http://www.truong.com/Member
Những điều sau là sai:
http://www.truong.com/member/
http://www.truong.com/memberabc
1. Khớp chính xác có "="- ưu tiên cao nhất
2. Khớp chính xác không có ký hiệu sửa đổi
3. Biểu thức chính quy theo thứ tự định nghĩa trong tập tin cấu hình
4. Có ký hiệu "^\~" sửa đổi, khớp đầu
5. Có ký hiệu "~" hoặc "~*" sửa đổi, nếu biểu thức chính quy phù hợp với URI
6. Không có ký hiệu sửa đổi, nếu chuỗi được chỉ định phù hợp với đầu URI
5. Giải quyết vấn đề cross-origin dựa trên Nginx
Định nghĩa vấn đề cross-origin website
Frontend triển khai html.truong.com /index.html
Backend triển khai api.truong.com/ API java
Trình duyệt truy cập: http://html.truong.com/user.html
Trong trang ajax yêu cầu: http://api.truong.com/getUser
Trình duyệt truy cập: 127.0.0.1:80/user.html
Trong trang ajax yêu cầu: 127.0.0.1:81/getUser
Trình duyệt truy cập: https://127.0.0.1:80/user.html
Trong trang ajax yêu cầu: http://127.0.0.1:80/getUser
Không xảy ra vấn đề cross-origin
Trình duyệt truy cập: http://127.0.0.1:80/user.html
Trong trang ajax yêu cầu: http://127.0.0.1:80/getUser
Yêu cầu ajax trong trang nếu địa chỉ khác với địa chỉ yêu cầu của trang về tên miền, cổng và giao thức, trình duyệt áp dụng chiến lược bảo mật, yêu cầu có thể đến máy chủ bình thường nhưng không thể nhận kết quả phản hồi.
Vấn đề cross-origin là một chiến lược bảo mật của trình duyệt, truy cập cần tuân thủ chính sách cùng nguồn gốc:
| URL | Mô tả | Có cho phép giao tiếp |
|---|---|---|
http://www.a.com/a.js http://www.a.com/b.js |
Cùng tên miền | Cho phép |
http://www.a.com/lab/a.js http://www.a.com/script/b.js |
Cùng tên miền khác thư mục | Cho phép |
http://www.a.com:8000/a.js http://www.a.com/b.js |
Cùng tên miền khác cổng | Không cho phép |
http://www.a.com/a.js https://www.a.com/b.js |
Cùng tên miền khác giao thức | Không cho phép |
http://www.a.com/a.js http://192.168.110.11/b.js |
Tên miền và IP tương ứng | Không cho phép |
http://www.a.com/a.js http://script.a.com/b.js |
Cùng tên miền chính, khác tên miền phụ | Không cho phép |
http://www.a.com/a.js http://a.com/b.js |
Cùng tên miền, khác tên miền cấp hai (giống trên) | Không cho phép (cookie trong trường hợp này cũng không được phép truy cập) |
http://www.cnblogs.com/a.js http://www.a.com/b.js |
Khác tên miền | Không cho phép |
Chuẩn bị môi trường
1. Đưa tài nguyên tĩnh vào: thư mục nginx html
user.html
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
// Tạo yêu cầu cho user với ID cho trước
axios.get('http://api.vudiep.com/getUser')
.then(function (response) {
alert("code:"+response.data.code);
alert("msg:"+response.data.msg);
})
.catch(function (error) {
alert("error:"+error);
});
</script>
2. API backend
@RequestMapping("/getUser")
public Map<String, String> getUser() {
HashMap<String, String> result = new HashMap<>();
result.put("code", "200");
result.put("msg", "ok");
return result;
}
3. Cấu hình liên quan đến nginx
server {
listen 80;
server_name html.vudiep.com;
location / {
root html;
index index.html index.htm;
}
}
server {
listen 80;
server_name api.vudiep.com;
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
4. Truy cập user.html http://html.vudiep.com/user.html
Giải pháp
5. Thiết lập header phản hồi của dự án cho phép quyền cross-origin response.setHeader("Access-Control-Allow-Origin", "*"); phù hợp cho công ty nhỏ
6. Sử dụng jsonp để giải quyết vấn đề cross-origin website, nhược điểm: chỉ hỗ trợ yêu cầu GET, mô phỏng gửi script.
7. Sử dụng Nginx xây dựng gateway API giữ tên miền và cổng giống nhau Location
8. Sử dụng gateway trong microservice
9. HttpClient thực hiện chuyển tiếp, nhược điểm: gửi lại hai lần yêu cầu
Tư tưởng cốt lõi giải quyết vấn đề cross-origin:
Địa chỉ truy cập trang và yêu cầu ajax tên miền, cổng, giao thức cần giống nhau.
Trong header phản hồi phản hồi cho phép trình duyệt cross-origin
resp.setHeader("Access-Control-Allow-Origin", "*");
Dự án java aop interceptor filter, gateway, nginx
@RequestMapping("/getUser")
public Map<String, String> getUser() {
HttpServletResponse resp = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
resp.setHeader("Access-Control-Allow-Origin", "*");
HashMap<String, String> result = new HashMap<>();
result.put("code", "200");
result.put("msg", "ok");
return result;
}
nginx giải quyết vấn đề cross-origin
Sử dụng Nginx xây dựng gateway API giữ tên miền và cổng giống nhau Location
Lưu user.html vào D:/vudiep/html
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
// Tạo yêu cầu cho user với ID cho trước
axios.get('http://www.vudiep.com/api/getUser')
.then(function (response) {
alert("code:"+response.data.code);
alert("msg:"+response.data.msg);
})
.catch(function (error) {
alert("error:"+error);
});
</script>
server {
listen 80;
server_name www.vudiep.com;
location /html {
root D:/vudiep;
index index.html index.htm;
}
location /api {
proxy_pass http://127.0.0.1:8080/;
index index.html index.htm;
}
}
6. Phân tách động tĩnh
Khái niệm
Động tĩnh là phân tách tài nguyên động (jsp/ftl) và tài nguyên tĩnh (img/css/js), từ đó tăng tốc độ phản hồi của website;
Chúng ta có thể sử dụng nginx làm máy chủ tài nguyên tĩnh.
Khác biệt giữa phân tách động tĩnh và phân tách frontend-backend
Phân tách frontend-backend: frontend và backend phát triển riêng biệt, ví dụ frontend sử dụng vue phát triển dự án, gọi API backend (java)
Phân tách động tĩnh: phân tách triển khai tài nguyên tĩnh (img/css/js) và tài nguyên động (jsp/ftl);
Khác biệt chỉ thị root và alias
#Nếu cấu hình như trên, thì khi truy cập các tập tin trong thư mục /img/, nginx sẽ tự động tìm đến thư mục /var/www/image/
location /img/ {
alias /var/www/image/;
}
#Nếu cấu hình như thế này, thì khi truy cập các tập tin trong thư mục /img/, nginx sẽ tìm đến thư mục /var/www/image/img/
location /img/ {
root /var/www/image;
}
alias là định nghĩa bí danh thư mục, root là định nghĩa thư mục cấp cao nhất.
Còn một khác biệt quan trọng khác là alias phía sau phải kết thúc bằng "/", nếu không sẽ không tìm thấy tập tin... còn root thì có thể có hoặc không
Cấu hình phân tách động tĩnh nginx
1. Chuyển tiếp theo location khác nhau
server {
listen 80;
server_name www.vudiep.com;
location /static {
alias D:/path/vudiep/images;
}
location /member {
proxy_pass http://127.0.0.1:8080/;
index index.html index.htm;
}
location /order {
proxy_pass http://127.0.0.1:8081/;
index index.html index.htm;
}
}
2. Chuyển tiếp theo server_name
server {
listen 80;
server_name static.vudiep.com;
location / {
alias D:/path/vudiep/images;
}
}
Máy chủ điện toán đám mây băng thông 8 Mbps
Băng thông máy chủ điện toán đám mây tối đa mỗi giây tải xuống đỉnh 8*128KB/s = 1024KB
8.37 MB * 1024 = khoảng 8.5s
Băng thông phía máy chủ
Băng thông 1Mbps máy chủ điện toán đám mây tốc độ tải xuống thực tế đỉnh là 128KB/S, tại sao 1M băng thông không phải là 1M/S, tất nhiên không phải, dù là Alibaba Cloud hay Tencent Cloud hoặc nhà cung cấp điện toán đám mây khác, băng thông 1M máy chủ điện toán đám mây tốc độ tải xuống thực tế đều là 128KB/S. Công thức tính tốc độ tải xuống đỉnh băng thông N Mbps máy chủ điện toán đám mây: 128KB/S * N, 2M dùng 128KB/S nhân 2, 5M nhân 5, 10M nhân 10... cứ như vậy
CDN thực hiện máy chủ tài nguyên tĩnh
js/css/images/video
CDN là viết tắt của Content Delivery Network, tức mạng phân phối nội dung. CDN xây dựng trên nền tảng mạng hiện có là mạng ảo thông minh, dựa vào máy chủ cạnh được triển khai khắp nơi, thông qua các mô-đun chức năng như cân bằng tải, phân phối nội dung, điều phối của nền tảng trung tâm, giúp người dùng gần nhất lấy nội dung cần thiết, giảm tắc nghẽn mạng, tăng tốc độ phản hồi và tỷ lệ trúng của người dùng. Công nghệ chủ chốt của CDN chủ yếu là công nghệ lưu trữ và phân phối nội dung
Nhà cung cấp CDN: Alibaba Cloud (oss), Qiniu Cloud, Huawei Cloud
1. Lưu trữ tài nguyên tĩnh trên máy chủ điện toán đám mây
Cài đặt nginx bằng BaoTa ps aux | grep 'nginx';
Thư mục tài nguyên tĩnh: /www/wwwroot Chúng ta chỉ cần tải tài nguyên tĩnh lên thư mục này
2. Cấu hình liên quan nginx
Thêm cấu hình mới:
server {
listen 80;
server_name 42.192.229.245;
location /static {
alias /www/wwwroot;
}
location / {
proxy_pass http://127.0.0.1:8081;
index index.html index.htm;
}
}
3. Khởi động lại nginx truy cập
http://42.192.229.245/static/vudiep/ CTRL + F5 trực tiếp làm mới bắt buộc, không dùng cache tốc độ truy cập rất chậm
truy cập cdn: http://static.vudiep.com/ke/info.html
4. Sử dụng Qiniu Cloud cdn, Alibaba Cloud (oss)
http://r609kpcod.hb-bkt.clouddn.com/dg2022-02.png?e=1642679899&token=kB6fgktNi-FeuaazHhoDGJuoCEQCrc6gRKHITe4S:xPaoFkONLVtPQbrTGXzyZhMbBYQ=
5. Làm mới cdn
Lưu ý: tập tin tải lên cdn nếu nội dung tập tin thay đổi cần làm mới lại cache cdn.
Làm mới cdn Qiniu Cloud: https://portal.qiniu.com/cdn/refresh-prefetch
7. Lỗi thường gặp
1. Hệ thống Windows nginx khởi động lại xảy ra ngoại lệ:
2. nginx: [error] CreateFile() "C:\Users\chemphern\Desktop\nginx-1.14.0/logs/nginx.pid" failed (2: The system cannot find the file specified)
3. Phân tích vấn đề: khởi động hoặc khởi động lại nginx cần xử lý tiến trình nginx cũ, khi khởi động nginx bình thường sẽ tạo tập tin nginx.pid trong thư mục logs (mặc định), thực tế tùy thuộc vào thuộc tính pid của tập tin nginx.conf.
4. Lý do xảy ra lỗi này là do một số nguyên nhân, ví dụ xóa tay, phần mềm khác xóa, hoặc trường hợp nhấp đúp nginx.exe để khởi động (một số máy Windows nhấp đúp nginx.exe không thể tự động tạo tập tin nginx.pid trong thư mục logs, không biết do kiểu máy tính hay hệ thống hay lỗi nginx),总之 trường hợp này xảy ra, cách tránh là cố gắng dùng dòng lệnh start nginx để khởi động nginx, lúc này chắc chắn sẽ tự động tạo...
5. Giải pháp:
- Mở quản lý tác vụ hệ thống, tìm tiến trình nginx.exe, kill nó
- Mở quản lý tác vụ hệ thống, tìm tiến trình nginx.exe, click phải, chuyển đến chi tiết, cột thứ hai là pid, trong thư mục logs tạo tập tin nginx.pid, trong tập tin chỉ viết pid, lưu lại, sau đó thực hiện lệnh ban đầu.
- Kill tiến trình nginx, khởi động lại nó bằng dòng lệnh