|
|
Hello Tuan (sorry vì mình reply trễ)
Nếu theo các thông số bạn đưa ra trên Webserver này, thì tuyệt nhiên mình không thấy có gì bất thường. Thậm chí là còn nhanh nữa là đằng khác. Đoán già đoán non thôi thì bạn thử gather lại với các thông tin tương tự trên các server khác để so sánh xem có sự chênh lệch ở điểm nào không ? Mình nghĩ nên chạy cho các server ở thời điểm có lượng người truy cập.
Mình chỉ hơi confuse ở 2 điểm này, nếu bạn tiếp tục được cùng mình thì tốt
1. Bạn có hệ thống monitoring nào để lấy các thông tin của các server không ? Mình nghĩ sử dụng graph trong các trường hợp này sẽ thấy được nhiều mối tương quan hơn là chỉ dựa vào các thông số
2. Bạn có đảm bảo rằng Server chậm đang cài giống 100% cấu hình cả mềm lẫn cứng đối với các server khác ?
Kinh nghiệm của mình trong những case mà tất cả mọi thứ đều có sự logic như thế này là "so sánh & so sánh". Có thể 1 vài thông số tunning của application dựa vào phần cứng đã bị sai lệch đi khi chạy trên những hardware profile khác nhau ?
Mình có dùng thử 1 công cụ mới được giới thiệu ở Hacker News là http://www.sysdig.org/. Mình thấy có sự khác biệt rất nhiều so với việc tự gather từ những thông số rời rạc như disk - ram - cpu thông qua các câu lệnh thường dùng. Với sysdig mình nắm được rõ mọi hành vi của bất kì request nào thông suốt từ application đến kernel, tiêu tốn bao nhiêu phần trăm tài nguyên hệ thống. Biết đâu sự bình thường trong những tình huống bất thường diễn ra từ đó.
Thân
|
|
|
Vấn đề ở đây cần focus thì bạn cũng đã nói được là do IO disk.
Theo mình bạn nên focus 1 số điểm như
1. Kết nối mạng giữa NFS storage & Server Web Application
NFS Storage đang chạy raid mấy, có SSD ? kết nối mạng giữa NFS & Server đạt tốc độ bao nhiêu ?
NFS Storage của bạn có đang chạy 1 bản bundle giống như ( gluster , ZFS, openfiler) ?
2. Với mô hình của bạn, mình hiểu bạn đang muốn làm 1 hệ thống clustering với nhiều node app, tất cả đều tập trung source lưu trữ tại NFS. Tuy nhiên sao bạn không sử dụng 1 số sản phẩm cluster có tích hợp Sync ví dụ Corosync, DRBD
Mình nghĩ việc SYNC dựa trên các cơ chế đồng bộ của các sản phẩm HA có thể đáp ứng được những nhu cầu khắt khe nhất trong các mô hình Web - Application, thậm chí là Database
T
|
|
|
Dựa vào tính chất linh động của Docker mà người ta có thể xây dựng nhiều kiến trúc khác nhau. Đặc biệt là Cloud. Thử tưởng tượng mình đang có 1 Farm với khoảng 200 node vật lí. Bình thường mình mất công sử dụng các sản phẩm như OpenVZ - KVM - VMWare hay Xen để tạo các máy guest phục vụ cho các nhu cầu khác nhau. Chỉ tính riêng bài toán quản trị & vận hành, phát triển mở rộng, hay đảm bảo hiệu năng công suất hoạt động 24/24 là một dấu chấm hỏi lớn rồi.
Container đơn giản hơn, việc quản trị các container, tạo, thay đổi thậm chí là xóa có thể thực hiện trong vài câu lệnh. Thậm chí việc triển khai khoảng 100 guests ngay lập tức cũng không phải là một điều đó quá thách thức.
Người ta nói nhiều về docker, về sự hữu dụng của tính chất đơn giản, tinh tế mang lại từ container là vì lẽ đó.
|
|
|
vequeemnhe wrote:
ai nói bảo mật chỉ biết ngồi chơi tôi không phải chuyên gia bảo mật, nhưng đam mê học bảo mật......Có thể nói nghề Bảo Mật y như ảo thuật........Có thể nói (Lập Trình + Quản Trị Mạng ==> hacker ===> Bảo Mật) Học bảo mật có thể nói là cấp bậc cao nhất của IT........
Cái gì nó cũng có sự cao quí nhất định của nó. Không phải cứ mang danh đi làm bảo mật mới thể hiện sự cao cấp nhất.
Tôi làm hốt rác ở Singapore 1 năm nay, nghề nghiệp tôi tầm thường với xã hội nhưng vĩ đại với gia đình. Vì nó là nguồn thu nhập chính của cả nhà
|
|
|
1. Nó không làm việc theo roundrobin . Trừ khi bạn sử dụng DNS để làm việc này. Trong trường hợp của bạn, bạn đang sử dụng mod_proxy để làm việc này.
- Dễ nhận thấy là 2 instance Tomcat đang chạy ở port 8009 & 8209
- Người dùng truy cập vào Port 80 sau đó được Forward (Forward Proxy) vào 2 port trong của Tomcat. Ngược lại Tomcat coi Apache như 1 Reverse Proxy để communicate với client bên ngoài thông qua Port 80
2. Bạn thử truy cập domain/balancer-manager xem có ra cái page nào không ?
Nếu ra thì đó là page quản lí để bạn có thể điều chỉnh việc cách làm việc cho từng node.
Về cách chia thời gian và quản lí phiên làm việc thông qua mod_proxy bạn tham khảo ở đây
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
Chú í phần router & loadfactor
Cheers
|
|
|
vanhuy1023 wrote:
tớ thì trước học ở NIIT ra trường không xin được việc giờ đi làm kỹ thuật viên nè. luu ý ở mấy học viện đó mình học quản trị mạng thì họ không dạy kỹ thuật nhé. 1 phần không xin được việc là do năng lực từng người nhưng lớp mình thì có 24 nhưng đên 18 người không có việc kể cả kỹ thuật cũng không xin được nhé
Bạn cho mình hỏi , bạn học NIIT nào ở đâu được không
Theo mình biết NIIT có trung tâm tư vấn việc làm khá là nhiệt tình. Mình dùng từ "khá" ở đây là vì mình thấy họ rất chịu khó tìm kiếm những cơ hội cho sinh viên sau 1 hoặc 2 lần. Nếu bạn học xong ra, chưa có công việc làm, hoặc có công việc làm không phù hợp thì nên liên hệ với trung tâm đó.
Tuy nhiên mình vẫn nghĩ học ở đâu ra chăng nữa thì cơ hội có 1 công việc tốt phải được chuẩn bị ngay từ những năm đầu trước khi đi học. Tức là nếu những năm đầu bạn chỉ lo cày cuốc cho qua môn, hay thậm chí là cày kiếm điểm cao thì khả năng có 1 công việc là rất thấp. So với việc bạn tham gia vào các cộng đồng, tìm kiếm các jobs free lance. Hay thậm chí chỉ đơn thuần là "giao lưu văn hoá với các tầng lớp "bề trên" có kinh nghiệm.
Mình cũng học NIIT, nhưng bỏ ngay 1 tuần sau khi học. Đến giờ vẫn thất nghiệp nhưng nhờ quen mấy anh HVA như (Ky0 - vikjava .v.v.) nên giờ cũng có chân dọn dẹp, bơm mực máy in, và lau chùi tủ Rack. Khá lắm
-T
|
|
|
Mình thắc mắc là tại sao trong file named.conf không có phần thông tin cho root server hay thông tin forwarders mà nó vẫn lấy được thông tin truy vấn?
Bởi vì DNS của bạn đang sử dụng chức năng Recursion để làm nhiệm vụ phân giải domain.
Recursion sẽ chỉ hoạt động khi bạn có 1 trong 2 điều sau
- 1. File Root.Hints
- 2. Cấu hình Recursion ACL đi đến trực tiếp 1 hoặc nhiều Master DNS được chỉ định
Trong trường hợp này Recursion sẽ forward cái câu hỏi `google.com là IP bao nhiêu`(1) đi đến 13 DNS master để hỏi, nhằm mục đích phân giải IP cho (1)
Code:
Bạn xem lại trong file cấu hình DNS có phần nào có từ root.hints hay không ? hoặc có dòng nào ấn định việc Recursion ACL hay không nhé.
|
|
|
Nhưng có cái đoạn bôi đỏ phía trên mình chưa rõ lắm, bạn chia sẻ cụ thể hơn chút được không, ý tưởng là bạn dùng giải pháp gì và ứng dụng ra sao để xác định đâu là Laptop của Công ty, đâu là laptop ngoài. Phải chăng là xác định theo device code?
Đơn giản là ở đây khía cạnh kỹ thuật chỉ chiếm 70%. Còn Pháp luật sẽ làm nốt 30% còn lại.
Ngoài những biện pháp như chip TPM, block theo MAC address, port security Switch v.v... thì chuyện áp dụng quy chế cty ở đây rất cần thiết (pháp luật)
Mình thấy ở 1 số cty, việc nhân viên được phát máy tính cá nhân sử dụng được thông qua rất kỹ càng. Bình thường ngoài Desktop ra chỉ có những cấp độ chuyên biệt như Senior - Manager trở lên mới có laptop để sử dụng. => Việc thu hẹp phạm vi người sử dụng cũng là 1 cách.
Tuy nhiên nếu người sử dụng (Senior - Manager) ở đây chính là người có dã tâm xấu thì sẽ giải quyết thế nào ? Cái này đã thoát ra hẳn vấn đề về kỹ thuật, những tài liệu công việc của người quản lí cũng sẽ có bản cứng và mềm. Đối với các bản mềm chuyện lưu trữ trong máy dù có bảo vệ cỡ nào thì việc thất thoát là điều không tránh khỏi. Vậy nên sẽ rất khó để nói chuyện nếu như người làm quản lí có dã tâm xấu . :-D
Mình nghĩ vậy, còn chuyện xử trí thế nào với người có dã tâm xấu thì chắc là không nên bàn.
|
|
|
Ví dụ khi abc@zimbra.com có 1 email khẩn cần gửi đến yz@zimbra.com">xyz@zimbra.com thì lúc soạn mail có thể có dấu check nào đó tích vào để gửi kèm 1 sms không? ở đây em đang nghĩ đến vấn đề phát triển 1 zimlets. Nhưng nó hơi khó, không biết là hiện tại có zimlets nào hỗ trợ được điều đó không?
Làm gì mà phải đến cả Zimlets bạn
Đơn giản là khi abc - gửi 1 cái mail quan trọng đến xyz thì làm 1 cái title [Alert] chẳng hạn
Sau đó dựa vào cái Log Zimbra như anh vd_ nói để parse ra. Khi phát hiện ra được rồi thì kích hoạt gửi sms đến số của account xyz như đã định sẵn
Nói dài dòng vậy nhưng thực ra, đoạn tô đậm bạn có thể dùng inotify để làm tốt nó
|
|
|
@xnohat : anh cần đào sâu thêm 1 tầng lớp không nhỏ, đó là teen để giải quyết các vấn đề về các dạng Password sử dụng ngôn từ Việt Nam không chính thống
|
|
|
Mình bỏ học nửa chừng từ năm 16 tuổi rồi chứ không phải 18 nữa. Lớt ngớt lên được đại học thì bỏ hẳn luôn. Những ngày đó với mình như địa ngục vậy, không biết cái gì về ngành mình đam mê theo đuổi. Nói chuyện với những "tấm lá to" để được định nghĩa dẫn dắt nhưng cũng chỉ là phần nào đó. Xong rồi mình cứ nghĩ, nghĩ và nghĩ mãi. Tệ 1 cái là mình chỉ nghĩ chứ không chịu làm. Đó là thứ mình cảm thấy day dứt và áy náy nhất đến tận bây giờ.
Đến bây giờ thì mình vừa làm vừa nghĩ nhưng ít hơn so với ngày xưa, tuy nhiên mình luôn thấy thoải mái từ tâm trạng tinh thần & vật chất, duy chỉ có 1 cái mình còn tồn đọng là tư tưởng ngại khó ngại khổ vẫn chưa hoàn toàn được dẹp bỏ đi. Làm chung với mình bây giờ có đủ các kiểu từ "thiên tài - thần đồng đến các nhà tiên tri ngoại cảm" nhưng mà thứ duy nhất mình có thể học hỏi được ở họ là thái độ sẵn sàng chịu cực và chịu khổ - chịu thiệt thòi ở bất kì thời điểm nào. Bởi vì mình nghĩ chỉ có vượt qua được những khó khăn, khổ cực thì mới có những sự thoả mãn và tin tưởng hơn vào những điều đam mê. Sống cùng nó.
|
|
|
@ikaZuchi
Mình nghĩ Nodeps không phải là một lựa chọn phù hợp cho việc cài cắm Oracle Database, trừ khi bạn biết rõ những Libraries nào cần thiết và tự link nó lại cho những chỗ thiếu.
|
|
|
Man dùng để xem Manual về lệnh muốn sử dụng. Vd: cat, less, vi, apropos
Còn đối với 1 tập lệnh với các tham số Options như
-vv -s0 -i
thì đọc help / man của lệnh đó. Chẳng hạn ở đây lệnh nguyên gốc là tcpdump.
Tcpdump --help
Đối với -vv sẽ thấy dẫn thích rất rõ
-vv Even more verbose output. For example, additional fields are
printed from NFS reply packets, and SMB packets are fully
decoded.
|
|
|
Tạm thời em đang dùng giải pháp hạn chế cpu cho mysql và exim, thấy load cũng đã giảm.
Theo mình hiểu cách bạn hạn chế CPU & MYSQL ở đây là dùng Nice (Set Priority) cho CPU. Điều này có thể được coi như việc cấp Quota cho 1 Process nhất định, nhưng nó cũng là cánh cửa sẵn sàng "bóp" luôn các process khác nếu như lượng request vượt quá số hạn.
|
|
|
Trước khi sizing 1 cái gì từ thiết bị phần cứng, cho đến các tunning chỉnh sửa thì những thông tin như thế này bắt buộc phải có
- Tổng lượng User connect / tính trung bình
- Lượng Concurrent Request thật đến dịch vụ tại mọi thời điểm
- Số lượng User mà bạn nhắm sẽ đáp ứng cho thời điểm hiện tại và tương lai
Trong các thông số mà bạn đưa ở trên kia thì không có cái thông tin gì về lượng người bạn sẽ đáp ứng với cấu hình phần cứng hiện tại cả.
Theo mình, trước khi tunning hay quyết định gia tăng tài nguyên hệ thống nhằm mở rộng tính scalability 1 dịch vụ / 1 ứng dụng phục vụ người dùng. Mình phải thấy được rõ những thông số thật mà hệ thống hiện tại đang phải chịu tải, kiểm tra từ các thành phần Application - Operating System - Network - Hardware xem có bị bottleneck ở đâu không rồi mới bắt đầu tiến hành nâng cấp.
Tất nhiên để làm được cái đoạn in nghiêng trên thì chỉ có 1 cách giúp bạn đó là theo dõi. Những công cụ monitor như Dtracetool , Sysstat (có sẵn) v.v... đều có thể làm rất tốt việc này.
|
|
|
Virtual Hosting
|
|
|
Code:
The sticky bit looks like: -rwx——T
When the sticky bit is enabled, only the owner of the file can change its permissions or delete it. Without the sticky bit, anyone with write permissions can change the modes (including ownership) or delete a file. This one is also handy when sharing files with a group of people.
http://www.linuxnix.com/2012/01/sticky-bit-set-linux.html
|
|
|
1. Force mọi người change Password với độ dài và sự phức tạp ở mức cao. Làm sao để làm được điểu này thì mình nghĩ Group Policy hoặc Mail exchange policy có thể làm tốt
2. Thiết lập Spam Filtering để chống chọi việc BruteForce và các hiểm hoạ từ bên ngoài, việc này là rất cần thiết vì nếu Public trực tiếp hệ thống Mail ra ngoài như bạn sẽ là hiểm hoạ nếu như attackers gain được quyền nhất định trên hệ thống
3. Tận dụng tối đa các chức năng trống BruteForce như BanIP - Lock account khi cố đăng nhập quá 3 lần v.v..
4. Theo dõi :-D
p/s : block not blog
|
|
|
Hi
Mình làm việc với trình duyệt web suốt ngày nên file Bookmark cũng ngày một tăng to.
Vấn đề là sau khi chuyển qua Chrome thì file BookMark của Chrome đi theo 1 chuẩn riêng, không còn là HTML ở dạng thô như FireFox nữa. Nên Mình nghĩ ít nhiều mọi người sẽ thấy phiền toái khi suốt ngày chăm chăm đi lo backup bằng cách Export to HTML.
Giải pháp này sẽ giải quyết tất cả những vấn đề này bằng 1 cách hoàn toàn tự động.
1. Ở Linux, file bookmark của Chrome được lưu tại đường dẫn
Code:
/home/[username]/.config/google-chrome/Default/
Tại đường dẫn này bạn sẽ thấy 1 file BookMark & BookMark.Bak. Ok! Quên cái file BookMark.Bak đi
2. Xử lí cái BookMark hiện tại ra HTML file thông qua code python của bdesham
Code:
#!/usr/bin/python
# py-chrome-bookmarks
#
# A script to convert Google Chrome's bookmarks file to the standard HTML-ish
# format.
#
# (c) Benjamin Esham, 2011. See the accompanying README for this file's
# license and other information.
import json, sys, os, re
script_version = "1.1"
# html escaping code from http://wiki.python.org/moin/EscapingHtml
html_escape_table = {
"&": "&",
'"': """,
"'": "'",
">": ">",
"<": "<",
}
def html_escape(text):
return ''.join(html_escape_table.get(c,c) for c in text)
def sanitize(string):
res = ''
string = html_escape(string)
for i in range(len(string)):
if ord(string[i]) > 127:
res += '%x;' % ord(string[i])
else:
res += string[i]
return res
def html_for_node(node):
if 'url' in node:
return html_for_url_node(node)
elif 'children' in node:
return html_for_parent_node(node)
else:
return ''
def html_for_url_node(node):
if not re.match("javascript:", node['url']):
return '<dt><a href="%s">%s</a>\n' % (sanitize(node['url']), sanitize(node['name']))
else:
return ''
def html_for_parent_node(node):
return '<dt><h3>%s</h3>\n<dl><p>%s</dl><p>\n' % (sanitize(node['name']),
''.join([html_for_node(n) for n in node['children']]))
def version_text():
old_out = sys.stdout
sys.stdout = sys.stderr
print "py-chrome-bookmarks", script_version
print "(c) 2011, Benjamin Esham"
print "https://github.com/bdesham/py-chrome-bookmarks"
sys.stdout = old_out
def help_text():
version_text()
old_out = sys.stdout
sys.stdout = sys.stderr
print
print "usage: python py-chrome-bookmarks input-file output-file"
print " input-file is the Chrome bookmarks file"
print " output-file is the destination for the generated HTML bookmarks file"
sys.stdout = old_out
# check for help or version requests
if "-v" in sys.argv or "--version" in sys.argv:
version_text()
exit()
if len(sys.argv) != 3 or "-h" in sys.argv or "--help" in sys.argv:
help_text()
exit()
# the actual code here...
in_file = os.path.expanduser(sys.argv[1])
out_file = os.path.expanduser(sys.argv[2])
try:
f = open(in_file, 'r')
except IOError, e:
print >> sys.stderr, "py-chrome-bookmarks: error opening the input file."
print >> sys.stderr, e
exit()
j = json.loads(f.read())
f.close()
try:
out = open(out_file, 'w')
except IOError, e:
print >> sys.stderr, "py-chrome-bookmarks: error opening the output file."
print >> sys.stderr, e
exit()
out.write("""<!DOCTYPE NETSCAPE-Bookmark-file-1>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
<title>Bookmarks</title>
<h1>Bookmarks</h1>
<dl><p>
<dl>%(bookmark_bar)s</dl>
<dl>%(other)s</dl>
"""
% {'bookmark_bar': html_for_node(j['roots']['bookmark_bar']),
'other': html_for_node(j['roots']['other'])})
out.close()
3. Cách sử dụng
Code:
python convert.py Bookmarks /home/user/Dropbox/Bookmarks20132703.html
convert.py là tên của mã nguồn Python do mình tự phịa
4.Script hoá toàn bộ
Code:
#!/bin/bash
date=`date +%F-%H-%M-%S`
/usr/bin/python /home/user/convert.py /home/user/.config/google-chrome/Default/ /home/user/Dropbox/bookmarks-$date.html
5.Crontab
Code:
0-59 * * * * sh /home/user/backupbookmarks.sh
Finish!
@Bài viết tham khảo cách viết script của anh QuanTa :-D
|
|
|
Bạn tham khảo ở đây.
http://social.technet.microsoft.com/Forums/en-US/winserverNIS/thread/dd1ff222-0ab0-43b3-87eb-d3ba2aa7a862/
http://support.microsoft.com/kb/818020/en-us
Tuy nhiên theo mình, muốn 1 hạ tầng DNS làm việc theo ý mình không phải chỉ là việc xoá bỏ hay thêm bớt các Zone. Nên hiểu rõ bản chất của Forward - Recursion . Split DNS (Internal DNS / External DNS)
|
|
|
Code:
The string “/w00tw00t.at.ISC.SANS.DFind:)” can be found in error logs of web servers and it is generated by a [b]web scanner named DFind that scans IP addresses for vulnerabilities [/b], looks like it scans all servers that have port 80 open.
|
|
|
Phân tích các port này 1 tí trước khi xét đến việc đóng mở
135. TCP Port 135 - RPC Terminal Services Licensing
Port này & port 389 RDP mà bạn đã đổi thành 999 đi kèm nhau, nhằm phục vụ cho Remote Desktop. Khi bạn khởi tạo 1 connection từ phía client, Server muốn thông qua giao thức RPC để get các thông tin như licensed, cert v.v.. thì sẽ sử dụng RPC. Nếu bạn đóng Port này thì sẽ có vấn đề đối với các dịch vụ khác cần sử dụng RPC Services bao gồm cả RDesktop
3306. Mysql, bạn có thể sử dụng chức Listen / Bind IP gì đó để thay vì nó listen all IP 0.0.0.0 thì bây giờ nó sẽ chỉ listen 1 dải IP hoặc thậm chí là chỉ listen chính nó (localhost). Tuy nhiên chú ý điểm này, nếu như MYSQL của bạn đang đặt tại 1 máy chủ khác có IP khác với địa chỉ IP server chạy Blog PHP
49152 - 49157 trong Windows Server 2008 , hay nói đúng hơn là từ (49152 - 65535) là số lượng port được W 2008 reserve phục vụ cho những application / services nào đó của hệ thống chạy sẽ sử dụng vào đó. Nếu như bạn kiểm tra thấy có port này đang mở kèm vào 1 số PID như hình thì có lẽ là do services SYstem Event Notification đang cần sử dụng nó.
445 thì đơn giản đó là SMB sử dụng cho các dịch vụ chia sẻ file. Chắc chắn rằng không có bất kì 1 folder/files nào trên hệ thống này được chia sẻ thì Port này sẽ đóng
Mình định trả lời tiếp cách nào để chặn các port này, nhưng mà thấy yêu cầu không dùng Firewall của bạn nên thôi vậy
|
|
|
ANh quân ơi, hôm nào viết 1 bài về cách sử dụng strace & trace cho hiệu quả đi anh.
Nhìn cách anh dùng strace mà thèm ghê :-D
|
|
|
Từ chuyện kiếm IP rồi thành Administrator của Apple thật là vãi
|
|
|
iPXE
Invisible Touch
Collins
Phil
KickStart
Puppet
:-D mình cũng chưa bao giờ buil được 1 giải pháp hoàn chỉnh từ mấy công cụ này, Nhưng mà mình có thể tích hợp chúng sao cho thuận tiện nhất đối với những doanh nghiệp có số lượng server không quá 100
|
|
|
2. Nơi lưu trữ của man thường được đặt trong
/usr/share/man
Tại đây chứa các bản document của các câu lệnh được nén lại dưới dạng .gz. Khi extract ra view nó được viết dưới kiểu LaTex
3. /bin được sử dụng như 1 bộ command tối thiểu dùng cho emergency repair/booting khi phân vùng filesystems (/usr) chưa được mount lên. Boot vào single user mode để hiểu rõ hơn này.
/usr/bin là nơi lưu trữ chính tệp thực thi của các câu lệnh trên hệ thống.
|
|
|
Tuy nhiên, lại gặp phải khó khăn là log nhiều dòng (multiline)
Thông thường mỗi Action/Activities của Log bị chia ra nhiều dòng làdo mức độ Log Level chưa được ấn định 1 cách cụ thể. Chẳng hạn giữa mức độ Info & Debug thì có sự khác nhau rõ rệt trong cùng 1 hành động Login. Vì vậy tuỳ từng server với nhu cầu mục đích cụ thể mà lựa chọn cho phù hợp
|
|